Linux系统启动过程

目录

启动总览

1、BIOS加电自检和初始化

2、加载主引导加载程序(MBR)

3、Boot loader/GRUB  

4、加载linux内核映像  

5、运行INIT进程(RHEL7为systemd进程)

INIT进程:

rc.sysinit文件

rc脚本文件

rc.local脚本文件

6、自定制启动程序

7、执行/bin/login程序,进入登录状态


启动总览

Linux系统启动过程_第1张图片


1、BIOS加电自检和初始化

计算机会首先加载BIOS信息,这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息等等。

2、加载主引导加载程序(MBR)

Master Boot Record,即主引导记录,它的大小是512字节,里面却存放了预启动信息、分区表信息。主引导程序的任务就是查找并且加载处在硬盘分区上的次引导程序。通过分区表查找活动分区,并将处在活动分区的次引导加载程序读取到内存里面运行。

3、Boot loader/GRUB  

boot loader就是在操作系统内核运行之前执行的的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为加载内核做准备。常见的boot loader有Grub、Lilo和spfdisk

4、加载linux内核映像  

用户选择要加载的内核之后,次引导加载程序(GRUB)就会根据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取Linux内核映像,然后把内核映像加载到内存中并把控制权交给Linux内核。  

linux内核获得控制权之后开始做一下事情:

  • (1)检测硬件  
  • (2)解压缩自己并安装必要驱动  
  • (3)初始化与文件系统相关的虚拟设备  
  • (4)装载根文件系统,挂在根目录下面  
  • (5)完成之后,linux在进程空间里面加载systemd程序

5、运行INIT进程(RHEL7为systemd进程)

这也是个初始化过程,在硬件和驱动加载完成后,内核会主动呼叫systemd程序,systemd是所有进程的发起者和控制者,所有的进程都由此衍生。systemd进程获得控制权之后,它会执行/etc/rc.d/rc.sysinit脚本,根据里面的代码设置环境变量、网络、启动swap、检查并挂载文件系统、执行其他初始化工作。

INIT进程:

是由Linux内核加载运行/sbin/init 程序;是系统中第一个进程,PID(进程标记)永远为1。

配置文件为:/etc/inittab

id:3:initdefault:sisysinit:/etc/rc.d/rc.sysinit

I0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

#以下6行定义了6个终端,通过/sbin/minggetty程序提供服务。

1:2345:respawn:/sbin/mingetty tty1                                  

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

Inittab文件结构:该文件的结构如下所示,

ID:Runlevel:Action:Process

ID:用于在Inittab文件中唯一表示一个配置记录,对于Getty和或minggetty等其他login程序项,要求ID与tty编号相同,否则Getty程序将不能正常工作。

Runlevel:用来指定该记录在那些运行级别上运行·,一般使用0一6以及S或s。S和s意义相同,表示单用户模式,且无需inittab文件,因此也不在inittab中出现,实际上,进入单用户模式时,init直接在控制台(/dev/console)上运行/sbin/sulogin。

  • 0:关机
  • 1:单用户模式
  • 2:无网络支持的多用户模式
  • 3:有网络支持的多用户模式
  • 4:保留,未使用
  • 5:有网络支持有X-Window支持的多用户模式
  • 6:重新引导系统,即重启

Action:用来描述将用来执行哪种类型的动作

Process:用于设置启动进程所执行的命令。

rc.sysinit文件

/etc/rc.d/rc.sysinit;由init进程调用执行,完成设置网络,主机名、加载文件系统等初始化工作。

[root@localhost ~]# grep ":sysinit" /etc/inittab
si:sysinit:/etc/rc.d/rc.sysinit
[root@localhost~]# head /etc/rc.d/rc.sysinit
#!/bin/bash
#
#/etc/rc.d/rc.sysinit-run once at boot time
#
#Taken in part from Miquel van Smoorenburg's bcheckrc.
#
HOSTNAME=/bin/hostname
HOSTTYPE= `uname -m`
unamer=`uname -r`

rc脚本文件

/etc/rc.d/rc脚本文件;由Init进程调用执行,根据指定的运行级别,加载或终止相应的系统服务

I0:0:wait:/etc/rc.d/rc 0              //后面的数字为运行级别。

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

rc.local脚本文件

/ect/rc.local;由rc脚本执行,保存用户自定义的开机后自启的的命令 

6、自定制启动程序

/etc/rc.localrc.local就是在一切初始化工作后,Linux留给用户进行自己定制开机启动的地方。你可以把你想设置和启动的东西放到这里。

7、执行/bin/login程序,进入登录状态

你可能感兴趣的:(Linux)