對操作系統(tǒng)的啟動過程一直是比較模糊,想想大概經(jīng)歷檢查硬件,加載操作系統(tǒng),加載
用戶環(huán)境等幾個過程,但實際上要復(fù)雜一些。畢竟我們只是了解和掌握啟動過程,而不是去
對啟動過程進(jìn)行設(shè)計和編碼,所以下面的介紹相對比較簡單,也點到為止。如果有想深入學(xué)
習(xí)的同學(xué),可以針對某個或某幾個部分刨根問題,編碼調(diào)試。
下面以Debian Linux的啟動加載為例,簡單介紹一下操作系統(tǒng)的啟動。
經(jīng)歷的過程如下:
開機自檢(POST)---->執(zhí)行基本輸入輸出(BIOS)---->加載系統(tǒng)分區(qū)表數(shù)據(jù)(MBR開
始的512字節(jié))---->加載引導(dǎo)程序(grub之類)---->加載Linux內(nèi)核----->系統(tǒng)環(huán)境初始化-----
------->用戶環(huán)境初始化
開機自檢(POST)
這部分沒有什么多余的東西,計算機連上電源用戶按下啟動按鈕后,計算機自己檢測CPU,
內(nèi)存,硬盤等硬件設(shè)備是否處在可用狀態(tài)。如果可以使用,繼續(xù)下一步的工作,即將運行權(quán)
交給BIOS,否則利用峰鳴器報警。這也是修理電腦的專家根據(jù)蜂鳴器報警聲判斷系統(tǒng)那里有
問題的依據(jù)。
執(zhí)行基本輸入輸出(BIOS)
BIOS(Basic Input Output System)基本輸入輸出程序。該程序完成最基本的硬件位置
處理,設(shè)置硬中斷等。然后將MBR最開始的程序調(diào)入到CPU上運行,運行權(quán)進(jìn)而交給MBR。
MBR加載
MBR(Master boot record),是啟動磁盤最開始的512字節(jié),這里包含了分區(qū)信息和一
個引導(dǎo)程序。分區(qū)信息記載了磁盤的分區(qū)情況,引導(dǎo)程序即是我們比較熟悉的Grub,LiLo等,
用來指引從什么位置加載內(nèi)核程序。
引導(dǎo)程序加載Grub(GRand Unified Bootloader)
Grub在配置的時候指定在什么分區(qū)的什么位置加載內(nèi)核,Grub2以前的版本中g(shù)rub都是
有兩個或者多個加載過程的,會去加載stage1,stage1_5,stage2文件,這些文件都在
/boot/grub目錄下。之所以會有這些文件,是因為在加載的早期,一次只能加載512字節(jié),太
多文件的話,只能分批加載。
現(xiàn)在,在Grub2中已經(jīng)找不到這個文件了,加載和引導(dǎo)的過程會另外介紹。
內(nèi)核加載過程
由于在Grub中記錄了內(nèi)核的具體位置,在Grub運行完畢后,就開始加載內(nèi)核,運行權(quán)限隨
之交給內(nèi)核。
內(nèi)核接過運行權(quán)限,開始探測系統(tǒng)的硬件,加載硬件對應(yīng)的驅(qū)動(有些以模塊運行的驅(qū)動,
是需要掛載文件系統(tǒng)才能加載),然后掛載文件系統(tǒng),從文件系統(tǒng)中讀取數(shù)據(jù)。
這個過程的如下:
內(nèi)核探測硬件------>加載驅(qū)動(initrd)------>掛載根文件系統(tǒng)------>rootfs(/sbin/init)
系統(tǒng)初始化工作
最后運行權(quán)交給了/sbin/init程序,開始跑初始化的腳本內(nèi)容。(待續(xù))