上两篇文章介绍虚拟文件系统VFS中基本的数据结构、以及与进程相关的数据结构,为了描述完整的VFS,其实还有一类数据结构,他们是描述文件系统的。文件系统在不同状态下,根据功能不同,主要包含三个数据结构:超级块super_block、安装点(也叫挂载点)mount和vfsmount、文件系统类型file_system_type。下面就详细介绍下这三个数据结构之间的关系。
数据结构 | 作用和内容 | 相关说明 |
文件系统 file_system_type | fs.h 作用: 1)文件系统向VFS注册的信息,标识一个文件系统 内容: 1)name名称 2)fs_flag文件系统标志 3)fs_supers链接到这个文件系统的超级块列表 4)mount挂载操作回调 5)kill_sb超级块全部卸载回调 | 1)一个文件系统,不论是否安装实例,在VFS注册使用file_system_type 2)同一个文件系统,可以有多个安装实例,但是file_system_type只有一个 |
超级块 super_block | fs.h 作用: 1)代表一个文件系统实例,也就是安装(挂载)到系统上的文件系统 2)提供了很多indoe操作,比如分配、释放、销毁等 内容: 1)s_list 超级块链表表头 2)s_blocksize 超级块大小 3)s_root 根dentry 4)s_type 链接到文件系统类型 5)s_mounts 链接到挂载点信息 6)s_instances 同一类型文件系统链表 | 1)一个文件系统可能存在多个超级块,一个文件系统安装(挂载)到操作系统后,就会有一个超级块 2)想同的超级块,通过s_instances链表,链接在一起 |
安装点(挂载点) mount vfsmount | mount.h 说明:老版本只有vfsmount,新版本中很多安装(挂载)信息提出来形成mount,vfsmount中只留下根目录项和超级块指针,这样vfsmount更加纯粹。 作用: 1)代表一个文件系统的安装点(挂载点) 2)同一个文件系统,有多个安装点(挂载点),就有多个mount和vfsmount实例 vfsmount内容: 1)mnt_root 安装点根目录项 2)mnt_sb 指向对应的超级块 3)mnt_flags 挂载标志 4)mnt_userns 用户名称空间 mount内容: 1)mnt_parent 指向父文件系统安装点 2)mnt_mountpoint 安装点dentry 3)mnt vfsmount信息 4)mnt_mounts 链接到当前文件系统下所有子文件系统安装点 5)mnt_child 链接到当前文件系统父文件系统的所有子文件系统安装点 6)mnt_list 挂载描述符列表 | 1)一个文件系统可能存在多个安装点,一个安装点对应一个安装点 |
用图形来表示三者之间关系
参考链接:
《005 虚拟文件系统VFS中超级块、安装点、文件系统类型三者之间关系》有2个想法