linu系统启动的详细流程

1. POST

加电自检:检查系统的硬件设备,主要是cpu和内存,完成系统启动硬件方面的准备。

2.BIOS(boot sequence)

确定加载的次序,这是在硬中故有的,和操作系统是否没有启动没有关系。在计算机开机的时候,它都会自己在CPU中执行,确定好机器寻找的设备次序。

3.MBR(bootloader)

MBR是内存中一段特殊的空间,他会按照grub软件中的菜单,由用户选择要加载的内核程序。然后,将操作系统所在盘中的bootloader加载到MBR中。接着,bootloader会自动加操作系统的内核至内存中。
在这里有一个矛盾,bootlaoder加载至内存后,然后将内核加载到内存中,需要文件系统才能将内核格式化才能将内核加到内存中,但此文件系统就在内核中,内核还没有加载到内存中,就无法进行格式化。因此,我们需要在booloader和内核之间有一个中间的介质,先去将内核存在的分区格式化,然后在让内核中的文件系统格式化其他分区。
这个介质,我们叫他ramfs或者ramdisk,他是一个非常微小的操作系统,可以将内核所在的分区格式化。

4.kernel(内核)

redhat的内核由两部分组成,一部分是内核的核心,另一部分是内核的一些模块。这精简了内核为了是操作系统的按安装更加简洁。
内核有7个运行级别:
0:关机halt
1:单用户模式,直接使用管理员登陆
2:多用户登陆,没有nfs
3:多用户命令行界面登陆
4:保留级别
5:多用户图形界面登陆
6:reboot重启
内核的四个作用:

  • 设备探测
  • 硬件设备驱动的初始化(/etc/initrd)
  • 以只读方式挂在根文件系统
  • 启动系统的第一个进程(init)

5.initrd

这一部时为了解决内核与驱动程序之间的矛盾。内核加载硬盘上的程序就需要硬件的驱动,而驱动就在硬盘上。因此,需要一个程序先驱动存放驱动的硬盘,然后,再将硬盘里的驱动加载到操作系统中。

6.init

这是操作系统启动的第一个真正意义上的进程,其他所有进程都是这个进程的自进程。下面解释几个与init相关的文件与目录:

1 ./etc/initab

第一默认系统的运行级别;第二进行系统的初始化;第三运行指定级别的服务脚本。
/etc/rc.d/init.d:存储着每一个服务的脚本
/etc/rc.d/rc#.d:每一个目录下面都有这个级别下对应的服务(K表示这个服务在这个运行级别中是开启的;S表示这个服务在这个运行级别中是关闭的)(0-99表示这些服务启动的次序)
/etc/rc.d/rc.local:是系统启动的最后一个脚本
/etc/rc.d/rc.sysinit:

  • 检测并且以读写方式重新挂载根文件系统
  • 设定主机名
  • 检测并挂载/etc/fstab中的其他文件系统
  • 启用swap分区
  • 初始化外围硬件设备的驱动
  • 根据/etc/sys.conf设定内核参数
  • 激活udev和selinux
  • 激活LVM和RAID设备
  • 清理过期锁和PID文件
  • 装载键映射

你可能感兴趣的:(linu系统启动的详细流程)