硬盤(pán)邏輯結(jié)構(gòu)相關(guān)知識(shí)簡(jiǎn)介
本文內(nèi)容主要介紹硬盤(pán)邏輯結(jié)構(gòu)方面的一些參數(shù)和概念,包括Int 13H 調(diào)用、Boot Sector 結(jié)構(gòu)、分區(qū)表結(jié)構(gòu)、擴(kuò)展分區(qū)等知識(shí)。
1. 硬盤(pán)參數(shù)
很久以前, 硬盤(pán)的容量還非常小的時(shí)候,人們采用與軟盤(pán)類(lèi)似的結(jié)構(gòu)生產(chǎn)硬盤(pán)。 也就是硬盤(pán)盤(pán)片的每一條磁道都具有相同的扇區(qū)數(shù)。由此產(chǎn)生了所謂的3D參數(shù) (Disk Geometry)。 既磁頭數(shù)(Heads), 柱面數(shù)(Cylinders),扇區(qū)數(shù)(Sectors),以及相應(yīng)的尋址方式。
其中:
磁頭數(shù)(Heads)表示硬盤(pán)總共有幾個(gè)磁頭,也就是有幾面盤(pán)片, 最大為 255 (用 8 個(gè)二進(jìn)制位存儲(chǔ));
柱面數(shù)(Cylinders) 表示硬盤(pán)每一面盤(pán)片上有幾條磁道,最大為 1023(用 10 個(gè)二進(jìn)制位存儲(chǔ));
扇區(qū)數(shù)(Sectors) 表示每一條磁道上有幾個(gè)扇區(qū), 最大為 63(用 6個(gè)二進(jìn)制位存儲(chǔ))。
每個(gè)扇區(qū)一般是 512個(gè)字節(jié), 理論上講這不是必須的,但好象沒(méi)有取別的值的。
所以磁盤(pán)最大容量為:
255 * 1023 * 63 * 512 / 1048576 = 8024 GB ( 1M =1048576 Bytes )或硬盤(pán)廠商常用的單位:
255 * 1023 * 63 * 512 / 1000000 = 8414 GB ( 1M =1000000 Bytes )
在 CHS 尋址方式中, 磁頭, 柱面, 扇區(qū)的取值范圍分別為 0到 Heads - 1,0 到 Cylinders - 1, 1 到 Sectors (注意是從 1 開(kāi)始)。
2. 基本 Int 13H 調(diào)用簡(jiǎn)介
BIOS Int 13H 調(diào)用是 BIOS提供的磁盤(pán)基本輸入輸出中斷調(diào)用, 它可以完成磁盤(pán)(包括硬盤(pán)和軟盤(pán))的復(fù)位, 讀寫(xiě), 校驗(yàn), 定位, 診斷,格式化等功能。它使用的就是 CHS 尋址方式, 因此最大識(shí)能訪問(wèn) 8 GB 左右的硬盤(pán) (本文中如不作特殊說(shuō)明, 均以 1M = 1048576 字節(jié)為單位)。
3.擴(kuò)展 Int 13H 簡(jiǎn)介
雖然現(xiàn)代硬盤(pán)都已經(jīng)采用了線性尋址, 但是由于基本 Int13H 的制約, 使用 BIOS Int 13H 接口的程序, 如 DOS 等還只能訪問(wèn) 8 G以內(nèi)的硬盤(pán)空間。為了打破這一限制, Microsoft 等幾家公司制定了擴(kuò)展 Int 13H 標(biāo)準(zhǔn)(Extended Int13H), 采用線性尋址方式存取硬盤(pán), 所以突破了 8 G的限制,而且還加入了對(duì)可拆卸介質(zhì) (如活動(dòng)硬盤(pán)) 的支持。
4. 現(xiàn)代硬盤(pán)結(jié)構(gòu)簡(jiǎn)介
在老式硬盤(pán)中, 由于每個(gè)磁道的扇區(qū)數(shù)相等,所以外道的記錄密度要遠(yuǎn)低于內(nèi)道, 因此會(huì)浪費(fèi)很多磁盤(pán)空間 (與軟盤(pán)一樣)。 為了解決這一問(wèn)題,進(jìn)一步提高硬盤(pán)容量, 人們改用等密度結(jié)構(gòu)生產(chǎn)硬盤(pán)。 也就是說(shuō),外圈磁道的扇區(qū)比內(nèi)圈磁道多。 采用這種結(jié)構(gòu)后, 硬盤(pán)不再具有實(shí)際的3D參數(shù),尋址方式也改為線性尋址, 即以扇區(qū)為單位進(jìn)行尋址。
為了與使用3D尋址的老軟件兼容 (如使用BIOSInt13H接口的軟件), 在硬盤(pán)控制器內(nèi)部安裝了一個(gè)地址翻譯器,由它負(fù)責(zé)將老式3D參數(shù)翻譯成新的線性參數(shù)。 這也是為什么現(xiàn)在硬盤(pán)的3D參數(shù)可以有多種選擇的原因(不同的工作模式, 對(duì)應(yīng)不同的3D參數(shù), 如 LBA, LARGE, NORMAL)。
5.Boot Sector 的組成
Boot Sector 也就是硬盤(pán)的第一個(gè)扇區(qū), 它由 MBR (MasterBoot Record),DPT (Disk Partition Table) 和 Boot Record ID 三部分組成。
MBR 又稱作主引導(dǎo)記錄占用 Boot Sector 的前 446 個(gè)字節(jié)( 0 to 0x1BD ),存放系統(tǒng)主引導(dǎo)程序 (它負(fù)責(zé)從活動(dòng)分區(qū)中裝載并運(yùn)行系統(tǒng)引導(dǎo)程序)。
DPT 即主分區(qū)表占用 64 個(gè)字節(jié) (0x1BE to 0x1FD),記錄了磁盤(pán)的基本分區(qū)信息。 主分區(qū)表分為四個(gè)分區(qū)項(xiàng), 每項(xiàng) 16 字節(jié),分別記錄了每個(gè)主分區(qū)的信息(因此最多可以有四個(gè)主分區(qū))。
Boot Record ID 即引導(dǎo)區(qū)標(biāo)記占用兩個(gè)字節(jié) (0x1FE and0x1FF), 對(duì)于合法引導(dǎo)區(qū), 它等于 0xAA55, 這是判別引導(dǎo)區(qū)是否合法的標(biāo)志。
Boot Sector 的具體結(jié)構(gòu)如下圖所示:
0000 |---------------------------------------------|
| |
| |
| Master Boot Record |
| |
| |
| 主引導(dǎo)記錄(446字節(jié)) |
| |
| |
| |
01BD | |
01BE |---------------------------------------------|
| |
01CD | 分區(qū)信息 1(16字節(jié)) |
01CE |---------------------------------------------|
| |
01DD | 分區(qū)信息 2(16字節(jié)) |
01DE |---------------------------------------------|
| |
01ED | 分區(qū)信息 3(16字節(jié)) |
01EE |---------------------------------------------|
| |
01FD | 分區(qū)信息 4(16字節(jié)) |
|---------------------------------------------|
| 01FE |01FF |
| 55 | AA |
|---------------------------------------------|
6.分區(qū)表結(jié)構(gòu)簡(jiǎn)介
分區(qū)表由四個(gè)分區(qū)項(xiàng)構(gòu)成, 每一項(xiàng)的結(jié)構(gòu)如下:
BYTE State : 分區(qū)狀態(tài), 0 =未激活, 0x80 = 激活 (注意此項(xiàng))
BYTE StartHead : 分區(qū)起始磁頭號(hào)
WORD StartSC : 分區(qū)起始扇區(qū)和柱面號(hào),底字節(jié)的低6位為扇區(qū)號(hào),
高2位為柱面號(hào)的第 9,10 位, 高字節(jié)為柱面號(hào)的低 8 位
BYTE Type : 分區(qū)類(lèi)型, 如0x0B = FAT32, 0x83 = Linux 等,
00 表示此項(xiàng)未用,07 = NTFS
BYTE EndHead : 分區(qū)結(jié)束磁頭號(hào)
WORD EndSC :分區(qū)結(jié)束扇區(qū)和柱面號(hào), 定義同前
DWORD Relative :在線性尋址方式下的分區(qū)相對(duì)扇區(qū)地址
(對(duì)于基本分區(qū)即為絕對(duì)地址)
DWORD Sectors : 分區(qū)大小 (總扇區(qū)數(shù))
注意: 在 DOS / Windows 系統(tǒng)下,基本分區(qū)必須以柱面為單位劃分( Sectors * Heads 個(gè)扇區(qū)), 如對(duì)于 CHS 為 764/255/63 的硬盤(pán),分區(qū)的最小尺寸為 255 * 63 * 512 / 1048576 = 7.844 MB.
7. 擴(kuò)展分區(qū)簡(jiǎn)介
由于主分區(qū)表中只能分四個(gè)分區(qū), 無(wú)法滿足需求,因此設(shè)計(jì)了一種擴(kuò)展分區(qū)格式。 基本上說(shuō), 擴(kuò)展分區(qū)的信息是以鏈表形式存放的,但也有一些特別的地方。首先, 主分區(qū)表中要有一個(gè)基本擴(kuò)展分區(qū)項(xiàng),所有擴(kuò)展分區(qū)都隸屬于它,也就是說(shuō)其他所有擴(kuò)展分區(qū)的空間都必須包括在這個(gè)基本擴(kuò)展分區(qū)中。對(duì)于DOS / Windows 來(lái)說(shuō), 擴(kuò)展分區(qū)的類(lèi)型為 0x05. 除基本擴(kuò)展分區(qū)以外的其他所有擴(kuò)展分區(qū)則以鏈表的形式級(jí)聯(lián)存放, 后一個(gè)擴(kuò)展分區(qū)的數(shù)據(jù)項(xiàng)記錄在前一個(gè)擴(kuò)展分區(qū)的分區(qū)表中,但兩個(gè)擴(kuò)展分區(qū)的空間并不重疊。
擴(kuò)展分區(qū)類(lèi)似于一個(gè)完整的硬盤(pán), 必須進(jìn)一步分區(qū)才能使用。但每個(gè)擴(kuò)展分區(qū)中只能存在一個(gè)其他分區(qū)。 此分區(qū)在 DOS/Windows環(huán)境中即為邏輯盤(pán)。因此每一個(gè)擴(kuò)展分區(qū)的分區(qū)表(同樣存儲(chǔ)在擴(kuò)展分區(qū)的第一個(gè)扇區(qū)中)中最多只能有兩個(gè)分區(qū)數(shù)據(jù)項(xiàng)(包括下一個(gè)擴(kuò)展分區(qū)的數(shù)據(jù)項(xiàng))。