Linux操作系统的开机流程

1.加载BIOS

  • 当开机自检完成后,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。
  • 因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。

2.读取MBR

  • 硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。
  • 系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。

MBR中存在如下内容:

  • Boot Loader 占用446字节,存储有操作系统(OS)相关信息,如操作系统名称,操作系统内核位置等,它的主要功能是加载内核到内存中运行。
  • Partition Table 分区表,占用64字节,每个主分区占用16字节(这就是为什么一块硬盘只能有4个主分区)
  • 分区表有效性标记占用2字节 
    CPU将MBR读取至内存,运行GRUB(Boot Loader常用的有GRUB和LILO两种,现在常用的是GRUB),GRUB会把内核加载到内存去执行。

3.GRUB菜单

  • GRUB菜单,也就是操作系统引导菜单

4.加载内核

  • 根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
  • 系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
  • 也就是启动操作系统的核心

5.用户层init依据inittab文件来设定运行等级

  • 内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
  • 其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
  • 0:关机
  • 1:单用户模式
  • 2:无网络支持的多用户模式
  • 3:有网络支持的多用户模式
  • 4:保留,未使用
  • 5:有网络支持有X-Window支持的多用户模式
  • 6:重新引导系统,即重启

6.读取/etc/inittab配置文件

  • 也就是linux开机时默认的启动模式。在/etc/inittab这给配置文件下可以修改开机默认启动选项

 7. 执行/etc/rc.d/rc.sysinit初始化脚本。

     也就是init进程的初始化用来执行kernel的任务

8.执行不同运行级别的脚本程序

  • 根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
  • 执行/etc/rc.d/rc脚本,通过执行脚本找出默认启动模式选项要启动的进程

9.执行/etc/rc.d/rc.local个人配置脚本

           也就是用户想要开机自启动的命令或者进程都放在这个脚本文件内,这样设置开机自启方式比较安全。开机时这给脚本文件内的所有命令全部执行一遍

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

10.启动mingetty进程

  • 此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。
原文地址:https://www.cnblogs.com/changtianwei/p/9845333.html