在前篇隨筆中,已經談到了CMOS與BIOS,CMOS是記錄各項硬件參數(包括系統時間、設備的I/O地址、CPU的電壓和頻率等)且嵌入到主板上面的存儲器,BIOS是一個寫入到主板上的韌體(韌體是寫入到硬件上的一個軟件程序)。
這個BIOS是在開機的時候計算機系統會主動執行的第一個程序。
接下來,BIOS會去分析計算機里面有哪些存儲設備,以硬盤為例,BIOS會依據用戶的設置去取得能夠開機的硬盤,並且到該硬盤里面去讀取第一個扇區中的主引導分區(Master Boot Record,MBR)位置。MBR這個僅有446bytes的硬盤容量里面會放置最基本的引導加載程序(Boot loader),此時BIOS就功成圓滿,接下來就是MBR內的引導加載程序的工作了。
這個引導加載程序的目的是加載內核文件,由於引導加載程序是操作系統在安裝的時候所提供的,所以它會識別硬盤內的文件系統格式,因此就能夠讀取內核文件,接下來就是內核文件的工作了,之后就是我們所知道的操作系統的任務。
簡單的說,整個開機流程到操作系統之前的動作應該是這樣的:
1.BIOS:開機主動執行的韌體,會認識第一個開機的設備
2.MBR:第一個可開機設備的第一個扇區內的主引導分區塊,內含引導加載程序。
3.引導加載程序:一只可讀取內核文件來執行的軟件。
4.內核文件:開始操作系統的功能。
BIOS與MBR都是硬件本身會支持的功能,至於Boot loader(引導加載程序)則是操作系統安裝在MBR上面的一套軟件。由於MBR僅有466bytes而已,因此這個引導程序是非常小而完美的。這個boot loader的主要任務有下面幾項:
- 提供菜單:用戶可以選擇不同的開機選項,這也是多重引導的重要功能呢。
- 載入內核文件:直接執行可開機的程序區段來開始操作系統。
- 轉交其他loader:將引導加載功能轉交給其他loader負責。
上述boot loader的三條任務中,前兩條很好理解,但第三條很有趣。那表示你的計算機系統里面可能具有兩個以上的引導加載程序。值得特別指出的是引導加載程序(loader)除了可以安裝在MBR之外,還可以安裝在每個分區的引導扇區。分區還有個別的啟動扇區?這個特色才能造就”多重引導“的功能。
我們舉一個例子來說明,假設你的個人計算機只有一塊硬盤,里面分成四個分區,其中第一、二分區分別安裝了Windows及Linux,你要如何在開機的時候選擇用Windows還是Linux開機呢?假設MBR內安裝的是可同時識別Windows/Linux操作系統的引導加載程序,那么整個流程如下圖:
在上圖中,我們發現,MBR的引導加載程序提供兩個菜單,菜單一(M1)可以直接加載Windows的內核文件來開機;菜單二(M2)則是將引導加載工作交給第二個分區的啟動扇區。當用戶在開機的時候選擇菜單二時,那么整個引導加載工作就會交給第二分區的引導加載程序。當第二個引導加載程序啟動后,該引導加載程序(上圖中)僅有一個開機菜單,因此就能夠使用Linux的內核文件來開機。這就是多重引導的工作情況。我們將上圖作個總結。
- 每個分區都擁有自己的啟動扇區。
- 圖中的系統分區為第一及第二分區。
- 實際可開機的內核文件是放置到各分區內的。
- loader只會認識自己的系統分區內的可開機內核文件,以及其他loader而已。
- loader可直接指向或者是間接將管理權轉交給另一個管理程序。
- 每個分區都有自己的啟動扇區,loader可以安裝在MBR或啟動扇區上,loader只會識別自己分區內的可開機內核文件。