Linux基礎--系統啓動流程

基本上Linux的啓動過程如圖所示,不同版本之間可能有一些細微的差別,後面再做介紹,但總體上就是這樣一個流程。

wKiom1b3cXTwXKG8AAAjvgUt3_8617.png


  • 從機器上電開始,首先直接將ROM芯片中的BIOS程序加載到內存中運行。BIOS程序首先進行POST(Power On Self Test),即硬件自檢,自檢通過則按照BIOS中Boot Sequence中定義啓動順序去找相應設備上的0號扇區,嘗試尋找其中的BootLoader程序。

  • 如果找到了BootLoader程序則將其加載到內存中,將系統控制權交給BootLoader。而BootLoader則會根據其配置文件進行工作,加載內核和僞根文件系統至內存中,同時告訴內核啓動時哪個程序作爲系統初始化程序。

  • 這個時候BootLoader也完成了它的使命,將系統控制權交給內核。內核首先使用僞根文件系統,加載其中的真正的根文件系統的驅動程序。

  • 內核以只讀方式掛載真正的根文件系統,防止誤操作損壞真正的根文件系統。

  • 切換至真正的根文件系統,並以讀寫方式重新掛載根文件系統。

  • 啓動系統初始化程序,之後的啓動工作全部交由系統初始化程序完成,內核退居幕後。只有在需要使用核心系統調用時,才交由內核完成。


這裏有幾點需要注意的:

1. UEFI作爲新一代的標準規範,很好地適應的現代計算機的發展趨勢,正在慢慢普及,未來會取代BIOS,但它們的作用本質上是一樣的。

2. BootLoader是用來引導操作系統的程序,存在於磁盤0號扇區MBR(主引導記錄,512字節)的前446字節中。

  1. 其實這樣描述也不準確,因爲446字節的空間對於一個完備的現代操作系統引導程序來說實在是有限,所以現在的BootLoader一般都分爲N段式,不過第一段還是存在於這446字節內的。

  2. MBR由於其空間限制,也難以適應現代計算機標配大容量硬盤的趨勢,會逐漸被GPT所取代。不過GPT考慮了兼容性,仍然保留了MBR的那塊空間沒有改變。

  3. BootLoader程序有很多。常見有windows的NTLoder,不過它只能用來引導windows;還有LILO,這是早期Linux中非常流行的引導程序;以及現在多數發行版Linux上使用GRUB,它有兩個版本:一個是0.x,叫做legacy Grub;另一個是1.x,叫做Grub2,並不是在原來版本上改進來的,而是完全重寫的。

3. 僞根文件系統的主要作用是提供真正根文件系統所需的驅動程序。在CentOS-5中的僞根文件系統使用的是ramdisk來實現的,即將一部分內存當做磁盤來用,這存在一個雙緩存的問題。因爲磁盤在跟內存交換數據時,因爲磁盤速率遠低於內存,所以磁盤上會劃出一部分區域作爲緩存,提高IO效率。但ramdisk中如果再劃出緩存區域就會使得速度變慢而不是變快了。因此到CentOS-6後就改爲了ramfs機制,即在一部分內存中建立文件系統。


4. 最後是系統初始化程序,在CentOS-5中是sysvinit,在CentOS-6中是upstart,在CentOS-7中是systemd。這部分內容就不寫了,還是直接看IBM文檔庫中的權威文章吧。

淺析 Linux 初始化 init 系統,第 1 部分: sysvinit

淺析 Linux 初始化 init 系統,第 2 部分: UpStart

淺析 Linux 初始化 init 系統,第 3 部分: Systemd

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章