前面的章節,我們花了不少功夫來認識檔案系統的基礎設計,並比較了多種檔案系統的特點。接下來的章節,我們要從實作的角度來看看檔案系統的設計方法。
前面的章節,我們花了不少功夫來認識檔案系統的基礎設計,並比較了多種檔案系統的特點。接下來的章節,我們要從實作的角度來看看檔案系統的設計方法。
若是以最簡單的設計來說,對檔案系統而言,磁碟就是一連串的block,而要管理這連串的block,最直覺的作法就是array這種線性的資料結構了。通常disk block的大小是512bytes,而file system block是他的整數倍,如4096、8192 bytes等。雖然這兩者的關係並不一定如此,但是標新立異往往造成管理與搜尋的複雜度。
由於磁碟式隨機存取,所以disk block的使用情況並不連續,管理這些使用與未使用的block最簡單的方式就是bitmap。Bitmap指的是利用一個bit來代表一個disk block的使用情形,如果某bit = 1,則表示相對應的block已經是使用中。Bitmap也是一樣,以array的方式來儲存。而且儲存在superblock之後。
之前提過chunk的概念,就是檔案系統會將多個block分成一組組來存取,以增進效能,所以又稱為allocation group。在實作上,檔案系統要取用一組block時,要記錄他所屬的allocation group、要取用多少block、以及block的起始位址。如下列虛擬碼所示:
typedef struct block_run
{
int32 allocation_group;
uint16 start;
uint16 len;
} block_run;
這裡採用16 bit的sunsigned integer,代表allocation group限制最多只有65536個block。