計算機(jī)的啟動過程是一個復(fù)雜的過程,我們根據(jù)計算機(jī)的控制權(quán)在哪一部分手上沪伙,可以把這一過程劃分為以下四個階段:
BIOS→主引導(dǎo)記錄→Boot Loader→操作系統(tǒng)運(yùn)行
一、BIOS
當(dāng)電源開關(guān)啟動后垛贤,主板會通電并初始化固件(即芯片集等)焰坪,而BIOS(Basic Input Output System 基本輸入輸出系統(tǒng))的運(yùn)行代碼則早已被刷入集成在主板的ROM芯片中趣倾。
通電后會嘗試運(yùn)行CPU聘惦,如果CPU運(yùn)行不正常,則計算機(jī)會處于完全死機(jī)狀態(tài)儒恋,同時主板會發(fā)出蜂鳴聲善绎。
初始化CPU寄存器,比如初始化指令指針I(yè)P和代碼寄存器CS诫尽;他們的初始化的值將CPU執(zhí)行的第一條指令定位到BIOS的啟動代碼部分
倘若計算機(jī)為多處理器或者是多核處理器時禀酱,將會動態(tài)的選擇自引導(dǎo)處理器(BSP)。除了BSP外牧嫉,剩下的處理器叫做應(yīng)用處理器(AP)剂跟。AP將會停止運(yùn)行直到他們被內(nèi)核喚醒激活。
CPU從地址FFFF:0000H處(即復(fù)位向量)開始執(zhí)行指令(CS的初始值為0FFFFH酣藻,IP的初始值為0000H)曹洽,這是一條跳轉(zhuǎn)指令,跳到BIOS的啟動代碼處并啟動BIOS辽剧。
BIOS初始化硬件設(shè)備
在BIOS中包含有自診斷程序等程序送淆,而啟動了BIOS后,BIOS首先檢查計算機(jī)的硬件能否滿足運(yùn)行的基本要求怕轿,即啟動硬件自檢(Power-On Self-Test POST)偷崩。此時計算機(jī)會先檢測顯卡是否有問題,若出現(xiàn)問題則停止BIOS同時發(fā)出蜂鳴聲警報并死機(jī)撞羽。檢測完顯卡后到其他的設(shè)備阐斜,此時會根據(jù)檢測結(jié)果在顯示器上顯示硬件設(shè)備的信息或錯誤信息。
二诀紊、主引導(dǎo)記錄
計算機(jī)中可能存在有許多個存儲設(shè)備智听,諸如硬盤、可移動硬盤、U盤等等到推,這些設(shè)備按用戶預(yù)先設(shè)置好的優(yōu)先級安排一個“啟動順序”考赛。BIOS則根據(jù)這個順序將計算機(jī)的控制權(quán)交給排在第一位的存儲設(shè)備。
該設(shè)備的第一個扇區(qū)(即該設(shè)備最前面的512個字節(jié))莉测,也叫做主引導(dǎo)記錄MBR(Master boot record )或引導(dǎo)扇區(qū)颜骤。引導(dǎo)加載程序(Boot Loader)的代碼便存在這個扇區(qū)里面。
主引導(dǎo)記錄的主要作用是告訴計算機(jī)到該存儲設(shè)備的哪一個位置去找操作系統(tǒng)捣卤。
我們知道硬盤可以進(jìn)行分區(qū)忍抽,而不同的分區(qū)可以安裝不同的操作系統(tǒng),這樣我們就必須要讓主引導(dǎo)記錄知道要將控制權(quán)交個哪一個分區(qū)董朝。主引導(dǎo)記錄中的第447-510字節(jié)存儲的就是該存儲設(shè)備的分區(qū)表鸠项,總長度為64字節(jié)。一個硬盤只能分成四個一級分區(qū)(主分區(qū))子姜,每個主分區(qū)的信息需要占用16個字節(jié)祟绊。這16個字節(jié)中的第一個字節(jié)表示該分區(qū)是否為激活分區(qū),若該字節(jié)為0x80則代表該分區(qū)為激活分區(qū)哥捕,要將控制權(quán)交給這個分區(qū)牧抽,因此四個主分區(qū)里面只能有一個是激活的。
排在第一位的存儲設(shè)備得到控制權(quán)后遥赚,計算機(jī)會讀取該設(shè)備的第一個扇區(qū)(即主引導(dǎo)記錄)扬舒,倘若該扇區(qū)最后兩個字節(jié)為0x55和0xAA則表明這個設(shè)備可以用于啟動;否則將控制權(quán)交個“啟動順序”中的下一個設(shè)備凫佛。
將主引導(dǎo)記錄的內(nèi)容加載到內(nèi)存位置0 x7c00并跳轉(zhuǎn)到該位置以開始執(zhí)行MBR中的代碼讲坎,即運(yùn)行主引導(dǎo)加載程序
將控制權(quán)交給主引導(dǎo)加載程序
三、Boot Loader
主引導(dǎo)加載程序在執(zhí)行時需要把計算機(jī)的控制權(quán)交給存儲設(shè)備的某個分區(qū)愧薛,好讓計算機(jī)從該分區(qū)啟動操作系統(tǒng)晨炕,那具體計算機(jī)是怎么知道要交個哪個分區(qū)呢?這里分為3種啟動情況
-
卷引導(dǎo)記錄(Volume boot record VBR)
因為四個主分區(qū)里面厚满,只有一個是激活分區(qū)府瞄,所以該情況下計算機(jī)會讀取激活分區(qū)的第一扇區(qū),判斷該分區(qū)是激活的之后就相當(dāng)于告訴計算機(jī)碘箍,操作系統(tǒng)在這個分區(qū)里面了遵馆。
-
擴(kuò)展分區(qū)和邏輯分區(qū)
“擴(kuò)展分區(qū)”指這個分區(qū)里面又分成多個區(qū),這種分區(qū)里面的分區(qū)就叫做“邏輯分區(qū)”丰榴。計算機(jī)通過讀取“擴(kuò)展分區(qū)”的第一個扇區(qū)(即“擴(kuò)展引導(dǎo)記錄”)货邓,該扇區(qū)中也有一張64字節(jié)的分區(qū)表,但最多只有兩項(即兩個邏輯分區(qū))四濒。接著讀取邏輯分區(qū)的第一個扇區(qū)换况,再從里面找到下一個邏輯分區(qū)的位置职辨。如此下去,擴(kuò)展分區(qū)可以包含無數(shù)個邏輯分區(qū)戈二。
-
啟動管理器
計算器讀取“主引導(dǎo)記錄”的前446字節(jié)的機(jī)器碼之后舒裤,不把控制權(quán)交個某一個分區(qū),而是運(yùn)行“啟動管理器”(boot loader)觉吭,然后由用戶選擇啟動哪一個操作系統(tǒng)
找到激活分區(qū)后腾供,加載該分區(qū)的引導(dǎo)扇區(qū),然后運(yùn)行該代碼
分區(qū)引導(dǎo)扇區(qū)完成的工作包括:引導(dǎo)加載程序?qū)⑻幚砥鲝膶嵞J角袚Q到32位保護(hù)模式鲜滩、從硬盤讀取內(nèi)核
四伴鳖、操作系統(tǒng)運(yùn)行
操作系統(tǒng)的內(nèi)核載入內(nèi)存
此后,不同的操作系統(tǒng)會有不同的動作徙硅,但主要還是包含以下幾個方面:
加載底層設(shè)備驅(qū)動程序和所需要的服務(wù)
初始化內(nèi)核
啟用登錄程序