Boot Sector結構、系統啟動過程簡介
一. Boot Sector 的組成
Boot Sector 也就是硬盤的第一個扇區(注1:0柱面,0磁道,1扇區) (注2: 1磁道=16扇區,1扇區=512字節), 它由 MBR (Master Boot Record), DPT (Disk Partition Table) 和 Boot Record ID 三部分組成.
MBR 又稱作主引導記錄占用 Boot Sector 的前 446 個字節 ( 0 to 0x1BD ),
存放系統主引導程序 (它負責檢查硬盤分區表、尋找可引導分區并負責將可引導分區的引導扇區(DBR)裝入內存).
DPT 即主分區表占用 64 個字節 (0x1BE to 0x1FD), 記錄了磁盤的基本分區
信息. 主分區表分為四個分區項, 每項 16 字節, 分別記錄了每個主分區的信息
(因此最多可以有四個主分區).
Boot Record ID 即引導區標記占用兩個字節 (0x1FE and 0x1FF), 對于合法
引導區, 它等于 0xAA55, 這是判別引導區是否合法的標志.
Boot Sector 的具體結構如下圖所示:
0000 |------------------------------------------------|
| |
| |
| Master Boot Record |
| |
| |
| 主引導記錄(446字節) |
| |
| |
| |
01BD | |
01BE |------------------------------------------------|
| |
01CD | 分區信息 1(16字節) |
01CE |------------------------------------------------|
| |
01DD | 分區信息 2(16字節) |
01DE |------------------------------------------------|
| |
01ED | 分區信息 3(16字節) |
01EE |------------------------------------------------|
| |
01FD | 分區信息 4(16字節) |
|------------------------------------------------|
| 01FE | 01FF |
| 55 | AA |
|------------------------------------------------|
二. 系統啟動過程簡介
系統啟動過程主要由一下幾步組成(以硬盤啟動為例):
1. 開機
2. BIOS 加電自檢 ( Power On Self Test -- POST )
內存地址為 0ffff:0000
3. 將硬盤第一個扇區 (0頭0道1扇區, 也就是Boot Sector)
讀入內存地址 0000:
4. 檢查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于
則轉去嘗試其他啟動介質, 如果沒有其他啟動介質則顯示
"No ROM BASIC" 然后死機.
5. 跳轉到 0000:
6. MBR 首先將自己復制到 0000:0600 處, 然后繼續執行.
7. 在主分區表中搜索標志為活動的分區. 如果發現沒有活動
分區或有不止一個活動分區, 則轉停止.
8. 將活動分區的第一個扇區讀入內存地址 0000:
(注4:在分區表的四個記錄中,一般來說有且只有一個記錄的標記是活動的,MBR(主要負責從活動分區中裝載并運行系統引導程序)會去找到這個分區記錄,根據記錄的起始扇區加載該分區的邏輯 0 扇區(起始扇區)的內容到 0x
9. 檢查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于則
顯示 "Missing Operating System" 然后停止, 或嘗試
軟盤啟動.
10. 跳轉到 0000:
11. 啟動系統 ...
以上步驟中 2,3,4,5 步是由 BIOS 的引導程序完成. 6,7,8,9,10
步由MBR中的引導程序完成.
一般多系統引導程序 (如 SmartFDISK, BootStar, PQBoot 等)
都是將標準主引導記錄替換成自己的引導程序, 在運行系統啟動程序
之前讓用戶選擇要啟動的分區.
而某些系統自帶的多系統引導程序 (如 lilo, NT Loader 等)
則可以將自己的引導程序放在系統所處分區的第一個扇區中, 在 Linux
中即為 SuperBlock (其實 SuperBlock 是兩個扇區).
注: 以上各步驟中使用的是標準 MBR, 其他多系統引導程序的引導過程與此不同.