2014-11-20 87 views
0

我需要在C中創建自己的文件系統實現。我計劃創建類似於FAT系統的系統。我們獲得了一個大小爲10MB的文件,它充當我們自己的「磁盤」。我知道FAT表存儲簇號,根目錄存儲關於我們創建的每個文件的其他相關信息(例如文件名,大小,上次修改的日期和時間,FAT中的起始塊等)。但是我很困惑如何將簇號轉換爲磁盤上數據區域中的物理地址。內存轉換如何在FAT文件系統中工作?

例如,假設根目錄中的條目表示文件在FAT表中的塊100中開始,並且在FAT表的塊100中是整數327,這是文件的下一個簇位於。這些地址如何轉換爲磁盤數據區域中的物理地址?這些物理地址在哪裏翻譯和存儲?

+0

沒有。根目錄將有關文件的信息存儲在根目錄中。 FAT表存儲有關您的文件的元數據。起始簇,大小,文件名,等等等等等等。 – 2014-11-20 21:39:31

+0

如果您想模擬該體系結構,則可能需要查找FAT如何工作的舊DOS 3或4時代參考。我同意馬克,你不太對。 – 2014-11-20 21:57:43

回答

2

羣集在不同版本的FAT(FAT12,FAT16和FAT32)之間大小不同,但通常羣集編號指向現有文件系統格式中存在的任何大小的連續編號的羣集。我記得(從很久以前),至少在硬盤上,FAT12使用了2千字節的集羣(每個集羣由四個512字節扇區組成),最大集羣數量爲2^11(從零開始的12位),所以集羣327將從磁盤的數據區域的開始起爲327 * 2048個字節。

數據區包括FAT,備份FAT和所有目錄。我記得FAT中的每個集羣條目都包含一個指向佔據該集羣的文件中的下一個集羣的指針,如果它是文件的最後一個集羣的數據長度以及讀取或寫入該文件所需的一些其他信息,而目錄條目包含文件名,第一簇,大小/日期等等。

+0

這個答案與我所能找到的最相似。 FAT表不存儲特定於文件的元數據,但僅存儲指向鏈中下一個集羣的指針或EOC以指示文件的結尾。從我在其他地方找到的,FAT表中的第i個條目對應於數據區域中的第i個數據塊。 感謝您的幫助! – 2014-11-22 16:04:28

+0

很高興我能夠提供幫助。自從我使用扇區編輯器重建分區表和FAT以減少簇大小並通過減少顆粒浪費獲得空間 - 這是在30或40兆驅動器上,這已經很長時間了...... – 2014-11-23 12:17:49

+0

@ZeissIkon如何是2^11 = 12位?爲什麼不是十一? – Mohsin 2016-10-16 08:37:33

1

磁盤被劃分成扇區。硬盤例如具有512字節的扇區大小。在磁盤上尋址數據通常使用這些扇區,數據以這種大小的塊讀/寫。 FAT文件系統將多個扇區分組成簇。例如,每個羣集可以有8個扇區。此常數與分區前幾個扇區中有關文件系統的其他信息一起存儲。 FAT驅動程序使用此值從集羣編號計算扇區編號。式是這樣的:

SectorNumber = SectorsPerCluster *羣集號+恆定

常數是分區的數據區域的第一扇區的扇區號。您可以在FAT規範中找到確切的公式。

相關問題