iT邦幫忙

DAY 26
4

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

檔案系統的設計與效能 - I-Node Management

當使用者存取一個檔案時,他使用的是檔案名稱,事實上連結的就是某個i-node的值(編號)。在檔案系統中,i-node編號指的就是i-node資料結構在磁碟上的位址。
當使用者存取一個檔案時,他使用的是檔案名稱,事實上連結的就是某個i-node的值(編號)。在檔案系統中,i-node編號指的就是i-node資料結構在磁碟上的位址。i-node的資料結構如下:

typedef struct fs_inode
{
    int32 magic1;
    inode_addr inode_num;
    int32 uid;
    int32 gid;
    int32 mode;
    int32 flags;
    bigtime_t create_time;
    bigtime_t last_modified_time;
    inode_addr parent;
    inode_addr attributes;
    uint32 type;
    int32 inode_size;
    binode_etc *etc;
    data_stream data;
    int32 pad[4];
    int32 small_data[1];
} fs_inode;

在這裡我們又看到了magic number的欄位,magic number除了可以用來查驗i-node的正確性之外,還可以作為i-node版本的定義。inode_num欄位是位址指標,記錄i-node編號在記憶體理的位址。uid與gid欄位定義的是檔案使用者與群組歸屬,而mode欄位則定義存取權限。flags欄位是用以紀錄i-node的狀態,像是指示i-node被使用中或是檔案已刪除等等。我們可以定義這些常見的旗標:

#define INODE_IN_USE 0x00000001
#define ATTR_INODE 0x00000004
#define INODE_LOGGED 0x00000008
#define INODE_DELETED 0x00000010
#define PERMANENT_FLAGS 0x0000ffff
#define INODE_NO_CACHE 0x00010000
#define INODE_WAS_WRITTEN 0x00020000
#define NO_TRANSACTION 0x00040000

INODE_IN_USE 代表i-node為使用中,而ATTR_INODE旗標代表此i-node指向一Attribute,INODE_LOGGED旗標代表這個i-node 所記載的資料是屬於Journal(log)的。當使用者刪除檔案時,i-node的flags欄位就會記載INODE_DELETED。

create_time 與last_modified_time欄位分別記錄檔案的建立與更動時間。parent與attributes是指向根目錄與Attribute的位址。當i-node作為attirbute時,type可以記錄其性質,inode_size紀錄i-node的大小,主要作為檢驗之用。

系列文章


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

1 則留言

我要留言

立即登入留言