iT邦幫忙

DAY 24
5

檔案系統的設計與效能系列 第 24

檔案系統的設計與效能 - Block Allocation

前面的章節,我們花了不少功夫來認識檔案系統的基礎設計,並比較了多種檔案系統的特點。接下來的章節,我們要從實作的角度來看看檔案系統的設計方法。
前面的章節,我們花了不少功夫來認識檔案系統的基礎設計,並比較了多種檔案系統的特點。接下來的章節,我們要從實作的角度來看看檔案系統的設計方法。

若是以最簡單的設計來說,對檔案系統而言,磁碟就是一連串的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。

系列文章


上一篇
檔案系統的設計與效能 - ZFS
下一篇
檔案系統的設計與效能 - Superblock
系列文
檔案系統的設計與效能32

尚未有邦友留言

立即登入留言