FAT文件系統(tǒng)原理1_第1頁(yè)
FAT文件系統(tǒng)原理1_第2頁(yè)
FAT文件系統(tǒng)原理1_第3頁(yè)
FAT文件系統(tǒng)原理1_第4頁(yè)
FAT文件系統(tǒng)原理1_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、FAT文件系統(tǒng)原理一、硬盤的物理結(jié)構(gòu):硬盤存儲(chǔ)數(shù)據(jù)是根據(jù)電、磁轉(zhuǎn)換原理實(shí)現(xiàn)的。硬盤由一個(gè)或幾個(gè)表面鍍有磁性物質(zhì)的金屬或玻璃等物質(zhì)盤片以及盤片兩面所安裝的磁頭和相應(yīng)的控制電路組成(圖1),其中盤片和磁頭密封在無塵的金屬殼中。硬盤工作時(shí),盤片以設(shè)計(jì)轉(zhuǎn)速高速旋轉(zhuǎn),設(shè)置在盤片表面的磁頭則在電路控制下徑向移動(dòng)到指定位置然后將數(shù)據(jù)存儲(chǔ)或讀取出來。當(dāng)系統(tǒng)向硬盤寫入數(shù)據(jù)時(shí),磁頭中“寫數(shù)據(jù)”電流產(chǎn)生磁場(chǎng)使盤片表面磁性物質(zhì)狀態(tài)發(fā)生改變,并在寫電流磁場(chǎng)消失后仍能保持,這樣數(shù)據(jù)就存儲(chǔ)下來了;當(dāng)系統(tǒng)從硬盤中讀數(shù)據(jù)時(shí),磁頭經(jīng)過盤片指定區(qū)域,盤片表面磁場(chǎng)使磁頭產(chǎn)生感應(yīng)電流或線圈阻抗產(chǎn)生變化,經(jīng)相關(guān)電路處理后還原成數(shù)據(jù)。因此

2、只要能將盤片表面處理得更平滑、磁頭設(shè)計(jì)得更精密以及盡量提高盤片旋轉(zhuǎn)速度,就能造出容量更大、讀寫數(shù)據(jù)速度更快的硬盤。這是因?yàn)楸P片表面處理越平、轉(zhuǎn)速越快就能越使磁頭離盤片表面越近,提高讀、寫靈敏度和速度;磁頭設(shè)計(jì)越小越精密就能使磁頭在盤片上占用空間越小,使磁頭在一張盤片上建立更多的磁道以存儲(chǔ)更多的數(shù)據(jù)。二、硬盤的邏輯結(jié)構(gòu)。硬盤由很多盤片(platter)組成,每個(gè)盤片的每個(gè)面都有一個(gè)讀寫磁頭。如果有N個(gè)盤片。就有2N個(gè)面,對(duì)應(yīng)2N個(gè)磁頭(Heads),從0、1、2開始編號(hào)。每個(gè)盤片被劃分成若干個(gè)同心圓磁道(邏輯上的,是不可見的。)每個(gè)盤片的劃分規(guī)則通常是一樣的。這樣每個(gè)盤片的半徑均為固定值R的同心

3、圓再邏輯上形成了一個(gè)以電機(jī)主軸為軸的柱面(Cylinders),從外至里編號(hào)為0、1、2每個(gè)盤片上的每個(gè)磁道又被劃分為幾十個(gè)扇區(qū)(Sector),通常的容量是512byte,并按照一定規(guī)則編號(hào)為1、2、3形成Cylinders×Heads×Sector個(gè)扇區(qū)。這三個(gè)參數(shù)即是硬盤的物理參數(shù)。我們下面的很多實(shí)踐需要深刻理解這三個(gè)參數(shù)的意義。三、磁盤引導(dǎo)原理。3.1MBR(MasterBootRecord)扇區(qū):計(jì)算機(jī)在按下power鍵以后,開始執(zhí)行主板bios程序。進(jìn)行完一系列檢測(cè)和配置以后。開始按bios中設(shè)定的系統(tǒng)引導(dǎo)順序引導(dǎo)系統(tǒng)。假定現(xiàn)在是硬盤。Bios執(zhí)行完自己的程序后

4、如何把執(zhí)行權(quán)交給硬盤呢。交給硬盤后又執(zhí)行存儲(chǔ)在哪里的程序呢。其實(shí),稱為mbr的一段代碼起著舉足輕重的作用。MBR(masterbootrecord),即主引導(dǎo)記錄,有時(shí)也稱主引導(dǎo)扇區(qū)。位于整個(gè)硬盤的0柱面0磁頭1扇區(qū)(可以看作是硬盤的第一個(gè)扇區(qū)),bios在執(zhí)行自己固有的程序以后就會(huì)jump到mbr中的第一條指令。將系統(tǒng)的控制權(quán)交由mbr來執(zhí)行。在總共512byte的主引導(dǎo)記錄中,MBR的引導(dǎo)程序占了其中的前446個(gè)字節(jié)(偏移0H偏移1BDH),隨后的64個(gè)字節(jié)(偏移1BEH偏移1FDH)為DPT(DiskPartitionTable,硬盤分區(qū)表),最后的兩個(gè)字節(jié)“55AA”(偏移1FEH偏移

5、1FFH)是分區(qū)有效結(jié)束標(biāo)志。MBR不隨操作系統(tǒng)的不同而不同,意即不同的操作系統(tǒng)可能會(huì)存在相同的MBR,即使不同,MBR也不會(huì)夾帶操作系統(tǒng)的性質(zhì)。具有公共引導(dǎo)的特性。我們來分析一段mbr。下面是用winhex查看的一塊希捷120GB硬盤的mbr。你的硬盤的MBR引導(dǎo)代碼可能并非這樣。不過即使不同,所執(zhí)行的功能大體是一樣的。我們看DPT部分。操作系統(tǒng)為了便于用戶對(duì)磁盤的管理。加入了磁盤分區(qū)的概念。即將一塊磁盤邏輯劃分為幾塊。磁盤分區(qū)數(shù)目的多少只受限于CZ的英文字母的數(shù)目,在上圖DPT共64個(gè)字節(jié)中如何表示多個(gè)分區(qū)的屬性呢?microsoft通過鏈接的方法解決了這個(gè)問題。在DPT共64個(gè)字節(jié)中,以

