zoukankan      html  css  js  c++  java
  • Linux系统启动流程

    LInux系统启动流程

    1、背景

      计算机主要由底层的硬件和附着在硬件上的操作系统组成的。硬件是计算机工作的基础,但是他本身是不能

    提供任何服务的。所以,我们需要通过一种软件来操作这些硬件,以便向上提供服务。这就是操作系统。所以,

    Linux系统的启动流程就是从硬件到操作系统的过程。

     

    2、Linux启动简单图解

    3、Linux系统启动过程详细解释

    第一步:开机自检,加载BIOS

      开启计算机,首先会加载BIOS。此步骤个主要是对硬件进行检查并获取相关的硬件信息。主要包括: CPU 的相关信息、设备

    启动顺序信息、硬盘信息、内存信息、时钟信息、PnP 特性等等。获取相关信息后,计算机就知道他的硬件设备在哪了。接下来就

    是读取MBR记录,将系统的控制权交给MBR。

    第二步:加载MBR

      MBR是Master Boot Record的简称,即主引导记录。它位于磁盘上的0柱面,0磁道的第一个扇区。大小为512byte,里面存放了

    系统预启动信息,磁盘分区表信息,以及分区标志。

      MBR由三个部分组成:第一部分占有446个bytes,主要是引导区,存放的是预启动指令;第二部分占64bytes,存放的是分区表

    信息;第三部分占2bytes,存放的是分区的结束标志信息。

      预引导区的作用之一是找到标记为活动(ACTIVE)的分区,并将活动分区的引导区读入内存。

      系统找到 BIOS 所指定的硬盘的 MBR 后,就会将其复制到 0×7c00 地址所在的物理内存中。其实被复制到物理内存的内容就是

    Boot Loader,而具体到 Linux 系统,那就是 grub了。

    第三步:加载GRUP菜单,即Boot Loader引导加载器

      Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映

    射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。通常,Boot Loader 依赖于硬件

    而实现的,不同体系结构的系统存在着不同的 Boot Loader。

      Boot Loader 有若干种,其中 Grub、Lilo 和 spfdisk 是常见的 Loader。

      系统读取内存中的 grub 配置信息(一般为 menu.lst 或 grub.lst),并依照此配置信息来启动不同的操作系统

    grup配置文件:grup菜单的详细解释请参考:

    http://blog.51cto.com/oldboy/2093484
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/sda2
    #          initrd /initrd-[generic-]version.img
    #boot=/dev/sda
    default=0  -----》表示grup菜单中默认的第一个内核版本
    timeout=5  -----》菜单页停留5秒
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS 6 (2.6.32-696.el6.x86_64)
            root (hd0,0)
            kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=79123144-98e1-4a97-ab97-c0231b9d
    1190 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_
    NO_LVM rd_NO_DM rhgb quiet
            initrd /initramfs-2.6.32-696.el6.x86_64.img
    

    提示:Boot Loader在准备环境时,最主要的是确定你要安装的内核版本,内核映像文件的存在位置,以便后来加载内核时使用。

      

    第四步:加载内核

      根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”

    的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。系统将解压后的内核放置在内存之中,并调用start_kernel()函

    数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序

    应该可以正常运行了。

    第五步:创建init进程依据inittab文件来设定运行等级

      内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。

    其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运

    行在等级5上。Linux的运行等级设定如下:

      0:关机
      1:单用户模式
      2:无网络支持的多用户模式
      3:有网络支持的多用户模式
      4:保留,未使用
      5:有网络支持有X-Window支持的多用户模式
      6:重新引导系统,即重启

    第六步:加载/etc/rc.d/rc.sysinit文件进行初始化

      在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括

    设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。

    第七步:加载内核模块

      具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。

    第八步:根据/etc/inittab确定的运行级别到/etc/rc.d/rc#.d目录下启动响应的服务

      根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。

    第九步:加载/etc/rc.d/rc.local文件

      rc.local 就是在一切初始化工作后,Linux 留给用户进行个性化的地方。可以把你想设置和启动的东西放到这里。

    第十步:加载/etc/login程序,启动 mingetty,进入登陆界面

  • 相关阅读:
    Go语言使用grpc
    Go语言中使用protobuf
    proto3语法
    golang标准库io
    走近docker--容器生态系统
    编译技术图式(第四章 语义分析)
    计算机组成原理与结构图示(存储器设计)
    微机原理与汇编接口图式(第一章 数制)
    编译技术图式(第四章 语法分析)03自下而上的语法分析
    计算机组成原理和结构图式(第四章 存储器子系统)
  • 原文地址:https://www.cnblogs.com/myeric/p/9011803.html
Copyright © 2011-2022 走看看