男人吃奶摸下挵进去好爽,日日躁夜夜躁狠狠躁,freesexvide0s性欧美高清,高清freexxxx性国产,无码人妻一区二区三区一,乱人伦中文字幕成人网站在线,亚洲欧美综合一区二区三区 ,神马影院在线视频观看
知識學堂
  • ·聯系電話:+86.023-75585550
  • ·聯系傳真:+86.023-75585550
  • ·24小時手機:13896886023
  • ·QQ 咨 詢:361652718 513960520
當前位置 > 首頁 > 知識學堂 > 常見技術問題
FAT32存儲原理
更新時間:2012-02-19 | 發布人:本站 | 點擊率:701

FAT32存儲原理:

  FAT32是個非常有功勞的文件系統,Microsoft成功地設計并運用了它,直到今天NTFS鋪天蓋地襲來的時候,FAT32依然占據著Microsoft Windows文件系統中重要的地位。FAT32最早是出于FAT16不支持大分區、單位簇容量大以致空間急劇浪費等缺點設計的。實際應用中,FAT32還是成功的。
  FAT32與FAT16的原理基本上是相同的,圖4.3.12標出了FAT32分區的基本構成。
 

圖4.3.12 Fat32的組織形式
引導扇區  其余保留扇區  FAT1  FAT2(重復的)  根文件夾首簇  其他文件夾及所有文件  剩余扇區
1扇區    31個扇區 實際情況取大小 同FAT1     第2簇                不足一簇
    保留扇區                       ┗━━━━━━━━數據區━━━━━━━━┛

  FAT32在格式化的過程中就根據分區的特點構建好了它的DBR,其中BPB參數是很重要的,可以回過頭來看一下表4和表5。首先FAT32保留扇區的數目默認為32個,而不是FAT16的僅僅一個。這樣的好處是有助于磁盤DBR指令的長度擴展,而且可以為DBR扇區留有備份空間。上面我們已經提到,構建在FAT32上的win98或win2000、winXP,其操作系統引導代碼并非只占一個扇區了。留有多余的保留扇區就可以很好的拓展OS引導代碼。在BPB中也記錄了DBR扇區的備份扇區編號。備份扇區可以讓我們在磁盤遭到意外破壞時恢復DBR。
  FAT32的文件分配表的數據結構依然和FAT16相同,所不同的是,FAT32將記錄簇鏈的二進制位數擴展到了32位,故而這種文件系統稱為FAT32。32位二進制位的簇鏈決定了FAT表最大可以尋址2T個簇。這樣即使簇的大小為1扇區,理論上仍然能夠尋址1TB范圍內的分區。但實際中FAT32是不能尋址這樣大的空間的,隨著分區空間大小的增加,FAT表的記錄數會變得臃腫不堪,嚴重影響系統的性能。所以在實際中通常不格式化超過32GB的FAT32分區。WIN2000及之上的OS已經不直接支持對超過32GB的分區格式化成FAT32,但WIN98依然可以格式化大到127GB的FAT32分區,但這樣沒必要也不推薦。同時FAT32也有小的限制,FAT32卷必須至少有65527個簇,所以對于小的分區,仍然需要使用FAT16或FAT12。
  分區變大時,如果簇很小,文件分配表也隨之變大。仍然會有上面的效率問題存在。既要有效地讀寫大文件,又要最大可能的減少空間的浪費。FAT32同樣規定了相應的分區空間對應的簇的大小,見表12:
 

表12  FAT32分區大小與對因簇大小
分區空間大小   每個簇的扇區   簇空間大小
<8GB         8       4k
>=8GB且<16GB    16      8k
>=16GB且<32GB   32      16k
>=32GB       64       32k

  簇的取值意義和FAT16類似,不過是位數長了點罷了,比較見表13:
 