6、16個(gè)字節(jié)為分區(qū)表項(xiàng)單位描述一個(gè)分區(qū)的屬性。也就是說,第一個(gè)分區(qū)表項(xiàng)描述一個(gè)分區(qū)的屬性,一般為基本分區(qū)。第二個(gè)分區(qū)表項(xiàng)描述除基本分區(qū)外的其余空間,一般而言,就是我們所說的擴(kuò)展分區(qū)。這部分的大體說明見表1。表1圖2分區(qū)表第一字段字節(jié)位移字段長(zhǎng)度值字段名和定義0x01BEBYTE0x80引導(dǎo)指示符(BootIndicator)指明該分區(qū)是否是活動(dòng)分區(qū)。0x01BFBYTE0x01開始磁頭(StartingHead)0x01C06位0x01開始扇區(qū)(StartingSector)只用了05位。后面的兩位(第6位和第7位)被開始柱面字段所使用0x01C110位0x00開始柱面(StartingCyli

7、nder)除了開始扇區(qū)字段的最后兩位外,還使用了1位來組成該柱面值。開始柱面是一個(gè)10位數(shù),最大值為10230x01C2BYTE0x07系統(tǒng)ID(SystemID)定義了分區(qū)的類型,詳細(xì)定義,請(qǐng)參閱圖40x01C3BYTE0xFE結(jié)束磁頭(EndingHead)0x01C46位0xFF結(jié)束扇區(qū)(EndingSector)只使用了05位。最后兩位(第6、7位)被結(jié)束柱面字段所使用0x01C510位0x7B結(jié)束柱面(EndingCylinder)除了結(jié)束扇區(qū)字段最后的兩位外,還使用了1位,以組成該柱面值。結(jié)束柱面是一個(gè)10位的數(shù),最大值為10230x01C6DWORD0x0000003F相對(duì)扇區(qū)數(shù)

8、(RelativeSectors)從該磁盤的開始到該分區(qū)的開始的位移量,以扇區(qū)來計(jì)算0x01CADWORD0x00DAA83D總扇區(qū)數(shù)(TotalSectors)該分區(qū)中的扇區(qū)總數(shù)注:上表中的超過1字節(jié)的數(shù)據(jù)都以實(shí)際數(shù)據(jù)顯示,就是按高位到地位的方式顯示。存儲(chǔ)時(shí)是按低位到高位存儲(chǔ)的。兩者表現(xiàn)不同,請(qǐng)仔細(xì)看清楚。以后出現(xiàn)的表,圖均同。也可以在winhex中看到這些參數(shù)的意義:說明:每個(gè)分區(qū)表項(xiàng)占用16個(gè)字節(jié),假定偏移地址從0開始。如圖3的分區(qū)表項(xiàng)3。分區(qū)表項(xiàng)4同分區(qū)表項(xiàng)3。1、0H偏移為活動(dòng)分區(qū)是否標(biāo)志,只能選00H和80H。80H為活動(dòng),00H為非活動(dòng)。其余值對(duì)microsoft而言為非法值。2

9、、重新說明一下(這個(gè)非常重要):大于1個(gè)字節(jié)的數(shù)被以低字節(jié)在前的存儲(chǔ)格式格式(littleendianformat)或稱反字節(jié)順序保存下來。低字節(jié)在前的格式是一種保存數(shù)的方法,這樣,最低位的字節(jié)最先出現(xiàn)在十六進(jìn)制數(shù)符號(hào)中。例如,相對(duì)扇區(qū)數(shù)字段的值0x3F000000的低字節(jié)在前表示為0x0000003F。這個(gè)低字節(jié)在前的格式數(shù)的十進(jìn)制數(shù)為63。3、系統(tǒng)在分區(qū)時(shí),各分區(qū)都不允許跨柱面,即均以柱面為單位,這就是通常所說的分區(qū)粒度。有時(shí)候我們分區(qū)是輸入分區(qū)的大小為7000M,分出來卻是6997M,就是這個(gè)原因。偏移2H和偏移6H的扇區(qū)和柱面參數(shù)中,扇區(qū)占6位(bit),柱面占10位(bit),以偏移

10、6H為例,其低6位用作扇區(qū)數(shù)的二進(jìn)制表示。其高兩位做柱面數(shù)10位中的高兩位,偏移7H組成的8位做柱面數(shù)10位中的低8位。由此可知,實(shí)際上用這種方式表示的分區(qū)容量是有限的,柱面和磁頭從0開始編號(hào),扇區(qū)從1開始編號(hào),所以最多只能表示1024個(gè)柱面×63個(gè)扇區(qū)×256個(gè)磁頭×512byte=8455716864byte。即通常的8.4GB(實(shí)際上應(yīng)該是7.8GB左右)限制。實(shí)際上磁頭數(shù)通常只用到255個(gè)(由匯編語(yǔ)言的尋址寄存器決定),即使把這3個(gè)字節(jié)按線性尋址,依然力不從心。在后來的操作系統(tǒng)中,超過8.4GB的分區(qū)其實(shí)已經(jīng)不通過C/H/S的方式尋址了。而是通過偏移CH偏

