博客
关于我
Linux基础之系统启动流程
阅读量:641 次
发布时间:2019-03-14

本文共 1630 字,大约阅读时间需要 5 分钟。

操作系统启动过程是一个复杂的过程,通常分为几个关键阶段。从BIOS自检到系统引导,再到内核初始化,最后完成系统初始化,这些环节共同确保操作系统能够顺利启动。

在Linux系统中,内核的运行是从入口点开始的。入口点程序的主要任务是为内核运行做好准备,包括将内核镜像加载到物理内存中、获取系统配置信息、初始化管理数据结构、启动守护进程等。内核镜像的加载工作由引导程序(boot loader)负责完成,而引导程序本身也是在BIOS中预先写入的。

CENTOS 6 启动流程

第一阶段:硬件启动阶段

这一阶段主要完成硬件的基本初始化。流程包括:

  • 打开电源:系统开始运行。
  • POST自检:Power On Self Test,检查硬件设备是否正常工作。
  • BIOS启动顺序:BIOS逐一排查设备的启动顺序。
  • MBR引导:如果是硬盘启动,BIOS读取硬盘的主引导扇区(MBR),从中获取BootLoader的位置信息。
  • 关键点

    • MBR:硬盘的第一个扇区,包含BootLoader(446字节)、硬盘分区表(64字节)和硬盘有效标志(2字节)。
    • BootLoader:根据系统类型不同,Windows使用NTLDR/Bootmgr,而Linux通常使用GRUB(Grand Unified Bootloader)。

    第二阶段:GRUB引导阶段

    GRUB程序在Stage1、Stage1.5和Stage2三个阶段完成引导工作。

  • Stage1阶段:执行MBR中的BootLoader程序,读取Stage1文件并将其加载到内存中。
  • Stage1.5阶段:识别文件系统并加载Stage2文件。
  • Stage2阶段:解析Stage2配置文件(/boot/grub/grub.conf),加载内核镜像和初始化根文件系统。
  • 关键点

    • Stage1.5阶段是Stage1和Stage2的桥梁,具备识别文件系统的能力。
    • Stage2阶段完成内核镜像的加载和系统初始化,准备切换到保护模式。

    第三阶段:内核引导阶段

    内核启动时,首先加载驱动程序,并切换到真正的根文件系统,随后执行/sbin/init程序。

    第四阶段:系统初始化阶段

  • /etc/inittab文件:指定系统的运行级别。
  • 启动脚本:通过/etc/rc.d/rc#.d/目录下的服务脚本(K/S开头)完成服务的启动和停止。
  • /etc/rc.local文件:用户自定义启动脚本。
  • CENTOS 7 启动流程

    与CentOS6相比,CentOS7在引导和初始化阶段有以下差异:

    第一阶段:硬件启动阶段

    与CentOS6基本一致。

    第二阶段:GRUB2引导阶段

    CentOS7使用GRUB2作为引导程序,其配置文件为/boot/grub/grub.cfg。

    关键点

    • GRUB2支持更多的模块化加载(模块文件MOD),使引导过程更加灵活。
    • 配置文件生成命令为grub2-mkconfig -o /boot/grub2/grub.cfg

    第三阶段:内核引导阶段

    与CentOS6基本一致,但初始化程序由/usr/lib/systemd/systemd替代传统的 /sbin/init

    第四阶段:systemd初始化阶段

    CentOS7使用systemd作为系统初始化工具,主要依赖以下文件和目录:

    • /etc/systemd/system/default.target:默认运行目标配置文件。
    • /usr/lib/systemd/systemd:系统初始化进程。
    • /etc/rc.d/rc.local文件:用户自定义启动脚本。

    关键点

    • systemd支持并行服务启动,降低了Shell层的开销。
    • 服务配置文件存储在 /usr/lib/systemd/system//run/systemd/system/ 目录下。
    • 大部分服务脚本通过软链接形式存在,保持向后兼容性。

    通过以上流程,可以清晰地看到操作系统从硬件到软件的完整启动过程。

    转载地址:http://zijlz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现BeadSort珠排序算法(附完整源码)
    查看>>
    Objective-C实现bellman ford贝尔曼福特算法(附完整源码)
    查看>>
    Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现bellmanFord贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现BellmanFord贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现bezier curve贝塞尔曲线算法(附完整源码)
    查看>>
    Objective-C实现bfs 最短路径算法(附完整源码)
    查看>>
    Objective-C实现BF算法 (附完整源码)
    查看>>
    Objective-C实现Bilateral Filter双边滤波器算法(附完整源码)
    查看>>
    Objective-C实现binary exponentiation二进制幂运算算法(附完整源码)
    查看>>
    Objective-C实现binary search二分查找算法(附完整源码)
    查看>>
    Objective-C实现binary tree mirror二叉树镜像算法(附完整源码)
    查看>>
    Objective-C实现binary tree traversal二叉树遍历算法(附完整源码)
    查看>>
    Objective-C实现BinarySearchTreeNode树算法(附完整源码)
    查看>>
    Objective-C实现binarySearch二分查找算法(附完整源码)
    查看>>
    Objective-C实现binomial coefficient二项式系数算法(附完整源码)
    查看>>
    Objective-C实现binomial distribution二项分布算法(附完整源码)
    查看>>
    Objective-C实现bisection二分法算法(附完整源码)
    查看>>
    Objective-C实现bisection二等分算法(附完整源码)
    查看>>