iT邦幫忙

DAY 27
3

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

檔案系統的設計與效能 - Data Streams

i- node的作用是連結檔案與實體磁碟的關係,他的核心就是data stream。我們之前就提過的,在作業系統眼裡,檔案就是一串的bytes,也就是data stream,對檔案的I/O動作,也就是對data stream的動作。
i- node的作用是連結檔案與實體磁碟的關係,他的核心就是data stream。我們之前就提過的,在作業系統眼裡,檔案就是一串的bytes,也就是data stream,對檔案的I/O動作,也就是對data stream的動作,以下是data stream的資料結構:

#define NUM_DIRECT_BLOCKS 12
typedef struct data_stream
{
    block_run direct[NUM_DIRECT_BLOCKS];
    off_t max_direct_range;
    block_run indirect;
    off_t max_indirect_range;
    block_run double_indirect;
    off_t max_double_indirect_range;
    off_t size;
} data_stream;

我們可以看到在定義中,block_run分為directindirect以及double_indirect三種。

如果某個檔案只有2KB,而block有1KB的大小,則這個檔案只會占用2個block,也就是block_run=2。direct的 block_run長度為12,之前提過的,每個block_run可以記錄65536個block,所以如果每個block是1KB,則僅僅使用 direct就能夠表示768MB的檔案(12 * 65536 * 1KB)。當檔案大於這個數目時,連12個block_run也裝不下,這時indirect與double_indirect就能發揮作用了。像是4K 大小的indirect block對映512個block_run,而每個block_run可以記錄65536個1KB的block,這樣就足足可以表示32768MB的檔案 (512 * 65536 * 1KB = 32768MB),再加上direct block的768MB,這樣就足以表示將近34GB的檔案了。另外,double_indirect block映對512個indirect在映對512個4KB大小的block_run,也能夠再額外增加1G的容量(512 * 512 * 4KB = 1GB)。

系列文章


上一篇
檔案系統的設計與效能 - I-Node Management
下一篇
檔案系統的設計與效能 - Attributes
系列文
檔案系統的設計與效能32

尚未有邦友留言

立即登入留言