11、移FH共4個(gè)字節(jié)32位線性扇區(qū)地址來表示分區(qū)所占用的扇區(qū)總數(shù)??芍ㄟ^4個(gè)字節(jié)可以表示232個(gè)扇區(qū),即2TB=2048GB,目前對(duì)于大多數(shù)計(jì)算機(jī)而言,這已經(jīng)是個(gè)天文數(shù)字了。在未超過8.4GB的分區(qū)上,C/H/S的表示方法和線性扇區(qū)的表示方法所表示的分區(qū)大小是一致的。也就是說,兩種表示方法是協(xié)調(diào)的。即使不協(xié)調(diào),也以線性尋址為準(zhǔn)。(可能在某些系統(tǒng)中會(huì)提示出錯(cuò))。超過8.4GB的分區(qū)結(jié)束C/H/S一般填充為FEHFFHFFH。即C/H/S所能表示的最大值。有時(shí)候也會(huì)用柱面對(duì)1024的模來填充。不過這幾個(gè)字節(jié)是什么其實(shí)都無關(guān)緊要了。雖然現(xiàn)在的系統(tǒng)均采用線性尋址的方式來處理分區(qū)的大小。但不可跨柱面的原則

12、依然沒變。本分區(qū)的扇區(qū)總數(shù)加上與前一分區(qū)之間的保留扇區(qū)數(shù)目依然必須是柱面容量的整數(shù)倍。(保留扇區(qū)中的第一個(gè)扇區(qū)就是存放分區(qū)表的MBR或虛擬MBR的扇區(qū),分區(qū)的扇區(qū)總數(shù)在線性表示方式上是不計(jì)入保留扇區(qū)的。如果是第一個(gè)分區(qū),保留扇區(qū)是本分區(qū)前的所有扇區(qū)。3.2擴(kuò)展分區(qū):擴(kuò)展分區(qū)中的每個(gè)邏輯驅(qū)動(dòng)器都存在一個(gè)類似于MBR的擴(kuò)展引導(dǎo)記錄(ExtendedBootRecord,EBR),也有人稱之為虛擬mbr或擴(kuò)展mbr,意思是一樣的。擴(kuò)展引導(dǎo)記錄包括一個(gè)擴(kuò)展分區(qū)表和該扇區(qū)的標(biāo)簽。擴(kuò)展引導(dǎo)記錄將記錄只包含擴(kuò)展分區(qū)中每個(gè)邏輯驅(qū)動(dòng)器的第一個(gè)柱面的第一面的信息。一個(gè)邏輯驅(qū)動(dòng)器中的引導(dǎo)扇區(qū)一般位于相對(duì)扇區(qū)32或6

13、3。但是,如果磁盤上沒有擴(kuò)展分區(qū),那么就不會(huì)有擴(kuò)展引導(dǎo)記錄和邏輯驅(qū)動(dòng)器。第一個(gè)邏輯驅(qū)動(dòng)器的擴(kuò)展分區(qū)表中的第一項(xiàng)指向它自身的引導(dǎo)扇區(qū)。第二項(xiàng)指向下一個(gè)邏輯驅(qū)動(dòng)器的EBR。如果不存在進(jìn)一步的邏輯驅(qū)動(dòng)器,第二項(xiàng)就不會(huì)使用,而且被記錄成一系列零。如果有附加的邏輯驅(qū)動(dòng)器,那么第二個(gè)邏輯驅(qū)動(dòng)器的擴(kuò)展分區(qū)表的第一項(xiàng)會(huì)指向它本身的引導(dǎo)扇區(qū)。第二個(gè)邏輯驅(qū)動(dòng)器的擴(kuò)展分區(qū)表的第二項(xiàng)指向下一個(gè)邏輯驅(qū)動(dòng)器的EBR。擴(kuò)展分區(qū)表的第三項(xiàng)和第四項(xiàng)永遠(yuǎn)都不會(huì)被使用。通過一幅4分區(qū)的磁盤結(jié)構(gòu)圖可以看到磁盤的大致組織形式。如圖5:關(guān)于擴(kuò)展分區(qū),如圖6所示,擴(kuò)展分區(qū)中邏輯驅(qū)動(dòng)器的擴(kuò)展引導(dǎo)記錄是一個(gè)連接表。該圖顯示了一個(gè)擴(kuò)展分區(qū)上的三

14、個(gè)邏輯驅(qū)動(dòng)器,說明了前面的邏輯驅(qū)動(dòng)器和最后一個(gè)邏輯驅(qū)動(dòng)器之間在擴(kuò)展分區(qū)表中的差異。除了擴(kuò)展分區(qū)上最后一個(gè)邏輯驅(qū)動(dòng)器外,表2中所描述的擴(kuò)展分區(qū)表的格式在每個(gè)邏輯驅(qū)動(dòng)器中都是重復(fù)的:第一個(gè)項(xiàng)標(biāo)識(shí)了邏輯驅(qū)動(dòng)器本身的引導(dǎo)扇區(qū),第二個(gè)項(xiàng)標(biāo)識(shí)了下一個(gè)邏輯驅(qū)動(dòng)器的EBR。最后一個(gè)邏輯驅(qū)動(dòng)器的擴(kuò)展分區(qū)表只會(huì)列出它本身的分區(qū)項(xiàng)。最后一個(gè)擴(kuò)展分區(qū)表的第二個(gè)項(xiàng)到第四個(gè)項(xiàng)被使用。表2擴(kuò)展分區(qū)表項(xiàng)的內(nèi)容擴(kuò)展分區(qū)表項(xiàng)分區(qū)表項(xiàng)的內(nèi)容第一個(gè)項(xiàng)包括數(shù)據(jù)的開始地址在內(nèi)的與擴(kuò)展分區(qū)中當(dāng)前邏輯驅(qū)動(dòng)器有關(guān)的信息第二個(gè)項(xiàng)有關(guān)擴(kuò)展分區(qū)中的下一個(gè)邏輯驅(qū)動(dòng)器的信息,包括包含下一個(gè)邏輯驅(qū)動(dòng)器的EBR的扇區(qū)的地址。如果不存在進(jìn)一步的邏輯驅(qū)動(dòng)器的話

15、,該字段不會(huì)被使用第三個(gè)項(xiàng)未用第四個(gè)項(xiàng)未用擴(kuò)展分區(qū)表項(xiàng)中的相對(duì)扇區(qū)數(shù)字段所顯示的是從擴(kuò)展分區(qū)開始到邏輯驅(qū)動(dòng)器中第一個(gè)扇區(qū)的位移的字節(jié)數(shù)。總扇區(qū)數(shù)字段中的數(shù)是指組成該邏輯驅(qū)動(dòng)器的扇區(qū)數(shù)目??偵葏^(qū)數(shù)字段的值等于從擴(kuò)展分區(qū)表項(xiàng)所定義的引導(dǎo)扇區(qū)到邏輯驅(qū)動(dòng)器末尾的扇區(qū)數(shù)。有時(shí)候在磁盤的末尾會(huì)有剩余空間,剩余空間是什么呢?我們前面說到,分區(qū)是以1柱面的容量為分區(qū)粒度的,那么如果磁盤總空間不是整數(shù)個(gè)柱面的話,不夠一個(gè)柱面的剩下的空間就是剩余空間了,這部分空間并不參與分區(qū),所以一般無法利用。照道理說,磁盤的物理模式?jīng)Q定了磁盤的總?cè)萘烤蛻?yīng)該是整數(shù)個(gè)柱面的容量,為什么會(huì)有不夠一個(gè)柱面的空間呢。在我的理解看來,本來

