struct list_heads s_list;
kdev_t s_dev;
unsigned long s_blocksize;
unsigned char s_blocksize_bits;
unsigned char s_rd_only;
unsigned char s_dirt;
struct file_system_type *s_type;
unsigned long s_flags;
unsigned long s_magic;
unsigned long s_time;
struct dentry *s_root;
以上這些字段是我認為super_block結構裡屬於基本資料的部分
在這裡
我沒有依照原始程序的寫法依序將字段列出來
而是將相關的整理在一起
s_list這個字段是用來將super block串在一起的
在Linux裡
同一時間Kernel可能會擁有好幾個檔案系統的super block
因此
它有它自己一套的super block管理方式
平常也許我們會另外寫一個linked list
裡面用一個字段存放super block
用這種方式把super block串在一起
但是
Kernel不是這樣做
它也是用一個串行來把super block放在一起
但是
它把它寫到super block結構裡
s_list就是用來將super block串起來的
用法跟一般人寫法不同
在super block的管理我將為各位介紹
s_dev是此super block所屬檔案系統所在的device代碼
檔案系統內部的管理不是用檔案做單位
而是以block為存取的單位
而s_blocksize就是用來記錄一個block是幾個byte
因此
如果一個block是
byte的話
那s_blocksize為
而s_blocksize_bits就是
這個字段是指一個block需要幾個bit來表示
而s_rd_only從字面上來看應該是記錄檔案系統或super block是否只讀
目前這個字段是被設為
還沒有被使用
至於s_dirt則是記錄此super block的內容是否被改過
用來判斷是否最後要將super block寫回disk裡
當super block被更動之後
s_dirt會被設為
s_type的型別是file_system_type
這是一種來描述檔案系統的結構
在這裡
是用來記錄這個super block是屬於那一個檔案系統
有關這種型別
我們將會在super block的管理中探討
當我們使用檔案系統時
第一步就是要做mount的動作
在mount的時候
還需要給它參數
像是mount成只讀或可擦寫等
這些參數就是記錄在s_flags裡
在Linux或UNIX裡
magic number通常是用來做識別用的
而檔案系統的magic number就是設在s_magic字段裡
像目前Ext
的magic number就是
xEF
從檔案系統的super block我們可以讀取到這個檔案系統任一個檔案
但是
前提是我們必須要先知道這個檔案系統的根目錄在那裡才可以
就像給我們一個絕對路徑我們可以找到那個檔案
但是
找的方式是先從根目錄
再往下層去找
因此
super block必須記錄它所代表的檔案系統根目錄在那裡
這就記錄在s_root裡
From:http://tw.wingwit.com/Article/program/Oracle/201311/17200.html