概述
對操作系統的啟動過程一直是比較模糊,想想大概經歷檢查硬件,加載操作系統,加載
用戶環境等幾個過程,但實際上要復雜一些。畢竟我們只是了解和掌握啟動過程,而不是去
對啟動過程進行設計和編碼,所以下面的介紹相對比較簡單,也點到為止。如果有想深入學
習的同學,可以針對某個或某幾個部分刨根問題,編碼調試。
下面以Debian Linux的啟動加載為例,簡單介紹一下操作系統的啟動。
經歷的過程如下:
開機自檢(POST)---->執行基本輸入輸出(BIOS)---->加載系統分區表數據(MBR開
始的512字節)---->加載引導程序(grub之類)---->加載Linux內核----->系統環境初始化-----
------->用戶環境初始化
開機自檢(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程序,開始跑初始化的腳本內容。(待續)