16、現(xiàn)在的磁盤為了更大的利用空間,一般在物理上并不是按照外圍的扇區(qū)大于里圈的扇區(qū)這種管理方式,只是為了與操作系統(tǒng)兼容而抽象出來CHS??赡芷鋵?shí)際空間容量不一定正好為整數(shù)個(gè)柱面的容量吧。四、FAT分區(qū)原理。先來一幅結(jié)構(gòu)圖:現(xiàn)在我們著重研究FAT格式分區(qū)內(nèi)數(shù)據(jù)是如何存儲(chǔ)的。FAT分區(qū)格式是MICROSOFT最早支持的分區(qū)格式,依據(jù)FAT表中每個(gè)簇鏈的所占位數(shù)(有關(guān)概念,后面會(huì)講到)分為fat12、fat16、fat32三種格式"變種",但其基本存儲(chǔ)方式是相似的。仔細(xì)研究圖7中的fat16和fat32分區(qū)的組成結(jié)構(gòu)。下面依次解釋DBR、FAT1、FAT2、根目錄、數(shù)據(jù)區(qū)、剩余扇區(qū)的概

17、念。提到的地址如無特別提示均為分區(qū)內(nèi)部偏移。4.1關(guān)于DBR.DBR區(qū)(DOSBOOTRECORD)即操作系統(tǒng)引導(dǎo)記錄區(qū)的意思,通常占用分區(qū)的第0扇區(qū)共512個(gè)字節(jié)(特殊情況也要占用其它保留扇區(qū),我們先說第0扇)。在這512個(gè)字節(jié)中,其實(shí)又是由跳轉(zhuǎn)指令,廠商標(biāo)志和操作系統(tǒng)版本號(hào),BPB(BIOSParameterBlock),擴(kuò)展BPB,os引導(dǎo)程序,結(jié)束標(biāo)志幾部分組成。以用的最多的FAT32為例說明分區(qū)DBR各字節(jié)的含義。見圖8。圖8的對(duì)應(yīng)解釋見表3表3FAT32分區(qū)上DBR中各部分的位置劃分字節(jié)位移字段長(zhǎng)度字段名對(duì)應(yīng)圖8顏色0x003個(gè)字節(jié)跳轉(zhuǎn)指令0x038個(gè)字節(jié)廠商標(biāo)志和os版本號(hào)0x0

18、B53個(gè)字節(jié)BPB0x4026個(gè)字節(jié)擴(kuò)展BPB0x5A420個(gè)字節(jié)引導(dǎo)程序代碼0x01FE2個(gè)字節(jié)有效結(jié)束標(biāo)志圖9給出了winhex對(duì)圖8DBR的相關(guān)參數(shù)解釋:根據(jù)上邊圖例,我們來討論DBR各字節(jié)的參數(shù)意義。MBR將CPU執(zhí)行轉(zhuǎn)移給引導(dǎo)扇區(qū),因此,引導(dǎo)扇區(qū)的前三個(gè)字節(jié)必須是合法的可執(zhí)行的基于x86的CPU指令。這通常是一條跳轉(zhuǎn)指令,該指令負(fù)責(zé)跳過接下來的幾個(gè)不可執(zhí)行的字節(jié)(BPB和擴(kuò)展BPB),跳到操作系統(tǒng)引導(dǎo)代碼部分。跳轉(zhuǎn)指令之后是8字節(jié)長(zhǎng)的OEMID,它是一個(gè)字符串,OEMID標(biāo)識(shí)了格式化該分區(qū)的操作系統(tǒng)的名稱和版本號(hào)。為了保留與MS-DOS的兼容性,通常Windows2000格式化該盤是

