1. 程式人生 > >系統啟動過程

系統啟動過程

原創:https://www.cnblogs.com/bluestorm/p/5981435.html

 

系統啟動過程大致流程:上電-->BIOS自檢-->系統引導-->啟動核心-->初始化系統

BIOS自檢

BIOS 輸入輸出系統,它可以永久的記錄在ROM的一個軟體,是作業系統輸入輸出管理的一部分

BIOS的功能有兩部分組成:

1.POST碼

2.Runtime服務

POST階段完成後它將從儲存器中被清除,而runtime服務會一直保留,用於目標作業系統的啟動。

步驟1:上電自檢POST,主要負責檢查系統外圍關鍵裝置(例如:CPU,記憶體,音效卡,顯示卡,鍵盤,I/O等)是否正常。

步驟2:步驟1執行成功後,便會執行一段小程式來列舉本地裝置對其初始化,這一步主要根據我們在BIOS中設定的系統啟動順序來搜尋用於啟動系統的驅動,如:硬碟,光碟,U盤,網路等。以硬碟為例,BISO此時會去讀硬碟驅動器的第一個扇區,然後執行裡面的程式碼,實際上BISO並不關心這個扇區的內容是什麼,它只負責讀取扇區的內容,並執行。

這一階段,主要是檢查硬體是否完好,找到第一個扇區的MBR,然後載入到記憶體並執行,再然後將控制權由BIOS轉交給MBR

系統引導

通常情況下,grub等一些常見的檔案都是直接安裝到MBR中,下面以grub為例

grub 引導可以分為兩個階段stage1和stage2(有些較新的grub有定義了stage1.5)

1.stage1:stage1是直接寫到MBR中的,這樣機器檢查完硬體後,就將控制權交給了gurb的程式碼,stage1 任務很簡單,僅僅是將硬碟的0頭0道2扇區讀入記憶體,stage1是沒有識別的檔案系統的能力。

2.stage2:負責將stage2或stage1.5從硬碟讀到記憶體中

啟動核心

當stage2被載入到記憶體執行時,它首先會解析grub的配置檔案/boot/grub/grub.conf 然後載入核心映象到記憶體中,並將控制權轉交給核心,而核心會立即初始化系統中各個裝置並做相關的配置,其中包括CPU,儲存裝置等。

先載入核心,然後是initrd。

linux的裝置驅動載入,有一部分是直接編譯到核心映象,另一部分是以模組的形式放到initrd中。

初始化系統

/sbin/init 程序是系統其它所有程序的父程序,當它有了控制權之後,它會讀/etc/inittab檔案來執行相應的腳步進行系統初始化,如:鍵盤,滑鼠,設定網路等。主要包括以下:

1.執行系統初始化指令碼

2.執行/etc/rc.d/rc指令碼

3.執行使用者自定義載入程式/etc/rc.d/rc.local

4.完成系統所有的啟動任務後,linux會啟動終端等待使用者登入