一、操作系統的引導過程
當開機上電時,計算機的硬件系統就會產生一個復位脈衝,這個復位脈衝直接送到80X86芯片的管腳上,80X86芯片接到這個脈衝後,其硬件邏輯就會置CS寄存器爲FFFFH,IP寄存器爲0000H,也就是說,會自動地到FFFF:0000H去取第一條指令,轉移到系統版上8KBROM--BIOS程序。該程序首先運行加電自檢模塊,若自檢正常,則轉入INT19H調用,進行系統引導,若自檢有錯,則顯示錯誤信息進入死循環。
在進行系統引導時,引導程序還要對外掛ROM進行掃描,若掃描到硬盤控制器中的ROM(起始地址爲C800:0000H,其中放的是2KB硬盤設備驅動程序),則進行軟中斷的重新分配,把原INT13H給硬盤,軟盤中斷改爲INT40H,然後進行操作系統的引導。
首先,引導程序試圖將軟盤驅動器A:上0頭、0道、1扇區(BOOT)引導記錄讀到起始地址爲0000:7C00H的內存單元中,若成功,則執行軟盤上引導程序,引導操作系統;若不成功,則將硬盤的0頭、0道、1扇區的硬盤主引導記錄讀到起始地址0000:7C00H的內存單元中,並執行該硬盤主引導程序,其作用是將當前活動分區的分區引導程序也讀到上述內存單元中,以完成該分區操作系統的引導。
從上面的敘述不難看出,硬盤與軟盤引導系統的最大差別在於,硬盤要執行其物理第一扇區中的主引導程序之後才能轉入相應分區邏輯第一扇區中與軟盤類似的分區引導程序。
二、磁盤的引導扇區
磁盤的扇區分配由兩個部分組成,第一部分只有一個扇區,這就是0道(柱)、0頭、1扇區,也就是整個磁盤的第一扇區(物理上),這就是磁盤的主引導扇區。第二部分是供各個操作系統使用的扇區。
(一)、軟盤的主引導扇區
主引導扇區內容由FORMAT創建,引導記錄可分爲四部分:
1、3字節轉移指令(供系統盤用);
2、8字節含廠商標誌、操作系統版本號;
3、BIOS參數塊(共19字節,亦稱BPB參數表);
4、引導代碼,包含了自舉程序的實際代碼,引導代碼僅對操作系統盤有效;
當該盤作系統盤時,執行轉移指令,轉到引導代碼,執行自舉程序,將DOS裝入內存。
下面主要介紹BIOS參數塊,通過該參數塊可獲得文件分配表、主目錄及數據區起始扇區號。從主引導扇區第12個字節內容開始,具體的含義如下:
12-13字節:描述扇區大小(字節);
14字節:每簇所佔扇區個數;
15-16字節:保留扇區數;
17字節:FAT(文件分配表)個數;
18-19字節:主目錄(FCB)大小(文件個數);
20-21字節:磁盤總扇區數;
22字節:介質描述符(FD雙面雙密度360KB軟盤,F9雙面高密度1.2MB軟盤,F8硬盤);
23-24字節:每個FAT表所佔扇區數;
25-26字節:每道扇區數;
27-28字節:磁頭個數;
29-32字節:隱含扇區數;
33-36字節:(只對硬盤有效)。當分區總數>FFFFH時,總扇區數填入此處,且20-21處值爲0(此時分區容量>32M)。
注:
(1)以上凡佔2個字節的,前一字節是低位,第二字節是高位;
(2)所表示的數均是16進制數(各字節內容);
對軟盤來說,主引導扇區是物理第一扇區,也是邏輯O(第1個)扇區,可用DEBUG的L、W命令進行讀、寫操作。
(二)、硬盤的引導扇區
1、硬盤的主引導扇區(隱含扇區)
該扇區主要由兩個部分組成:主引導程序和分區信息表。分配如下表:
地址偏移硬盤0道(柱)、0頭、1扇區
0000H―――主引導記錄及一些數字0
01BEH―――第一分區表(16字節)
01CEH―――第二分區表(16字節)
01DEH―――第三分區表(16字節)
0IEEH―――第四分區表(16字節)
01FEH__55H
01FFH―――AAH
硬盤主引導扇區內容由FDISK.COM創建。整個硬盤空間最多劃分爲4個分區,可提供4個操作系統共享,每個操作系統佔一個分區,如整個硬盤只提供一個操作系統使用,則其它三個分區的長度即所佔扇區數爲0。在IBM-PC、長城系列及其兼容機上,可通過FDISK.COM來指定各分區的大小和起止的柱面號、扇區號等;分區信息表就是用來保存這些分區信息的。分區信息表由4項組成,每項佔16個字節。每一分區信息的各字節內容如下述:
第1字節:爲引導標誌。如該字節內容爲0,表示系統加電或復位自檢時,不從這個分區引導操作系統。如果該字節值爲80H,則表示系統加電冷啓動或熱啓動時,從這個分區中引導操作系統。在系統冷、熱啓動時,引導過程會檢查分區信息表所有4項中的這個引導標誌。DOS的FDISK.COM命令可以置某分區中這個字節值爲80H,而置其餘分區的這個字節值爲0。
第2字節:爲本分區起始磁頭號。
第3字節:爲本分區起始的扇區號。在這個字節中只有低6位是表示扇區號,而高2位則表示起始柱面號的最高2位。
第4字節:爲本分區起始的柱面號。
第5字節:爲本分區操作系統代碼。DOS3.0以下版本,該字節值爲01,3.0以上版本該字節值爲04,5.0以上版本爲06等,當該字節值爲
02、03時,則表示該分區的操作系統爲XENIX。該字節值爲63,表示該分區的操作系統爲NIX。該字節值爲65,表示該分區的
操作系統爲NetWare。
第6字節:本分區結束的磁頭號。
第7字節:本分區結束扇區號。其中高2位表示結束柱面號的高2位。
第8字節:本分區結束柱面號。
第9-12字節:在本分區之前已經使用掉的扇區數。
第13-16字節:本分區所使用的扇區數。
硬盤的主引導程序在硬盤的第一扇區中,它是各操作系統的共同部分。它的作用就是查看分區信息表中的4個分區引導標誌,當某一分區的引導標誌爲80H時,主引導程序就把這一分區的第一個扇區(邏輯0扇區)讀到內存0000:7C00H處,並從那兒開始執行。主引導程序是屬於隱含扇區的,只能用以下兩種方法進行讀寫操作:
(1)、用中斷13H實現,用下面的小程序段:
MOVDX,0080硬盤0磁頭;
MOVCX,00010道第1扇區;
MOVBX,0200緩衝區地址200處作爲起始;
MOVAX,0X01X=2表示讀1個扇區,X=3表示寫一個扇區;
INT13H磁盤I/O中斷;
執行該段程序,就可對硬盤主引導扇區進行讀、寫操作。
(2)、系統啓動後,通過修改內存中的硬盤驅動器參數表(BPB),將總扇區數改爲原總扇區數加隱含扇區數,隱含扇區數改爲0,則可用DEBUG.COM的L、W命令對主引導扇區進行讀、寫(事實上,經過上述改動後,主引導扇區已變爲邏輯0扇區)操作。
2、分區引導扇區
DOS分區引導程序佔據着該分區的第1扇區(邏輯0扇區),內容與軟盤的主引導扇區基本相同,只不過BPB參數表的具體值不同。DOS分區引導程序不一定就在硬盤的物理第二扇區,需根據隱含扇區數定。這一扇區的邏輯號總是0。
分區引導程序由FORMAT創建。
三、FAT表、FCB和數據區起始扇區號計算方法及簇號和扇區號的關係
爲以下敘述文件分配表(FAT)、目錄表(FCB)的方便,將以下涉及的有關換算關係先在這裏列出:
第一個FAT表總是從邏輯1扇區開始;
第二個FAT表起始扇區號=1+FAT表長;
主目錄起始扇區號=1+2個FAT表長;
數據區起始扇區號=1+2個FAT表長+主目錄長;
S=(C-2)*(扇區數/每簇)+數據區起始扇區號,其中:S表示數據(文件)所在的邏緝扇區號,C表示數據(文件)所在的簇號。以上關係式中,起始扇區號均表示邏輯扇區號。
四、DOS對文件的空間分配
DOS進行格式化時對磁盤空間按如下分配:
(1)引導部分;
(2)文件分配表的第一拷貝;
(3)文件分配表的第二拷貝;
(4)根目錄;
(5)數據區;
注:以上分配對軟盤而言是整個盤空間,對硬盤而言是DOS分區部分。
五 現代硬盤結構簡介
在老式硬盤中, 由於每個磁道的扇區數相等, 所以外道的記錄密度要遠低於內道, 因此會浪費很多磁盤空間 (與軟盤一樣)。 爲了解決這一問題, 進一步提高硬盤容量, 人們改用等密度結構生產硬盤。 也就是說, 外圈磁道的扇區比內圈磁道多。 採用這種結構後, 硬盤不再具有實際的3D參數, 尋址方式也改爲線性尋址, 即以扇區爲單位進行尋址。
爲了與使用3D尋址的老軟件兼容 (如使用BIOS Int13H接口的軟件), 在硬盤控制器內部安裝了一個地址翻譯器, 由它負責將老式3D參數翻譯成新的線性參數。 這也是爲什麼現在硬盤的3D參數可以有多種選擇的原因 (不同的工作模式, 對應不同的3D參數, 如 LBA, LARGE, NORMAL)。
六 擴展 Int 13H 簡介
雖然現代硬盤都已經採用了線性尋址, 但是由於基本 Int 13H 的制約, 使用 BIOS Int 13H 接口的程序, 如 DOS 等還只能訪問 8 G 以內的硬盤空間。爲了打破這一限制, Microsoft 等幾家公司制定了擴展 Int 13H 標準(Extended Int13H), 採用線性尋址方式存取硬盤, 所以突破了 8 G 的限制,而且還加入了對可拆卸介質 (如活動硬盤) 的支持。
七。 Boot Sector 結構簡介
1。 Boot Sector 的組成
Boot Sector 也就是硬盤的第一個扇區, 它由 MBR (Master Boot Record),DPT (Disk Partition Table) 和 Boot Record ID 三部分組成。
MBR 又稱作主引導記錄佔用 Boot Sector 的前 446 個字節 ( 0 to 0x1BD ),存放系統主引導程序 (它負責從活動分區中裝載並運行系統引導程序)。
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 |
|------------------------------------------------|
2。 分區表結構簡介
分區表由四個分區項構成, 每一項的結構如下:
BYTE State : 分區狀態, 0 = 未激活, 0x80 = 激活 (注意此項)
BYTE StartHead : 分區起始磁頭號
WORD StartSC : 分區起始扇區和柱面號, 底字節的低6位爲扇區號, 高2位爲柱面號的第9,10 位, 高 字節爲柱面號的低 8 位
BYTE Type : 分區類型, 如 0x0B = FAT32, 0x83 = Linux 等, 00 表示此項未用
BYTE EndHead : 分區結束磁頭號
WORD EndSC : 分區結束扇區和柱面號, 定義同前
DWORD Relative : 在線性尋址方式下的分區相對扇區地址 (對於基本分區即爲絕對地址)
DWORD Sectors : 分區大小 (總扇區數)
注意: 在 DOS / Windows 系統下, 基本分區必須以柱面爲單位劃分( Sectors * Heads 個扇區), 如對於 CHS 爲 764/255/63 的硬盤, 分區的最小尺寸爲 255 * 63 * 512 / 1048576 = 7。844 MB。