19、在FAT16和FAT32磁盤上的該字段中記錄了“MSDOS5.0”,在NTFS磁盤上(關(guān)于ntfs,另述),Windows2000記錄的是“NTFS”。通常在被Windows95格式化的磁盤上OEMID字段出現(xiàn)“MSWIN4.0”,在被Windows95OSR2和Windows98格式化的磁盤上OEMID字段出現(xiàn)“MSWIN4.1”。接下來的從偏移0x0B開始的是一段描述能夠使可執(zhí)行引導(dǎo)代碼找到相關(guān)參數(shù)的信息。通常稱之為BPB(BIOSParameterBlock),BPB一般開始于相同的位移量,因此,標(biāo)準(zhǔn)的參數(shù)都處于一個(gè)已知的位置。磁盤容量和幾何結(jié)構(gòu)變量都被封在BPB之中。由于引導(dǎo)扇區(qū)的第一

20、部分是一個(gè)x86跳轉(zhuǎn)指令。因此,將來通過在BPB末端附加新的信息,可以對(duì)BPB進(jìn)行擴(kuò)展。只需要對(duì)該跳轉(zhuǎn)指令作一個(gè)小的調(diào)整就可以適應(yīng)BPB的變化。圖9已經(jīng)列出了項(xiàng)目的名稱和取值,為了系統(tǒng)的研究,針對(duì)圖8,將FAT32分區(qū)格式的BPB含義和擴(kuò)展BPB含義釋義為表格,見表4和表5。表4FAT32分區(qū)的BPB字段字節(jié)位移字段長(zhǎng)度(字節(jié))圖8對(duì)應(yīng)取值名稱和定義0x0B20x0200扇區(qū)字節(jié)數(shù)(BytesPerSector)硬件扇區(qū)的大小。本字段合法的十進(jìn)制值有512、1024、2048和4096。對(duì)大多數(shù)磁盤來說,本字段的值為5120x0D10x08每簇扇區(qū)數(shù)(SectorsPerCluster),一簇

21、中的扇區(qū)數(shù)。由于FAT32文件系統(tǒng)只能跟蹤有限個(gè)簇(最多為4294967296個(gè)),因此,通過增加每簇扇區(qū)數(shù),可以使FAT32文件系統(tǒng)支持最大分區(qū)數(shù)。一個(gè)分區(qū)缺省的簇大小取決于該分區(qū)的大小。本字段的合法十進(jìn)制值有1、2、4、8、16、32、64和128。Windows2000的FAT32實(shí)現(xiàn)只能創(chuàng)建最大為32GB的分區(qū)。但是,Windows2000能夠訪問由其他操作系統(tǒng)(Windows95、OSR2及其以后的版本)所創(chuàng)建的更大的分區(qū)0x0e20x0020保留扇區(qū)數(shù)(ReservedSector)第一個(gè)FAT開始之前的扇區(qū)數(shù),包括引導(dǎo)扇區(qū)。本字段的十進(jìn)制值一般為320x1010x02FAT數(shù)(N

22、umberofFAT)該分區(qū)上FAT的副本數(shù)。本字段的值一般為20x1120x0000根目錄項(xiàng)數(shù)(RootEntries)只有FAT12/FAT16使用此字段。對(duì)FAT32分區(qū)而言,本字段必須設(shè)置為00x1320x0000小扇區(qū)數(shù)(SmallSector)(只有FAT12/FAT16使用此字段)對(duì)FAT32分區(qū)而言,本字段必須設(shè)置為00x1510xF8媒體描述符(MediaDescriptor)提供有關(guān)媒體被使用的信息。值0xF8表示硬盤,0xF0表示高密度的3.5寸軟盤。媒體描述符要用于MS-DOSFAT16磁盤,在Windows2000中未被使用0x1620x0000每FAT扇區(qū)數(shù)(Sec

23、torsPerFAT)只被FAT12/FAT16所使用,對(duì)FAT32分區(qū)而言,本字段必須設(shè)置為00x1820x003F每道扇區(qū)數(shù)(SectorsPerTrack)包含使用INT13h的磁盤的“每道扇區(qū)數(shù)”幾何結(jié)構(gòu)值。該分區(qū)被多個(gè)磁頭的柱面分成了多個(gè)磁道0x1A20x00FF磁頭數(shù)(NumberofHead)本字段包含使用INT13h的磁盤的“磁頭數(shù)”幾何結(jié)構(gòu)值。例如,在一張1.44MB3.5英寸的軟盤上,本字段的值為20x1C40x0000003F隱藏扇區(qū)數(shù)(HiddenSector)該分區(qū)上引導(dǎo)扇區(qū)之前的扇區(qū)數(shù)。在引導(dǎo)序列計(jì)算到根目錄的數(shù)據(jù)區(qū)的絕對(duì)位移的過程中使用了該值。本字段一般只對(duì)那些在

24、中斷13h上可見的媒體有意義。在沒有分區(qū)的媒體上它必須總是為00x2040x007D043F總扇區(qū)數(shù)(LargeSector)本字段包含F(xiàn)AT32分區(qū)中總的扇區(qū)數(shù)0x2440x00001F32每FAT扇區(qū)數(shù)(SectorsPerFAT)(只被FAT32使用)該分區(qū)每個(gè)FAT所占的扇區(qū)數(shù)。計(jì)算機(jī)利用這個(gè)數(shù)和FAT數(shù)以及隱藏扇區(qū)數(shù)(本表中所描述的)來決定根目錄從哪里開始。該計(jì)算機(jī)還可以從目錄中的項(xiàng)數(shù)決定該分區(qū)的用戶數(shù)據(jù)區(qū)從哪里開始0x2820x00擴(kuò)展標(biāo)志(ExtendedFlag)(只被FAT32使用)該兩個(gè)字節(jié)結(jié)構(gòu)中各位的值為:位0-3:活動(dòng)FAT數(shù)(從0開始計(jì)數(shù),而不是1).只有在不使用鏡像

