天天看點

《作業系統真象還原》——0.28 MBR、EBR、DBR和OBR各是什麼

本節書摘來自異步社群《作業系統真象還原》一書中的第0章,第0.28節,作者:鄭鋼著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

這幾個概念主要是圍繞計算機系統的控制權交接展開的,整個交接過程就是個接力賽,咱們從頭梳理。

計算機在接電之後運作的是基本輸入輸出系統bios,大夥兒知道,bios是位于主機闆上的一個小程式,其所在的空間有限,代碼量較少,功能受限,是以它不可能一人扛下所有的任務需求,也就是肯定不能充當作業系統的角色(比如說讓bios運作qq是不可能的),必須采取控制權接力的方式,一步步地讓處理器執行更為複雜強大的指令,最終把處理器的使用權交給作業系統,這才讓計算機走上了正軌,進而可以完成各種複雜的功能,友善人們的工作和生活。采用接力式控制權交接,bios隻完成一些簡單的檢測或初始化工作,然後找機會把處理器使用權交出去。交給誰呢?下一個接力棒的選手是mbr,為了友善bios找到mbr,mbr必須在固定的位置等待,是以mbr位于整個硬碟最開始的扇區。

mbr是主引導記錄,master或main boot record,它存在于整個硬碟最開始的那個扇區,即0盤0道1扇區,這個扇區便稱為mbr引導扇區。注意這裡用chs方式表示mbr引導扇區的位址,是以扇區位址以1開始,順便說一句,lba方式是以0為起始為扇區編址的,有關chs和lba的内容會在後面章節介紹。一般情況下扇區大小是512位元組,但大夥兒不要把這個當真理,有的硬碟扇區并不是512位元組。在mbr引導扇區中的内容是:

(1)446位元組的引導程式及參數;

(2)64位元組的分區表;

(3)2位元組結束标記0x55和0xaa。

在mbr引導扇區中存儲引導程式,為的是從bios手中接過系統的控制權,也就是處理器的使用權。任何一棒的接力都是由上一棒跳到下一棒,也就是上一棒得知道下一棒在哪裡才能跳過去,否則權利還是交不出去。bios知道mbr在0盤0道1扇區,這是約定好的,是以它會将0盤0道1扇區中的mbr引導程式加載到實體位址0x7c00,然後跳過去執行,這樣bios就把處理器使用權移交給mbr了。

既然mbr稱為“主”引導程式,有“主”就得有“次”, mbr的作用相當于下一棒的引導程式總入口,bios把控制權交給mbr就行了,由mbr從衆多可能的接力選手中挑出合适的人選并交出系統控制權,這個過程就是由“主引導程式”去找“次引導程式”,這麼說的意思是“次引導程式”不止一個。也許您會問,為什麼bios不直接把控制權交給“次引導程式”?原因是bios受限于其主機闆上的存儲空間,代碼量有限,本身的工作還做不過來呢,是以心有餘而力不足。好啦,下面開始下一輪的系統控制權接力。不要忘了,mbr引導扇區中除了引導程式外,還有64位元組大小的分區表,裡面是分區資訊。分區表中每個分區表項占16位元組,是以mbr分區表中可容納4個分區,這4個分區就是“次引導程式”的候選人群,mbr引導程式開始周遊這4個分區,想找到合适的人選并把系統控制權交給他。

通常情況下這個“次引導程式”就是作業系統提供的加載器,是以mbr引導程式的任務就是把控制權交給作業系統加載器,由該加載器完成作業系統的自舉,最終使控制權傳遞給作業系統核心。但是各分區都有可能存在作業系統,mbr也不知道作業系統在哪裡,它甚至不知道分區上的二進制01串是指令,還是普通資料,好吧,它根本分不清楚上面的是什麼,談何權利交接呢。

為了讓mbr知道哪裡有作業系統,我們在分區時,如果想在某個分區中安裝作業系統,就用分區工具将該分區設定為活動分區,設定活動分區的本質就是把分區表中該分區對應的分區表項中的活動标記為0x80。mbr知道“活動分區”意味着該分區中存在作業系統,這也是約定好的。活動分區标記位于分區表項中最開始的1位元組(有關分區内容,後面介紹分區的章節中會細說),其值要麼為0x80,要麼為0,其他值都是非法的。0x80表示此分區上有引導程式,0表示沒引導程式,該分區不可引導。mbr在分析分區表時通過辨識“活動分區”的标記0x80開始找活動分區,如果找到了,就将cpu使用權交給此分區上的引導程式,此引導程式通常是核心加載器,下面就直接以它為例。

“控制權交接”是處理器從“上一棒選手”跳到“下一棒選手”來完成的,核心加載器的入口位址是這裡所說的“下一棒選手”,但是核心加載器在哪裡呢?雖然分區那麼大,但mbr最想去看的是核心加載器,不想盲目地看看。是以您想到了,為了mbr友善找到活動分區上的核心加載器,核心加載器的入口位址也必須在固定的位置,這個位置就是各分區最開始的扇區,這也是約定好的。這個“各分區起始的扇區”中存放的是作業系統引導程式——核心加載器,是以該扇區稱為作業系統引導扇區,其中的引導程式(核心加載器)稱為作業系統引導記錄obr,即os boot record,此扇區也稱為obr引導扇區。在obr扇區的前3個位元組存放了跳轉指令,這同樣是約定,是以mbr找到活動分區後,就大膽主動跳到活動分區obr引導扇區的起始處,該起始處的跳轉指令馬上将處理器帶入作業系統引導程式,從此mbr完成了交接工作,以後便是核心的天下了。

