FAT檔案系統原理 三

2021-04-13 01:40:27 字數 2382 閱讀 6164

4.3  fat表和資料的儲存原則。

fat表(file allocation table 檔案分配表),是microsoft在fat檔案系統中用於磁碟資料(檔案)索引和定位引進的一種鏈式結構。假如把磁碟比作一本書,fat表可以認為相當於書中的目錄,而檔案就是各個章節的內容。但fat表的表示方法卻與目錄有很大的不同。

在fat檔案系統中,檔案的儲存依照fat表制定的簇鏈式資料結構來進行。同時,fat檔案系統將組織資料時使用的目錄也抽象為檔案,以簡化對資料的管理。

★儲存過程假想:

我們模擬對乙個分割槽儲存資料的過程來說明fat檔案系統中資料的儲存原則。

假定現在有乙個空的完全沒有存放資料的磁碟,大小為100kb,我們將其想象為線形的空間位址。為了儲存管理上的便利,我們人為的將這100kb的空間均分成100份,每份1kb。我們來依次儲存這樣幾個檔案:a.txt(大小10kb),b.txt(大小53.6kb),c.txt(大小20.5kb)。

最起碼能夠想到,我們可以順序的在這100kb空間中存放這3個檔案。同時不要忘了,我們還要記下他們的大小和開始的位置,這樣下次要用時才能找的到,這就像是目錄。為了便於查詢,我們假定用第1k的空間來儲存他們的特徵(屬性)。還有,我們設計的儲存單位是1kb,所以,a.txt我們需要10個儲存單位(為了說明方便,我們把儲存單位叫做「簇」吧。也能少打點字,呵呵。),b.txt需要54個簇,c.txt需要21個簇。可能有人會說b.txt和c.txt不是各自浪費了不到1簇的空間嗎?幹嘛不讓他們緊挨著,不是省地方嗎?我的回答是,如果按照這樣的方式儲存,目錄中原本只需要記下簇號,現在還需要記下簇內的偏移,這樣會增加目錄的儲存量,而且訪問沒有了規則,讀取也不太方便,是得不償失的 

根據上面所說的思想,我們設計了這樣的圖4.3.1所示的儲存方式。

我們再考慮如何來寫這三個檔案的目錄。對於每個檔案而言,一定要記錄的有:檔名,開始簇,大小,建立日期、時間,修改日期、時間,檔案的讀寫屬性等。這裡大小能不能用結束簇來計算呢?一定不能,因為檔案的大小不一定就是整數個簇的大小,否則的話像b.txt的內容就是54kb的內容了,少了固然不行,可多了也是不行的。那麼我們怎麼記錄呢?可以想象一下。為了管理上的方便,我們用資料庫的管理方式來管理我們的目錄。於是我把1kb再分成10份,假定開始簇號為0,定義每份100b的各個位置的代表含義如圖4.3.2

這樣設計的結構絕對可以對檔案進行正確的讀寫了。接著讓我們設計的檔案系統工作吧。先改動個檔案,比如a.txt,增加點內容吧!咦?增加後往**放呀,雖然儲存塊的後面有很多空間,但緊隨其後b.txt的資料還頂著呢?要是把a.txt移到後邊太浪費處理資源,而且也不一定解決問題。這個問題看來暫時解決不了。

那我們換個操作,把b.txt刪了,b.txt的空間隨之釋放。這時候空間如圖4.3.3,目錄如圖4.3.4

這個操作看來還可以,我們接著做,在存入乙個檔案d.txt(大小為60.3kb),總共100簇的空間只用了31簇,還有68簇剩餘,按說能放下。可是?往那裡放呢?沒有61個連續的空間了,目錄行沒辦法寫了,看來無連續塊儲存暫時也不行。

你一定能夠想到我們可以在連續空間不夠或增加檔案長度的時候轉移影響我們操作的其他檔案,從而騰出空間來,但我要問你,那不是成天啥也不要幹了,就是倒騰東西了嗎?

看來我們設計的檔案系統有致命的漏洞,怎麼解決呢?。。。。

其實可以這樣解決:

首先我們允許檔案的不連續儲存。目錄中依然只記錄開始簇和檔案的大小。那麼我們怎麼記錄檔案占用那些簇呢,以檔案對映簇不太方便,因為檔名是不固定的。我們換個思想,可以用簇來對映檔案,在整個儲存空間的前部留下幾簇來記錄資料區中資料與簇號的關係。對於上例因為總空間也不大,所以用前部的1kb的空間來記錄這種對應,假設3個檔案都儲存,空間分配如圖4.3.5,同時修改一下目錄,如圖4.3.6

第一簇用來記錄資料區中每一簇的被占用情況,暫時稱其為檔案分配表。結合檔案分配表和檔案目錄就可以達到完全的檔案讀取了。我們想到,把檔案分配表做成乙個資料表,以圖4.3.7的形式記錄簇與資料的對應。

用圖4.3.7的組織方式是完全可以實現對檔案占有簇的記錄的。但還不夠效率。比如檔名在檔案分配表中記錄太多,浪費空間,而實際上在目錄中已經記錄了檔案的開始簇了。所以可以改良一下,用鏈的方式來存放占有簇的關係,變成圖4.3.8的組織方式。

參照圖4.3.8來理解一下檔案分配表的意義。如檔案a.txt我們根據目錄項中指定的a.txt的首簇為2,然後找到檔案分配表的第2簇記錄,上面登記的是3,我們就能確定下一簇是3。找到檔案分配表的第3簇記錄,上面登記的是4,我們就能確定下一簇是4......直到指到第11簇,發現下乙個指向是ff,就是結束。檔案便絲毫無誤讀取完畢。

我們再看上面提到的第三種情況,就是將b.txt刪除以後,存入乙個大小為60.3kb的d.txt。利用簇鏈可以很容易的實現。實現後的磁碟如圖4.3.9  4.3.10  4.3.11

上面是我們對檔案儲存的一種假設,也該揭開謎底的時候了。上面的思想其實就是fat檔案系統的思想的精髓(但並不是,尤其像具體的引數的意義與我們所舉的例子是完全不同的。請忘掉上邊細節,努力記憶下邊)。

FAT檔案系統原理 三

4.3 fat表和資料的儲存原則。fat表 file allocation table 檔案分配表 是microsoft在fat檔案系統中用於磁碟資料 檔案 索引和定位引進的一種鏈式結構。假如把磁碟比作一本書,fat表可以認為相當於書中的目錄,而檔案就是各個章節的內容。但fat表的表示方法卻與目錄有...

FAT檔案系統原理

一 硬碟的物理結構 硬碟儲存資料是根據電 磁轉換原理實現的。硬碟由乙個或幾個表面鍍有磁性物質的金屬或玻璃等物質碟片以及碟片兩面所安裝的磁頭和相應的控制電路組成 圖1 其中碟片和磁頭密封在無塵的金屬殼中。硬碟工作時,碟片以設計轉速高速旋轉,設定在碟片表面的磁頭則在電路控制下徑向移動到指定位置然後將資料...

FAT檔案系統原理

一 硬碟的物理結構 硬碟儲存資料是根據電 磁轉換原理實現的。硬碟由乙個或幾個表面鍍有磁性物質的金屬或玻璃等物質碟片以及碟片兩面所安裝的磁頭和相應的控制電路組成 圖1 其中碟片和磁頭密封在無塵的金屬殼中。硬碟工作時,碟片以設計轉速高速旋轉,設定在碟片表面的磁頭則在電路控制下徑向移動到指定位置然後將資料...