25、時(shí)才有效位4-6:保留位7:0值意味著在運(yùn)行時(shí)FAT被映射到所有的FAT1值表示只有一個(gè)FAT是活動(dòng)的位8-15:保留0x2A20x0000文件系統(tǒng)版本(FileystemVersion)只供FAT32使用,高字節(jié)是主要的修訂號(hào),而低字節(jié)是次要的修訂號(hào)。本字段支持將來對(duì)該FAT32媒體類型進(jìn)行擴(kuò)展。如果本字段非零,以前的Windows版本將不支持這樣的分區(qū)0x2C40x00000002根目錄簇號(hào)(RootClusterNumber)(只供FAT32使用)根目錄第一簇的簇號(hào)。本字段的值一般為2,但不總是如此0x3020x0001文件系統(tǒng)信息扇區(qū)號(hào)(FileSystemInformationSec

26、torNumber)(只供FAT32使用)FAT32分區(qū)的保留區(qū)中的文件系統(tǒng)信息(FileSystemInformation,FSINFO)結(jié)構(gòu)的扇區(qū)號(hào)。其值一般為1。在備份引導(dǎo)扇區(qū)(BackupBootSector)中保留了該FSINFO結(jié)構(gòu)的一個(gè)副本,但是這個(gè)副本不保持更新0x3420x0006備份引導(dǎo)扇區(qū)(只供FAT32使用)為一個(gè)非零值,這個(gè)非零值表示該分區(qū)保存引導(dǎo)扇區(qū)的副本的保留區(qū)中的扇區(qū)號(hào)。本字段的值一般為6,建議不要使用其他值0x361212個(gè)字節(jié)均為0x00保留(只供FAT32使用)供以后擴(kuò)充使用的保留空間。本字段的值總為0表5FAT32分區(qū)的擴(kuò)展BPB字段字節(jié)位移字段長(zhǎng)度(字

27、節(jié))圖8對(duì)應(yīng)取值字段名稱和定義0x4010x80物理驅(qū)動(dòng)器號(hào)(PhysicalDriveNumber)與BIOS物理驅(qū)動(dòng)器號(hào)有關(guān)。軟盤驅(qū)動(dòng)器被標(biāo)識(shí)為0x00,物理硬盤被標(biāo)識(shí)為0x80,而與物理磁盤驅(qū)動(dòng)器無關(guān)。一般地,在發(fā)出一個(gè)INT13hBIOS調(diào)用之前設(shè)置該值,具體指定所訪問的設(shè)備。只有當(dāng)該設(shè)備是一個(gè)引導(dǎo)設(shè)備時(shí),這個(gè)值才有意義0x4110x00保留(Reserved)FAT32分區(qū)總是將本字段的值設(shè)置為00x4210x29擴(kuò)展引導(dǎo)標(biāo)簽(ExtendedBootSignature)本字段必須要有能被Windows2000所識(shí)別的值0x28或0x290x4340x33391CFE分區(qū)序號(hào)(Vol

28、umeSerialNumber)在格式化磁盤時(shí)所產(chǎn)生的一個(gè)隨機(jī)序號(hào),它有助于區(qū)分磁盤0x4711"NONAME"卷標(biāo)(VolumeLabel)本字段只能使用一次,它被用來保存卷標(biāo)號(hào)。現(xiàn)在,卷標(biāo)被作為一個(gè)特殊文件保存在根目錄中0x528"FAT32"系統(tǒng)ID(SystemID)FAT32文件系統(tǒng)中一般取為"FAT32"DBR的偏移0x5A開始的數(shù)據(jù)為操作系統(tǒng)引導(dǎo)代碼。這是由偏移0x00開始的跳轉(zhuǎn)指令所指向的。在圖8所列出的偏移0x000x02的跳轉(zhuǎn)指令"EB5890"清楚地指明了OS引導(dǎo)代碼的偏移位置。jump58H

29、加上跳轉(zhuǎn)指令所需的位移量,即開始于0x5A。此段指令在不同的操作系統(tǒng)上和不同的引導(dǎo)方式上,其內(nèi)容也是不同的。大多數(shù)的資料上都說win98,構(gòu)建于fat基本分區(qū)上的win2000,winxp所使用的DBR只占用基本分區(qū)的第0扇區(qū)。他們提到,對(duì)于fat32,一般的32個(gè)基本分區(qū)保留扇區(qū)只有第0扇區(qū)是有用的。實(shí)際上,以FAT32構(gòu)建的操作系統(tǒng)如果是win98,系統(tǒng)會(huì)使用基本分區(qū)的第0扇區(qū)和第2扇區(qū)存儲(chǔ)os引導(dǎo)代碼;以FAT32構(gòu)建的操作系統(tǒng)如果是win2000或winxp,系統(tǒng)會(huì)使用基本分區(qū)的第0扇區(qū)和第0xC扇區(qū)(win2000或winxp,其第0xC的位置由第0扇區(qū)的0xAB偏移指出)存儲(chǔ)os引

30、導(dǎo)代碼。所以,在fat32分區(qū)格式上,如果DBR一扇區(qū)的內(nèi)容正確而缺少第2扇區(qū)(win98系統(tǒng))或第0xC扇區(qū)(win2000或winxp系統(tǒng)),系統(tǒng)也是無法啟動(dòng)的。如果自己手動(dòng)設(shè)置NTLDR雙系統(tǒng),必須知道這一點(diǎn)。DBR扇區(qū)的最后兩個(gè)字節(jié)一般存儲(chǔ)值為0x55AA的DBR有效標(biāo)志,對(duì)于其他的取值,系統(tǒng)將不會(huì)執(zhí)行DBR相關(guān)指令。上面提到的其他幾個(gè)參與os引導(dǎo)的扇區(qū)也需以0x55AA為合法結(jié)束標(biāo)志。FAT16DBR:FAT32中DBR的含義大致如此,對(duì)于FAT12和FAT16其基本意義類似,只是相關(guān)偏移量和參數(shù)意義有小的差異。我將FAT16的扇區(qū)參數(shù)意義列表。和FAT32大同小異的。表6一個(gè)FAT

