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里 |