Linux系统启动过程剖析

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Linux系统启动过程剖析

作者:omgleoo
链接:https://www.omgleoo.top/

想要更好的了解Linux系统的运行原理,了解系统启动的流程是非常有必要的。

通常,我们按过开机电源之后,会听到机箱内发出“滴”的一声,接着屏幕上开始打印出一些字符,然后开始显示出图形界面,最后屏幕上会显示需要输入用户名和密码的登陆界面。其实不管是Linux还是Windows,从用户感官的体验来说,启动顺序都是大同小异的。下面我会详细描述一下Linux系统的启动流程。

相关概念

GRUB

GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。

runlevel

Linux中默认又7个运行级别,从0到6每个运行级别的含义如下:

  • 运行级别0:关机
  • 运行级别1:单用户模式,如系统出现问题,可使用这种模式进入系统进行维护(如忘记root密码)
  • 运行级别2:多用户模式,但是没有网络连接。
  • 运行级别3:完全多用户模式。默认运行级别
  • 运行级别4:保留未使用。
  • 运行级别5:窗口模式,支持多用户,支持网络。
  • 运行级别6:重启。
  • 运行级别1:单用户模式,如系统出现问题,可使用这种模式进入系统进行维护(如忘记root密码)

    运行级别3:完全多用户模式。默认运行级别

    运行级别5:窗口模式,支持多用户,支持网络。

    任何时候Linux只能在一张runlevel下运行。

    健康检查

    当我们按过开机按钮之后,计算机会加载BIOS,这是计算机上最接近硬件的软件。每家主板制作商都会开发适合自家主板的BIOS,而BIOS的一项很重要的功能就是对自身的硬件做一次健康检查,只有硬件没有问题才会运行软件。

    PS: 操作系统也是一种软件

    这种通电后开始的自检过程被称做“加电自检(Power On Self Test)”简称POST,如果所有的硬件设施自检通过,一般都会发出一声“滴”的短音提示,说明硬件一切正常。

    引导系统

    在BIOS的设定中,机器自检通过之后,接着就要运行引导程序了。BIOS默认会从硬盘上的第0柱面,第0磁道,第一个扇区中读取被称为MBR的东西,即主引导记录。

    一个扇区的大小是512字节,存放的内容是一段引导程序和分区信息。其中引导程序占用446字节,另外64字节是磁盘分区表DPT,最后两字节是MBR的结束位。

    这512字节的空间内容是由专门的分区程序产生的,比如说Windows下的fdisk.exe文件,或者Linux下的fdisk命令,它不依赖任何操作系统,而MBR中的引导程序也是可以修改的,所以可以利用这个特性实现多操作系统的共存。

    RedHat和CentOS默认会使用Grub作为其引导操作系统的程序,但是Grub本身又比较大,所以常见的方式是在MBR中写入Grub的地址,这样系统实际会载入Grub作为系统程序的引导程序。

    运行Grub

    经过上面两步的准备,接下来就是顺利成章的运行Grub了。Grub最重要的功能就是根据它的配置文件加载Kernel镜像,并运行内核加载后的第一个程序/sbin/init,这个程序会根据/etc/inittab 来进行初始化工作。

    其实这里最重要的是根据文件中设置的值来确定系统将会运行的runlevel,默认的runlevel定义在“id:3:initdefault:”中,其中数字3说明目前的运行级别定义为3

    设置系统变量,配置环境

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

    根据runlevel的值运行相应的服务

    这一步是根据之前读到的runlevel的值来启动对应的服务,如果值为3,就会运行/etc/rc3.d下的所有脚本,如果runlevel=5,就会运行/etc/rc5.d下的所有脚本。

    最后

    最终将运行/etc/rc.local并生成终端或者X Windows等待用户登陆。至此Linux启动过程运行结束。

    点击图片加入Spring交流群

    ↓↓↓

    看完本文有收获?请转发分享给更多人

    Linux系统启动过程剖析
    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> Linux系统启动过程剖析


     上一篇
    CentOS7.x 安装 Spark和集群搭建 CentOS7.x 安装 Spark和集群搭建
    准备工作首先得安装scala: 下载解压配置1. 配置环境变量 /etc/profile 123export SPARK_HOME=/home/fantj/sparkexport PATH=$PATH:$SPARK_HOME/binexpo
    2021-04-05
    下一篇 
    这几条命令瞬间让你变成 Linux 高手 这几条命令瞬间让你变成 Linux 高手
    01 — ls ls : 作用仅仅是列表当时文件夹的文件.使用起来也非常简单: 02 — ll ll : 作用想当于 windows 的明细列表, 可以列出文件的一些大小等属性信息 : 03 — mkdir mkdir 
    2021-04-05