31、16分區(qū)上的引導(dǎo)扇區(qū)段字節(jié)位移字段長(zhǎng)度(字節(jié))字段名稱0x003跳轉(zhuǎn)指令(JumpInstruction)0x038OEMID0x0B25BPB0x2426擴(kuò)展BPB0x3E448引導(dǎo)程序代碼(BootstrapCode)0x01FE4扇區(qū)結(jié)束標(biāo)識(shí)符(0x55AA)表7FAT16分區(qū)的BPB字段字節(jié)位移字段長(zhǎng)度(字節(jié))例值名稱和定義0x0B20x0200扇區(qū)字節(jié)數(shù)(BytesPerSector)硬件扇區(qū)的大小。本字段合法的十進(jìn)制值有512、1024、2048和4096。對(duì)大多數(shù)磁盤來說,本字段的值為5120x0D10x40每簇扇區(qū)數(shù)(SectorsPerCluster)一個(gè)簇中的扇區(qū)數(shù)。由于F

32、AT16文件系統(tǒng)只能跟蹤有限個(gè)簇(最多為65536個(gè))。因此,通過增加每簇的扇區(qū)數(shù)可以支持最大分區(qū)數(shù)。分區(qū)的缺省的簇的大小取決于該分區(qū)的大小。本字段合法的十進(jìn)制值有1、2、4、8、16、32、64和128。導(dǎo)致簇大于32KB(每扇區(qū)字節(jié)數(shù)*每簇扇區(qū)數(shù))的值會(huì)引起磁盤錯(cuò)誤和軟件錯(cuò)誤0x0e20x0001保留扇區(qū)數(shù)(ReservedSector)第一個(gè)FAT開始之前的扇區(qū)數(shù),包括引導(dǎo)扇區(qū)。本字段的十進(jìn)制值一般為10x1010x02FAT數(shù)(NumberofFAT)該分區(qū)上FAT的副本數(shù)。本字段的值一般為20x1120x0200根目錄項(xiàng)數(shù)(RootEntries)能夠保存在該分區(qū)的根目錄文件夾中的3

33、2個(gè)字節(jié)長(zhǎng)的文件和文件夾名稱項(xiàng)的總數(shù)。在一個(gè)典型的硬盤上,本字段的值為512。其中一個(gè)項(xiàng)常常被用作卷標(biāo)號(hào)(VolumeLabel),長(zhǎng)名稱的文件和文件夾每個(gè)文件使用多個(gè)項(xiàng)。文件和文件夾項(xiàng)的最大數(shù)一般為511,但是如果使用的長(zhǎng)文件名,往往都達(dá)不到這個(gè)數(shù)0x1320x0000小扇區(qū)數(shù)(SmallSector)該分區(qū)上的扇區(qū)數(shù),表示為16位(<65536)。對(duì)大于65536個(gè)扇區(qū)的分區(qū)來說,本字段的值為0,而使用大扇區(qū)數(shù)來取代它0x1510xF8媒體描述符(MediaDescriptor)提供有關(guān)媒體被使用的信息。值0xF8表示硬盤,0xF0表示高密度的3.5寸軟盤。媒體描述符要用于MS-DO

34、SFAT16磁盤,在Windows2000中未被使用0x1620x00FC每FAT扇區(qū)數(shù)(SectorsPerFAT)該分區(qū)上每個(gè)FAT所占用的扇區(qū)數(shù)。計(jì)算機(jī)利用這個(gè)數(shù)和FAT數(shù)以及隱藏扇區(qū)數(shù)來決定根目錄在哪里開始。計(jì)算機(jī)還可以根據(jù)根目錄中的項(xiàng)數(shù)(512)決定該分區(qū)的用戶數(shù)據(jù)區(qū)從哪里開始0x1820x003F每道扇區(qū)數(shù)(SectorsPerTrark)0x1A20x0040磁頭數(shù)(Numberofhead)0x1C40x0000003F隱藏扇區(qū)數(shù)(HiddenSector)該分區(qū)上引導(dǎo)扇區(qū)之前的扇區(qū)數(shù)。在引導(dǎo)序列計(jì)算到根目錄和數(shù)據(jù)區(qū)的絕對(duì)位移的過程中使用了該值0x2040x003EF001大扇

35、區(qū)數(shù)(LargeSector)如果小扇區(qū)數(shù)字段的值為0,本字段就包含該FAT16分區(qū)中的總扇區(qū)數(shù)。如果小扇區(qū)數(shù)字段的值不為0,那么本字段的值為0表8FAT16分區(qū)的擴(kuò)展BPB字段字節(jié)位移字段長(zhǎng)度(字節(jié))圖8對(duì)應(yīng)取值字段名稱和定義0x2410x80物理驅(qū)動(dòng)器號(hào)(PhysicalDriveNumber)與BIOS物理驅(qū)動(dòng)器號(hào)有關(guān)。軟盤驅(qū)動(dòng)器被標(biāo)識(shí)為0x00,物理硬盤被標(biāo)識(shí)為0x80,而與物理磁盤驅(qū)動(dòng)器無關(guān)。一般地,在發(fā)出一個(gè)INT13hBIOS調(diào)用之前設(shè)置該值,具體指定所訪問的設(shè)備。只有當(dāng)該設(shè)備是一個(gè)引導(dǎo)設(shè)備時(shí),這個(gè)值才有意義0x2510x00保留(Reserved)FAT16分區(qū)一般將本字段的值