表13 FAT各系統記錄項的取值含義(16進制)
FAT12記錄項的取值   FAT16記錄項的取值   FAT32記錄項的取值   對應簇的表現情況
000             0000        00000000       未分配的簇
002~FFF         0002~FFEF     00000002~FFFFFFEF   已分配的簇
FF0~FF6         FFF0~FFF6      FFFFFFF0~FFFFFFF6   系統保留
FF7             FFF7         FFFFFFF7         壞簇
FF8~FFF         FFF8~FFFF      FFFFFFF8~FFFFFFFF   文件結束簇

  FAT32的另一項重大改革是根目錄的文件化,即將根目錄等同于普通的文件。這樣根目錄便沒有了FAT16中512個目錄項的限制,不夠用的時候增加簇鏈,分配空簇即可。而且,根目錄的位置也不再硬性地固定了,可以存儲在分區內可尋址的任意簇內,不過通常根目錄是最早建立的(格式化就生成了)目錄表。所以,我們看到的情況基本上都是根目錄首簇占簇區順序上的第1個簇。在圖4.3.12中也是按這種情況制作的畫的。
  FAT32對簇的編號依然同FAT16。順序上第1個簇仍然編號為第2簇,通常為根目錄所用(這和FAT16是不同的,FAT16的根目錄并不占簇區空間,32個扇區的根目錄以后才是簇區第1個簇) 
  FAT32的文件尋址方法與FAT16相同,但目錄項的各字節參數意義卻與FAT16有所不同,一方面它啟用了FAT16中的目錄項保留字段,同時又完全支持長文件名了。
  對于短文件格式的目錄項。其參數意義見表14:
 

表14   FAT32短文件目錄項32個字節的表示定義
字節偏移(16進制)      字節數      定義
0x0~0x7           8      文件名
0x8~0xA           3      擴展名
0xB*             1      屬性字節 00000000(讀寫)
                           00000001(只讀)
                           00000010(隱藏)
                           00000100(系統)
                           00001000(卷標)
                           00010000(子目錄)
                           00100000(歸檔)
0xC              1      系統保留
0xD              1      創建時間的10毫秒位
0xE~0xF           2       文件創建時間
0x10~0x11          2      文件創建日期
0x12~0x13          2      文件最后訪問日期
0x14~0x15          2      文件起始簇號的高16位 
0x16~0x17          2      文件的最近修改時間
0x18~0x19          2      文件的最近修改日期
0x1A~0x1B          2      文件起始簇號的低16位
0x1C~0x1F          4      表示文件的長度

   * 此字段在短文件目錄項中不可取值0FH,如果設值為0FH,目錄段為長文件名目錄段
說明:
  (1)、這是FAT32短文件格式目錄項的意義。其中文件名、擴展名、時間、日期的算法和FAT16時相同的。
  (2)、由于FAT32可尋址的簇號到了32位二進制數。所以系統在記錄文件(文件夾)開始簇地址的時候也需要32位來記錄,FAT32啟用目錄項偏移0x12~0x13來表示起始簇號的高16位。
  (3)、文件長度依然用4個字節表示,這說明FAT32依然只支持小于4GB的文件(目錄),超過4GB的文件(目錄),系統會截斷處理。
  FAT32的一個重要的特點是完全支持長文件名。長文件名依然是記錄在目錄項中的。為了低版本的OS或程序能正確讀取長文件名文件,系統自動為所有長文件名文件創建了一個對應的短文件名,使對應數據既可以用長文件名尋址,也可以用短文件名尋址。不支持長文件名的OS或程序會忽略它認為不合法的長文件名字段,而支持長文件名的OS或程序則會以長文件名為顯式項來記錄和編輯,并隱藏起短文件名。
  當創建一個長文件名文件時,系統會自動加上對應的短文件名,其一般有的原則:
  (1)、取長文件名的前6個字符加上"~1"形成短文件名,擴展名不變。
  (2)、如果已存在這個文件名,則符號"~"后的數字遞增,直到5。
  (3)、如果文件名中"~"后面的數字達到5,則短文件名只使用長文件名的前兩個字母。通過數學操縱長文件名的剩余字母生成短文件名的后四個字母,然后加后綴"~1"直到最后(如果有必要,或是其他數字以避免重復的文件名)。
  (4)、如果存在老OS或程序無法讀取的字符,換以"_"
  長文件名的實現有賴于目錄項偏移為0xB的屬性字節,當此字節的屬性為:只讀、隱藏、系統、卷標,即其值為0FH時,DOS和WIN32會認為其不合法而忽略其存在。這正是長文件名存在的依據。將目錄項的0xB置為0F,其他就任由系統定義了,Windows9x或Windows 2000、XP通常支持不超過255個字符的長文件名。系統將長文件名以13個字符為單位進行切割,每一組占據一個目錄項。所以可能一個文件需要多個目錄項,這時長文件名的各個目錄項按倒序排列在目錄表中,以防與其他文件名混淆。
  長文件名中的字符采用unicode形式編碼(一個巨大的進步哦),每個字符占據2字節的空間。其目錄項定義如表15。
 

