概述
對作業系統的啟動過程一直是比較模糊,想想大概經曆檢查硬體,載入作業系統,載入
使用者環境等幾個過程,但實際上要複雜一些。畢竟我們只是瞭解和掌握啟動過程,而不是去
對啟動過程進行設計和編碼,所以下面的介紹相對比較簡單,也點到為止。如果有想深入學
習的同學,可以針對某個或某幾個部分刨根問題,編碼調試。
下面以Debian Linux的啟動載入為例,簡單介紹一下作業系統的啟動。
經曆的過程如下:
開機自我測試 (POST)(POST)---->執行基本輸入輸出(BIOS)---->載入系統磁碟分割表資料(MBR開
始的512位元組)---->載入引導程式(grub之類)---->載入Linux核心----->系統內容初始化-----
------->使用者環境初始化
開機自我測試 (POST)(POST)
這部分沒有什麼多餘的東西,電腦連上電源使用者按下啟動按鈕後,電腦自己檢測CPU,
記憶體,硬碟等硬體裝置是否處在可用狀態。如果可以使用,繼續下一步的工作,即將運行權
交給BIOS,否則利用峰鳴器警示。這也是修理電腦的專家根據蜂鳴器警示聲判斷系統那裡有
問題的依據。
執行基本輸入輸出(BIOS)
BIOS(Basic Input Output System)基本輸入輸出程式。該程式完成最基本的硬體位置
處理,設定硬中斷等。然後將MBR最開始的程式調入到CPU上運行,運行權進而交給MBR。
MBR載入
MBR(Master boot record),是啟動磁碟最開始的512位元組,這裡包含了分區資訊和一
個引導程式。分區資訊記載了磁碟的分區情況,引導程式即是我們比較熟悉的Grub,LiLo等,
用來指引從什麼位置載入核心程式。
引導程式載入Grub(GRand Unified Bootloader)
Grub在配置的時候指定在什麼分區的什麼位置載入核心,Grub2以前的版本中grub都是
有兩個或者多個載入過程的,會去載入stage1,stage1_5,stage2檔案,這些檔案都在
/boot/grub目錄下。之所以會有這些檔案,是因為在載入的早期,一次只能載入512位元組,太
多檔案的話,只能分批載入。
現在,在Grub2中已經找不到這個檔案了,載入和引導的過程會另外介紹。
核心載入過程
由於在Grub中記錄了核心的具體位置,在Grub運行完畢後,就開始載入核心,運行許可權隨
之交給核心。
核心接過運行許可權,開始探測系統的硬體,載入硬體對應的驅動(有些以模組啟動並執行驅動,
是需要掛載檔案系統才能載入),然後掛載檔案系統,從檔案系統中讀取資料。
這個過程的如下:
核心探測硬體------>載入驅動(initrd)------>掛載根檔案系統------>rootfs(/sbin/init)
系統初始化工作
最後運行權交給了/sbin/init程式,開始跑初始化的指令碼內容。(待續)