36、設(shè)置為00x2610x29擴(kuò)展引導(dǎo)標(biāo)簽(ExtendedBootSignature)本字段必須要有能被Windows2000所識(shí)別的值0x28或0x290x2720x52368BA8卷序號(hào)(VolumeSerialNumber)在格式化磁盤時(shí)所產(chǎn)生的一個(gè)隨機(jī)序號(hào),它有助于區(qū)分磁盤0x2B11"NONAME"卷標(biāo)(VolumeLabel)本字段只能使用一次,它被用來保存卷標(biāo)號(hào)?,F(xiàn)在,卷標(biāo)被作為一個(gè)特殊文件保存在根目錄中0x368"FAT16"文件系統(tǒng)類型(FileSystemType)根據(jù)該磁盤格式,該字段的值可以為FAT、FAT12或FAT164.2關(guān)于

37、保留扇區(qū)在上述FAT文件系統(tǒng)DBR的偏移0x0E處,用2個(gè)字節(jié)存儲(chǔ)保留扇區(qū)的數(shù)目。所謂保留扇區(qū)(有時(shí)候會(huì)叫系統(tǒng)扇區(qū),隱藏扇區(qū)),是指從分區(qū)DBR扇區(qū)開始的僅為系統(tǒng)所有的扇區(qū),包括DBR扇區(qū)。在FAT16文件系統(tǒng)中,保留扇區(qū)的數(shù)據(jù)通常設(shè)置為1,即僅僅DBR扇區(qū)。而在FAT32中,保留扇區(qū)的數(shù)據(jù)通常取為32,有時(shí)候用PartitionMagic分過的FAT32分區(qū)會(huì)設(shè)置36個(gè)保留扇區(qū),有的工具可能會(huì)設(shè)置63個(gè)保留扇區(qū)。FAT32中的保留扇區(qū)除了磁盤總第0扇區(qū)用作DBR,總第2扇區(qū)(win98系統(tǒng))或總第0xC扇區(qū)(win2000,winxp)用作OS引導(dǎo)代碼擴(kuò)展部分外,其余扇區(qū)都不參與操作系統(tǒng)管理

38、與磁盤數(shù)據(jù)管理,通常情況下是沒作用的。操作系統(tǒng)之所以在FAT32中設(shè)置保留扇區(qū),是為了對(duì)DBR作備份或留待以后升級(jí)時(shí)用。FAT32中,DBR偏移0x34占2字節(jié)的數(shù)據(jù)指明了DBR備份扇區(qū)所在,一般為0x06,即第6扇區(qū)。當(dāng)FAT32分區(qū)DBR扇區(qū)被破壞導(dǎo)致分區(qū)無法訪問時(shí)??梢杂玫?扇區(qū)的原備份替換第0扇區(qū)來找回?cái)?shù)據(jù)。43FAT表和數(shù)據(jù)的存儲(chǔ)原則。FAT表(FileAllocationTable文件分配表),是Microsoft在FAT文件系統(tǒng)中用于磁盤數(shù)據(jù)(文件)索引和定位引進(jìn)的一種鏈?zhǔn)浇Y(jié)構(gòu)。假如把磁盤比作一本書,F(xiàn)AT表可以認(rèn)為相當(dāng)于書中的目錄,而文件就是各個(gè)章節(jié)的內(nèi)容。但FAT表的表示方法

39、卻與目錄有很大的不同。在FAT文件系統(tǒng)中,文件的存儲(chǔ)依照FAT表制定的簇鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)來進(jìn)行。同時(shí),F(xiàn)AT文件系統(tǒng)將組織數(shù)據(jù)時(shí)使用的目錄也抽象為文件,以簡(jiǎn)化對(duì)數(shù)據(jù)的管理。存儲(chǔ)過程假想:我們模擬對(duì)一個(gè)分區(qū)存儲(chǔ)數(shù)據(jù)的過程來說明FAT文件系統(tǒng)中數(shù)據(jù)的存儲(chǔ)原則。假定現(xiàn)在有一個(gè)空的完全沒有存放數(shù)據(jù)的磁盤,大小為100KB,我們將其想象為線形的空間地址。為了存儲(chǔ)管理上的便利,我們?nèi)藶榈膶⑦@100KB的空間均分成100份,每份1KB。我們來依次存儲(chǔ)這樣幾個(gè)文件:A.TXT(大小10KB),B.TXT(大小53.6KB),C.TXT(大小20.5KB)。最起碼能夠想到,我們可以順序的在這100KB空間中存放這3

40、個(gè)文件。同時(shí)不要忘了,我們還要記下他們的大小和開始的位置,這樣下次要用時(shí)才能找的到,這就像是目錄。為了便于查找,我們假定用第1K的空間來存儲(chǔ)他們的特征(屬性)。還有,我們?cè)O(shè)計(jì)的存儲(chǔ)單位是1KB,所以,A.TXT我們需要10個(gè)存儲(chǔ)單位(為了說明方便,我們把存儲(chǔ)單位叫做“簇”吧。也能少打點(diǎn)字,呵呵。),B.TXT需要54個(gè)簇,C.TXT需要21個(gè)簇。可能有人會(huì)說B.TXT和C.TXT不是各自浪費(fèi)了不到1簇的空間嗎?干嘛不讓他們緊挨著,不是省地方嗎?我的回答是,如果按照這樣的方式存儲(chǔ),目錄中原本只需要記下簇號(hào),現(xiàn)在還需要記下簇內(nèi)的偏移,這樣會(huì)增加目錄的存儲(chǔ)量,而且存取沒有了規(guī)則,讀取也不太方便,是得不償失的。根據(jù)上面所說的思想,我們?cè)O(shè)計(jì)了這樣的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論