表15   FAT32長文件目錄項32個字節的表示定義
字節偏移
(16進制)      字節數      定義
0x0         1        屬性字節位意義 7 保留未用
                           6 1表示長文件最后一個目錄項
                           5 保留未用
                           4 順序號數值
                           3
                           2
                           1
                           0
0x1~0xA      10       長文件名unicode碼①
0xB         1        長文件名目錄項標志,取值0FH
0xC         1        系統保留
0xD         1        校驗值(根據短文件名計算得出)
0xE~0x19     12        長文件名unicode碼②
0x1A~0x1B     2        文件起始簇號(目前常置0) 
0x1C~0x1F     4        長文件名unicode碼③

  系統在存儲長文件名時,總是先按倒序填充長文件名目錄項,然后緊跟其對應的短文件名。從表15可以看出,長文件名中并不存儲對應文件的文件開始簇、文件大小、各種時間和日期屬性。文件的這些屬性還是存放在短文件名目錄項中,一個長文件名總是和其相應的短文件名一一對應,短文件名沒有了長文件名還可以讀,但長文件名如果沒有對應的短文件名,不管什么系統都將忽略其存在。所以短文件名是至關重要的。在不支持長文件名的環境中對短文件名中的文件名和擴展名字段作更改(包括刪除,因為刪除是對首字符改寫E5H),都會使長文件名形同虛設。長文件名和短文件名之間的聯系光靠他們之間的位置關系維系顯然遠遠不夠。其實,長文件名的0xD字節的校驗和起很重要的作用,此校驗和是用短文件名的11個字符通過一種運算方式來得到的。系統根據相應的算法來確定相應的長文件名和短文件名是否匹配。這個算法不太容易用公式說明,我們用一段c程序來加以說明。
  假設文件名11個字符組成字符串shortname[],校驗和用chknum表示。得到過程如下:

int i,j,chknum=0;
  for (i=11; i>0; i--)
  chksum = ((chksum & 1) ? 0x80 : 0) + (chksum >> 1) + shortname[j++];
  如果通過短文件名計算出來的校驗和與長文件名中的0xD偏移處數據不相等。系統無論如何都不會將它們配對的。依據長文件名和短文件名對目錄項的定義,加上對簇的編號和鏈接,FAT32上數據的讀取便游刃有余了。

 

分享到: QQ空間 新浪微博 開心網 人人網
相關文章
主站蜘蛛池模板: 毛片免费视频在线观看| 成人区人妻精品一区二区三区| 色欲人妻综合aaaaaaaa网| 色哟哟在线视频精品一区| 同性男男黄gay片免费| 亚洲三级黄色大片| 国产精品国三级国产av| 爱啪啪av网| 一本久道久久综合久久爱| 啦啦啦高清视频在线观看免费| 丝袜+欧美+国产| 东北妇女bbw| 疯狂添女人下部视频免费| 我的乳在厨房被揉搓| 天天躁夜夜躁狠狠综合| 人妻精品无码一区二区三区| 真实单亲乱l仑对白视频| 爱如潮水在线观看视频| 年轻女教师免费观看| 久久久久久人妻精品一区| 亚洲av无码乱码国产麻豆穿越| 少妇人妻88久久中文字幕| 四虎影视4hu4虎成人| 亚洲精品97久久中文字幕无码 | 国产免费视频| 亚洲欧美一区二区三区在线| 18禁床震无遮掩视频| 欧美第一黄网免费网站| 亚洲日韩av一区二区三区四区| 国产欧美va欧美va香蕉在线| 中文天堂资源| 色综合久久久久无码专区| 99久久久无码国产精品免费| 久久精品人人做人人爽老司机| av无码久久久久不卡蜜桃| 仙踪林果冻传媒一区二区| 妓院一钑片免看黄大片| 中文无码熟妇人妻av在线| 给我免费观看片在线| 三级4级全黄| 十八禁在线观看视频播放免费|