8.6具体文件系统举例

   如前所述,每种文件系统类型都有个file_system_type结构,而结构中的fs_flags则由各种标志位组成,这些标志位表明了具体文件系统类型的特性,也决定着这种文件系统的安装过程。以物理设备为基础的常规文件系统类型(如Ext2Minix等),由用户进程通过系统调用mount()来安装,而有些没有物理设备对应的文件系统(如pipe、共享内存区等),由内核通过kern_mount()来安装。

   内核代码中提供了两个用来建立file_system_type结构的宏,其定义在fs.h中:

 

   #define DECLARE_FSTYPE(var,type,read,flags) \

struct file_system_type var = { \

         name:           type, \

         read_super:     read, \

         fs_flags:       flags, \

        owner:          THIS_MODULE, \

}

 

 #define DECLARE_FSTYPE_DEV(var,type,read) \

         DECLARE_FSTYPE(var,type,read,FS_REQUIRES_DEV)

    一般常规的文件系统类型都通过DECLARE_FSTYPE_DEV建立其结构,因为它们的FS_REQUIRES_DEV标志位为1,而其他标志位为0。相比之下,特殊的、虚拟的文件系统类型大多直接通过DECLARE_FSTYPE建立其结构,因为它们的fs_flags是特殊的。