閱讀978 返回首頁    go 技術社區[雲棲]


FAT32文件係統的存儲組織結構(二)

  前麵已經基於一個格式化的空U盤分析了一下FAT32文件係統存儲的組織結構,下麵我們從文件操作的角度來分析一下文件係統的運作機製。由於換了個U盤,所以仍然貼出剛格式化的空U盤的幾個重要的數據區如下:

DBR FDT_DN

根目錄_DN

我們可以看出,在分區格式化的時候,係統將卷標TEST_FAT32存儲在2號簇,即跟目錄區,如上麵根目錄貼圖所示。同時,在FDT區2號簇標記位置寫入了文件結束符FF FF FF 0F。顯然,FAT32文件係統將目錄當做普通文件來處理的。

下麵我們在根目錄下新建一個文件夾TEST1,看會有什麼變化:

建立了TEST1文件夾後,FDT變成如下:

FDT_TEST1

根目錄變成如下:

根目錄2

重新分配了3號簇:

3號簇_NEW

從上麵的變化可以直觀的看出,係統在新建文件夾時完成了如下動作:

     a.在父目錄所在簇上建立新的目錄項,存儲當前所建文件夾信息。

     b.分配一個新簇,給新建的文件夾建立兩個目錄項:父目錄和當前目錄。

     c.在FDT表中新分配的簇對應的位置上寫下文件結束符。

     d.建立各部分的鏈路關係:新建文件夾所對應的目錄項的文件起始簇號字段寫上新分配簇的簇號,新簇上的兩個目錄項的文件起始簇號字段分配寫上父目錄所在簇號(此處是0,本來我以為是2,即根目錄所在簇,不知道為什麼,可能特地用0指示根目錄吧)和當前簇號(此處是3)。

為了驗證我們上麵分析的正確性,我們再在TEST1文件夾下建立新文件夾TEST11,看是否做了如下操作:

      a.在父目錄(即TEST1)所在簇(即3號簇)上建立新的目錄項,存儲TEST11文件夾信息。

     b.分配一個新簇(應該是4號簇),給新建的文件夾(即TEST11)建立兩個目錄項:父目錄和當前目錄。

     c.在FDT表中新分配的簇(應該是4號簇)對應的位置上寫下文件結束符。

     d.建立各部分的鏈路關係:新建文件夾(即TEST11)所對應的目錄項的文件起始簇號字段寫上新分配簇的簇號(應該是4號簇),,新簇上的兩個目錄項的文件起始簇號字段分配寫上父目錄所在簇號(3號簇)和當前簇號(應該是4號簇)。

新建TEST11文件夾後FDT變成:

FDT_TEST11

根目錄沒有變化:

根目錄2

3號簇變成:

3號簇

新分配4號簇:

4號簇

顯然我們的估計沒有錯的,也進一步證明我們前麵的分析是正確的。

下麵我們再分析建立文件的情況

我們先建立一個100字節的文件TEST.TXT,然後把這個文件拷貝到U盤的根目錄下,FDT變成如下:

FDT

根目錄變成:

根目錄

新分配5號簇保存文件內容:

5號簇

從上麵的變化可以直觀的看出,係統新建文件和新建文件夾所完成的操作是一樣一樣的:

     a.在父目錄所在簇上建立新的目錄項,存儲當前所建文件信息。

     b.分配一個新簇,存儲新建的文件的內容。

     c.在FDT表中新分配的簇對應的位置上寫下文件結束符。

     d.建立鏈路關係:新建文件所對應的目錄項的文件起始簇號字段寫上新分配簇的簇號。

結束總結:

      1.在FAT32文件係統中,目錄和文件的存儲采用統一的方式。

      2.文件係統的操作的單位是簇,每新建立一個文件或文件夾,至少會重新分配一個簇號。

      3.如果一個文件或目錄的內容要多個簇才能存儲得下,則係統會分配多個簇來存儲文件或目錄的內容

      4.當需要多個簇時,這些簇可能連續也可能不連續,但無論是連續或是不連續,係統都是采用FDT鏈表的形式來組織的。

最後更新:2017-04-03 05:40:04

  上一篇:go 為何我會喜歡封閉的apple?
  下一篇:go Swift泛型和泛型函數