zoukankan      html  css  js  c++  java
  • 10. linux 系统启动流程

    POST-->BIOS(Boot Sequence)-->MBR(bootloader,446)-->Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab)

    POST:Power On Self Test 简称POST,加电自检

    BIOS自检-->从BIOS中读取启动顺序-->读取MBR中的bootloader-->加载内核-->读取伪根-->读取根文件中的init

    Step1 :BIOS自检

    步骤1:上电自检POST(Power-on self test),主要负责检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。例如,最常见的是内存松动的情况,BIOS自检阶段会报错,系统就无法启动起来;

     步骤2:步骤1成功后,便会执行一段小程序用来枚举本地设备并对其初始化。这一步主要是根据我们在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器,如硬盘、光盘、U盘、软盘和网络等。我们以硬盘启动为例,BIOS此时去读取硬盘驱动器的第一个扇区(MBR,512字节),然后执行里面的代码。实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行。

    至此,BIOS的任务就完成了,此后将系统启动的控制权移交到MBR部分的代码。

    Step 2: 系统引导

    我们首先来了解一下MBR,它是Master Boot Record的缩写。硬盘的0柱面、0磁头、1扇区称为主引导扇区。它由三个部分组成,主引导程序(Bootloader)、 硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA),其结构图如下所示:

    磁盘分区表包含以下三部分:

            1)、Partition ID  (5:延申  82:Swap   83:Linux   8e:LVM     fd:RAID)

            2)、Partition起始磁柱

            3)、Partition的磁柱数量

           通常情况下,诸如lilo、grub这些常见的引导程序都直接安装在MBR中。我们以grub为例来分析这个引导过程。

           grub引导也分为两个阶段stage1阶段和stage2阶段(有些较新的grub又定义了stage1.5阶段)。

    Step 3:运行Grub,Grub最重要的功能就是根据配置文件加载kernel镜像

    运行init

    init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。

    init 程序首先是需要读取配置文件 /etc/inittab。

    运行级别

    许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。

    init进程的一大任务,就是去运行这些开机启动的程序。

    但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。

    Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。

    Linux系统有7个运行级别(runlevel):

    • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
    • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
    • 运行级别2:多用户状态(没有NFS)
    • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
    • 运行级别4:系统未使用,保留
    • 运行级别5:X11控制台,登陆后进入图形GUI模式
    • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

    Step 4:系统初始化

    Linux 将根据/etc/inittab中定义的系统初始化配置si::sysini:/etc/rc.d/rc.sysinit执行/etc/rc.sysinit脚本,该脚本将会设置系统变量/网络配置。并启动swap,设定/proc,加载用户自定义模块。加载内核设置等。

    Step 5:根据第三步读到的runlevel 值来启动对应的服务

    如果值是3,就会运行/etc/rc3.d.如果值是5,就会运行/etc/rc5.d

    Step 6 :运行/etc/rc.local

    Step7:生成终端或X Windows 来等待用户登录

     其中:

    在运行启动脚本的时候,其中K代表就脚本关闭。S代表启动相关服务 

    参考:https://www.cnblogs.com/love3556/p/5908001.html

    参考:https://www.runoob.com/linux/linux-system-boot.html

  • 相关阅读:
    NodeJS Stream 五:双工流
    NodeJS Stream 四:Writable
    NodeJS Stream 三:readable
    NodeJS Stream 二:什么是 Stream
    NodeJS stream 一:Buffer
    JavaScript 精粹
    详解k8s中的liveness和readiness的原理和区别_转
    通过 GoLang 全面了解 HTTPS_转自知乎-腾讯技术
    golang之vim和vscode开发环境
    go命令工具补遗
  • 原文地址:https://www.cnblogs.com/shix0909/p/11109710.html
Copyright © 2011-2022 走看看