|
馬上注冊,結交更多好友,享用更多功能。
您需要 登錄 才可以下載或查看,沒(méi)有帳號?注冊
x
FAT文件系統原理
??http://www.sjhf.net
文本結構索引:
圖片表格索引:
表1 分區表參數
表2 擴展分區表項的內容
一、硬盤(pán)的物理結構 圖1 硬盤(pán)的物理結構 表3 FAT32分區DBR的位置劃分
二、硬盤(pán)的邏輯結構 圖2 winhex下的磁盤(pán)MBR 表4 FAT32分區的BPB字段
三、磁盤(pán)引導原理 3.1 MBR扇區 圖3 winhex給出的MBR參數的意義 表5 FAT32分區的擴展BPB字段
3.2 擴展分區 圖4 分區表類(lèi)型標志 表6 FAT16分區上的DBR組成
四、FAT分區原理 4.1 關(guān)于DBR 4.1.1 FAT32 DBR扇區 圖5 一個(gè)4分區的磁盤(pán)結構圖示 表7 FAT16分區的BPB字段
4.1.2 FAT16 DBR扇區 圖6 分區表鏈接圖示 表8 FAT16分區的擴展BPB字段
4.2 關(guān)于保留扇區 圖7 磁盤(pán)的整體結構圖示 表9 FAT16分區大小與對因簇大小
圖8 winhex下的FAT32基本分區DBR圖 表11 FAT16目錄項的定義
4.3 FAT表和數據的存儲原則
4.3.1 存儲過(guò)程假想 圖9 winhex給出的圖8DBR參數說(shuō)明 表12 FAT32分區大小與對因簇大小
4.3.2 FAT16存儲原理 圖10 winhex所截FAT16的文件分配表 表13 FAT表的取值含義
4.3.3 FAT32存儲原理 圖4.3.11 Fat16的組織形式 表14 FAT32短文件目錄項的定義
五、結束 圖4.3.12 Fat32的組織形式 表15 FAT32長(cháng)文件目錄項的定義
一、硬盤(pán)的物理結構:
硬盤(pán)存儲數據是根據電、磁轉換原理實(shí)現的。硬盤(pán)由一個(gè)或幾個(gè)表面鍍有磁性物質(zhì)的金屬或玻璃等物質(zhì)盤(pán)片以及盤(pán)片兩面所安裝的磁頭和相應的控制電路組成(圖1),其中盤(pán)片和磁頭密封在無(wú)塵的金屬殼中。
硬盤(pán)工作時(shí),盤(pán)片以設計轉速高速旋轉,設置在盤(pán)片表面的磁頭則在電路控制下徑向移動(dòng)到指定位置然后將數據存儲或讀取出來(lái)。當系統向硬盤(pán)寫(xiě)入數據時(shí),磁頭中“寫(xiě)數據”電流產(chǎn)生磁場(chǎng)使盤(pán)片表面磁性物質(zhì)狀態(tài)發(fā)生改變,并在寫(xiě)電流磁場(chǎng)消失后仍能保持,這樣數據就存儲下來(lái)了;當系統從硬盤(pán)中讀數據時(shí),磁頭經(jīng)過(guò)盤(pán)片指定區域,盤(pán)片表面磁場(chǎng)使磁頭產(chǎn)生感應電流或線(xiàn)圈阻抗產(chǎn)生變化,經(jīng)相關(guān)電路處理后還原成數據。因此只要能將盤(pán)片表面處理得更平滑、磁頭設計得更精密以及盡量提高盤(pán)片旋轉速度,就能造出容量更大、讀寫(xiě)數據速度更快的硬盤(pán)。這是因為盤(pán)片表面處理越平、轉速越快就能越使磁頭離盤(pán)片表面越近,提高讀、寫(xiě)靈敏度和速度;磁頭設計越小越精密就能使磁頭在盤(pán)片上占用空間越小,使磁頭在一張盤(pán)片上建立更多的磁道以存儲更多的數據。
[返回索引]
二、硬盤(pán)的邏輯結構。
硬盤(pán)由很多盤(pán)片(platter)組成,每個(gè)盤(pán)片的每個(gè)面都有一個(gè)讀寫(xiě)磁頭。如果有N個(gè)盤(pán)片。就有2N個(gè)面,對應2N個(gè)磁頭(Heads),從0、1、2開(kāi)始編號。每個(gè)盤(pán)片被劃分成若干個(gè)同心圓磁道(邏輯上的,是不可見(jiàn)的。)每個(gè)盤(pán)片的劃分規則通常是一樣的。這樣每個(gè)盤(pán)片的半徑均為固定值R的同心圓再邏輯上形成了一個(gè)以電機主軸為軸的柱面(Cylinders),從外至里編號為0、1、2……每個(gè)盤(pán)片上的每個(gè)磁道又被劃分為幾十個(gè)扇區(Sector),通常的容量是512byte,并按照一定規則編號為1、2、3……形成Cylinders×Heads×Sector個(gè)扇區。這三個(gè)參數即是硬盤(pán)的物理參數。我們下面的很多實(shí)踐需要深刻理解這三個(gè)參數的意義。
[返回索引]
三、磁盤(pán)引導原理。
3.1 MBR(master boot record)扇區:
計算機在按下power鍵以后,開(kāi)始執行主板bios程序。進(jìn)行完一系列檢測和配置以后。開(kāi)始按bios中設定的系統引導順序引導系統。假定現在是硬盤(pán)。Bios執行完自己的程序后如何把執行權交給硬盤(pán)呢。交給硬盤(pán)后又執行存儲在哪里的程序呢。其實(shí),稱(chēng)為mbr的一段代碼起著(zhù)舉足輕重的作用。MBR(master boot record),即主引導記錄,有時(shí)也稱(chēng)主引導扇區。位于整個(gè)硬盤(pán)的0柱面0磁頭1扇區(可以看作是硬盤(pán)的第一個(gè)扇區),bios在執行自己固有的程序以后就會(huì )jump到mbr中的第一條指令。將系統的控制權交由mbr來(lái)執行。在總共512byte的主引導記錄中,MBR的引導程序占了其中的前446個(gè)字節(偏移0H~偏移1BDH),隨后的64個(gè)字節(偏移1BEH~偏移1FDH)為DPT(Disk PartitionTable,硬盤(pán)分區表),最后的兩個(gè)字節“55 AA”(偏移1FEH~偏移1FFH)是分區有效結束標志。
MBR不隨操作系統的不同而不同,意即不同的操作系統可能會(huì )存在相同的MBR,即使不同,MBR也不會(huì )夾帶操作系統的性質(zhì)。具有公共引導的特性。
我們來(lái)分析一段mbr。下面是用winhex查看的一塊希捷120GB硬盤(pán)的mbr。
[返回索引]
你的硬盤(pán)的MBR引導代碼可能并非這樣。不過(guò)即使不同,所執行的功能大體是一樣的。這是wowocock關(guān)于磁盤(pán)mbr的反編譯,已加了詳細的注釋?zhuān)信d趣可以細細研究一下。
我們看DPT部分。操作系統為了便于用戶(hù)對磁盤(pán)的管理。加入了磁盤(pán)分區的概念。即將一塊磁盤(pán)邏輯劃分為幾塊。磁盤(pán)分區數目的多少只受限于C~Z的英文字母的數目,在上圖DPT共64個(gè)字節中如何表示多個(gè)分區的屬性呢?microsoft通過(guò)鏈接的方法解決了這個(gè)問(wèn)題。在DPT共64個(gè)字節中,以16個(gè)字節為分區表項單位描述一個(gè)分區的屬性。也就是說(shuō),第一個(gè)分區表項描述一個(gè)分區的屬性,一般為基本分區。第二個(gè)分區表項描述除基本分區外的其余空間,一般而言,就是我們所說(shuō)的擴展分區。這部分的大體說(shuō)明見(jiàn)表1。
表1 圖2分區表第一字段
字節位移 字段長(cháng)度 值 字段名和定義
0x01BE BYTE 0x80 引導指示符(Boot Indicator) 指明該分區是否是活動(dòng)分區。
0x01BF BYTE 0x01 開(kāi)始磁頭(Starting Head)
0x01C0 6位 0x01 開(kāi)始扇區(Starting Sector) 只用了0~5位。后面的兩位(第6位和第7位)被開(kāi)始柱面字段所使用
0x01C1 10位 0x00 開(kāi)始柱面(Starting Cylinder) 除了開(kāi)始扇區字段的最后兩位外,還使用了1位來(lái)組成該柱面值。開(kāi)始柱面是一個(gè)10位數,最大值為1023
0x01C2 BYTE 0x07 系統ID(System ID) 定義了分區的類(lèi)型,詳細定義,請參閱圖4
0x01C3 BYTE 0xFE 結束磁頭(Ending Head)
0x01C4 6位 0xFF 結束扇區(Ending Sector) 只使用了0~5位。最后兩位(第6、7位)被結束柱面字段所使用
0x01C5 10位 0x7B 結束柱面(Ending Cylinder) 除了結束扇區字段最后的兩位外,還使用了1位,以組成該柱面值。結束柱面是一個(gè)10位的數,最大值為1023
0x01C6 DWORD 0x0000003F 相對扇區數(Relative Sectors) 從該磁盤(pán)的開(kāi)始到該分區的開(kāi)始的位移量,以扇區來(lái)計算
0x01CA DWORD 0x00DAA83D 總扇區數(Total Sectors) 該分區中的扇區總數
[返回索引]
注:上表中的超過(guò)1字節的數據都以實(shí)際數據顯示,就是按高位到地位的方式顯示。存儲時(shí)是按低位到高位存儲的。兩者表現不同,請仔細看清楚。以后出現的表,圖均同。
也可以在winhex中看到這些參數的意義:
[返回索引]
說(shuō)明: 每個(gè)分區表項占用16個(gè)字節,假定偏移地址從0開(kāi)始。如圖3的分區表項3。分區表項4同分區表項3。
1、0H偏移為活動(dòng)分區是否標志,只能選00H和80H。80H為活動(dòng),00H為非活動(dòng)。其余值對microsoft而言為非法值。
2、重新說(shuō)明一下(這個(gè)非常重要):大于1個(gè)字節的數被以低字節在前的存儲格式格式(little endian format)或稱(chēng)反字節順序保存下來(lái)。低字節在前的格式是一種保存數的方法,這樣,最低位的字節最先出現在十六進(jìn)制數符號中。例如,相對扇區數字段的值0x3F000000的低字節在前表示為0x0000003F。這個(gè)低字節在前的格式數的十進(jìn)制數為63。
3、系統在分區時(shí),各分區都不允許跨柱面,即均以柱面為單位,這就是通常所說(shuō)的分區粒度。有時(shí)候我們分區是輸入分區的大小為7000M,分出來(lái)卻是6997M,就是這個(gè)原因。 偏移2H和偏移6H的扇區和柱面參數中,扇區占6位(bit),柱面占10位(bit),以偏移6H為例,其低6位用作扇區數的二進(jìn)制表示。其高兩位做柱面數10位中的高兩位,偏移7H組成的8位做柱面數10位中的低8位。由此可知,實(shí)際上用這種方式表示的分區容量是有限的,柱面和磁頭從0開(kāi)始編號,扇區從1開(kāi)始編號,所以最多只能表示1024個(gè)柱面×63個(gè)扇區×256個(gè)磁頭×512byte=8455716864byte。即通常的8.4GB(實(shí)際上應該是7.8GB左右)限制。實(shí)際上磁頭數通常只用到255個(gè)(由匯編語(yǔ)言的尋址寄存器決定),即使把這3個(gè)字節按線(xiàn)性尋址,依然力不從心。 在后來(lái)的操作系統中,超過(guò)8.4GB的分區其實(shí)已經(jīng)不通過(guò)C/H/S的方式尋址了。而是通過(guò)偏移CH~偏移FH共4個(gè)字節32位線(xiàn)性扇區地址來(lái)表示分區所占用的扇區總數?芍ㄟ^(guò)4個(gè)字節可以表示2^32個(gè)扇區,即2TB=2048GB,目前對于大多數計算機而言,這已經(jīng)是個(gè)天文數字了。在未超過(guò)8.4GB的分區上,C/H/S的表示方法和線(xiàn)性扇區的表示方法所表示的分區大小是一致的。也就是說(shuō),兩種表示方法是協(xié)調的。即使不協(xié)調,也以線(xiàn)性尋址為準。(可能在某些系統中會(huì )提示出錯)。超過(guò)8.4GB的分區結束C/H/S一般填充為FEH FFH FFH。即C/H/S所能表示的最大值。有時(shí)候也會(huì )用柱面對1024的模來(lái)填充。不過(guò)這幾個(gè)字節是什么其實(shí)都無(wú)關(guān)緊要了。
雖然現在的系統均采用線(xiàn)性尋址的方式來(lái)處理分區的大小。但不可跨柱面的原則依然沒(méi)變。本分區的扇區總數加上與前一分區之間的保留扇區數目依然必須是柱面容量的整數倍。(保留扇區中的第一個(gè)扇區就是存放分區表的MBR或虛擬MBR的扇區,分區的扇區總數在 |
|