不過obr中開頭的跳轉指令跳往的目标位址并不固定,這是由所建立的檔案系統決定的,對于fat32檔案系統來說,此跳轉指令會跳轉到本扇區偏移0x5a位元組的作業系統引導程式處。不管跳轉目标位址是多少,總之那裡通常是作業系統的核心加載器。

計算機曆史中向來把相容性放在首位,這才是計算機蒸蒸日上的原因。obr是從dbr遺留下來的,要想了解obr,還是先從了解dbr開始。dbr是dos boot record,也就是dos作業系統的引導記錄(程式),dbr中的内容大概是:

(1)跳轉指令,使mbr跳轉到引導代碼;

(2)廠商資訊、dos版本資訊;

(3)bios參數塊bpb,即bios parameter block;

(4)作業系統引導程式;

(5)結束标記0x55和0xaa。

在dos時代隻有4個分區,不存在擴充分區,這4個分區都相當于主分區,是以各主分區最開始的扇區稱為dbr引導扇區。後來有了擴充分區之後,無論分區是主分區,還是邏輯分區,為了相容,分區最開始的扇區都作為dos引導扇區。但是其他作業系統如unix,linux等為了相容mbr也傳承了這個習俗,都将各分區最開始的扇區作為自己的引導扇區,在裡面存放自己作業系統的引導程式。由于現在這個“分區最開始的扇區”引導的作業系統類型太多了,而且dos還退出曆史舞台了,是以dbr也稱為obr。

這裡提到了擴充分區就不得不提到ebr。當初為了解決分區數量限制的問題才有了擴充分區,ebr是擴充分區中為了相容mbr才提出的概念,主要是相容mbr中的分區表。分區是用分區表來描述的,mbr中有分區表,擴充分區中的是一個個的邏輯分區,是以擴充分區中也要有分區表,為擴充分區存儲分區表的扇區稱為ebr,即expand boot record,從名字上看就知道它是為了“相容”而“擴充”出來的結構,相容的内容是分區表,是以它與mbr結構相同,隻是位置不同,ebr位于各子擴充分區中最開始的扇區(注意,各主分區和各邏輯分區中最開始的扇區是作業系統引導扇區),理論上mbr隻有1個,ebr有無數個。有關擴充分區的内容還是要參見後面有關分區的章節,那裡介紹得更細緻。

現在總結一下。

ebr與mbr結構相同,但位置和數量都不同,整個硬碟隻有1個mbr,其位于整個硬碟最開始的扇區——0道0道1扇區。而ebr可有無數個,具體位置取決于擴充分區的配置設定情況,總之是位于各子擴充分區最開始的扇區,如果此處不明白子擴充分區是什麼,到了以後跟蹤分區的章節中大夥兒就會明白。obr其實就是dbr,指的都是作業系統引導程式,位于各分區(主分區或邏輯分區)最開始的扇區,訪扇區稱為作業系統引導扇區,即obr引導扇區。obr的數量與分區數有關,等于主分區數加邏輯分區數之和,友情提示:一個子擴充分區中隻包含1 個邏輯分區。

mbr和ebr是分區工具建立維護的,不屬于作業系統管理的範圍,是以作業系統不可以往裡面寫東西,注意這裡所說的是“不可以”,其實作業系統是有能力讀寫任何位址的,隻是如果這樣做的話會破壞“系統控制權接力賽”所使用的資料,下次開機後就無法啟動了。obr是各分區(主分區或邏輯分區)最開始的扇區,是以屬于作業系統管理。

dbr、obr、mbr、ebr都包含引導程式,是以它們都稱為引導扇區,隻要該扇區中存在可執行的程式,該扇區就是可引導扇區。若該扇區位于整個硬碟最開始的扇區,并且以0x55和0xaa結束,bios就認為該扇區中存在mbr,該扇區就是mbr引導扇區。若該扇區位于各分區最開始的扇區,并且以0x55和0xaa結束,mbr就認為該扇區中有作業系統引導程式obr,該扇區就是obr引導扇區。

dbr、obr、mbr、ebr結構中都有引導代碼和結束标記0x55和0xaa,是以很多同學都容易把它們搞混。不過它們最大的差別是分區表隻在mbr和ebr中存在,dbr或obr中絕對沒有分區表。mbr、ebr、obr的位置關系如圖0-21所示。

《作業系統真象還原》——0.28 MBR、EBR、DBR和OBR各是什麼

您看,mbr位于整個硬碟最開始的塊,ebr位于每個子擴充分區,各子擴充分區中隻有一個邏輯分區。mbr和ebr位于分區之外的扇區,而obr則屬于主分區和邏輯分區最開始的扇區,每個主分區和邏輯分區中都有obr引導扇區。

繼續閱讀