CentOS系統的啓動流程:
1、 POST:Power on system test
加電自檢:ROM:CMOS;BIOS;ROM+RAM
自檢的功能需要一個軟件程序來實現,即BIOS(Basic Input Output System)基本輸入輸出系統;
它被裝載在一個硬件芯片CMOS之上,加電過程即給CMOS通電,然後啓動其上的BIOS程序,BIOS程序會根據CMOS上的一些配置信息去讀取硬件設備信息
並檢測其是否存在並能正常運行,之後進行硬件設備的初始化。
2、 Bootsequence:(BIOS) 按次序尋找各引導設備,第一個有引導程序的設備即爲本次啓動要用到的設備。
3、 Bootloader:(MBR) 引導加載器,程序;
功能:提供一個菜單,允許用戶選擇要啓動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,並把系統控制權移交給內核;
4、 Kernel:加載系統內核kernel,執行系統初始化信息
自身初始化:
探測可識別到的所有硬件設備
加載硬件驅動程序;(有可能會藉助於ramdisk加載驅動)
以只讀方式掛在根文件系統
運行用戶空間的第一個應用程序:/sbin/init
在此處需要藉助一個虛擬文件系統:ramdisk:位於/boot目錄下,以initrd開頭的文件。
Linux內核的特性之一:使用緩衝和緩存來加速對磁盤上的文件訪問;
ramdisk --> ramfs:
CentOS 5: initrd 工具程序:mkinitrd
CentOS 6,7: initramfs 工具程序:dracut, mkinitrd
在虛擬根文件系統上加載合適的驅動程序,加載硬盤等設備,之後釋放虛擬的根文件系統,並以只讀方式掛載磁盤上真正的根文件系統,之後就開始正常的啓動過程。
5、 啓動用戶空間的第一個執行程序:/sbin/init
init程序的類型:
Centos5:SysV init 配置文件:/etc/inittab
CentOS 6:Upstart 配置文件:/etc/inittab;/etc/init/*.conf
CentOS 7:Systemd 配置文件:/usr/lib/systemd/system/, /etc/systemd/system/
系統初始化流程:
POST----》BootSequence(BIOS)--》Bootloader(MBR)--》kernel(ramdisk)-->rootfs(只讀)--->switchroot--》/sbin/init --->(/etc/inittab,/etc/init/*.conf)--->設定默認運行級別---》系統初始化腳本---》關閉或啓動對應級別下的服務---》啓動終端。