讓我們看一下文件/boot/boot0。這是一個僅512字節的小文件。如果在FreeBSD安裝過程中選擇“bootmanager”,這個文件中的內容將被寫入硬盤MBR 如前所述,INT 0x19指令裝載MBR,也就是boot0的內容,至內存地址0x7c00。再看文件sys/boot/i386/boot0/boot0.s,可以猜想這裡面發生了什麼 - 這是引導管理器,一段由 Robert Nordier書寫的令人起敬的程序片段。
MBR裡,也就是boot0裡,從偏移量0x1be開始有一個特殊的結構,稱為分區表。其中有4條記錄(稱為分區記錄),每條記錄16字節。分區記錄表示硬盤如何被劃分,在FreeBSD的術語中,這被稱為slice(d)。16字節中有一個標志字節決定這個分區是否可引導。有僅只能有一個分區可設定這一標志。否則,boot0的代碼將拒絕繼續執行。
一個分區記錄有如下域:
*1字節 文件系統類型
*1字節 可引導標志
*6字節 CHS格式描述符
*8字節 LBA格式描述符
一個分區記錄描述符包含某一分區在硬盤上的確切位置信息。LBA和CHS兩種描述符指示相同的信息,但是指示方式有所不同:LBA (邏輯塊尋址,Logical Block Addressing)指示分區的起始扇區和分區長度,而CHS(柱面 磁頭扇區)指示首扇區和末扇區。 引導管理器掃描分區表,並在屏幕上顯示菜單,以便用戶可以選擇用於引導的磁盤和分區。在鍵盤上按下相應的鍵後,boot0進行如下動作:
*標記選中的分區為可引導,清除以前的可引導標志
*記住本次選擇的分區以備下次引導時作為缺省項
*裝載選中分區的第一個扇區,並跳轉執行之
什麼數據會存在於一個可引導扇區(這裡指FreeBSD扇區)的第一扇區裡呢?正如你已經猜到的,那就是boot2。