1 VFS文件系统
虚拟文件系统(VFS)为用户空间程序提供了文件和文件系统相关的接口,使应用通过统一的系统调用访问各种存储介质。
虚拟文件中的4个主要对象:文件、目录项、索引节点和安装点。
2 文件特性
superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及档案系统的格式与相关信息等;
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的资料所在的 block 号码;
block:实际记录文件的内容,若文件太大时,会占用多个 block 。
每个文件(不管是一般文件还是目录文件)都会占用一个 inode。
3 对象
(1)超级块对象
定义在<linux/fs.h>
结构体:struct super_block
操作函数:struct super_operations
(2) 索引点对象
<linux/fs.h>
结构体:struct inode
操作函数:struct inode_operations
(3) 目录项对象
<linux/dcache.h>
结构体:struct dentry
操作函数:struct dentry_operations
3种状态
- 被使用:对应一个有效的索引节点,并且该对象由一个或多个使用者
- 未使用:对应一个有效的索引节点,但是VFS当前并没有使用这个目录项
- 负状态:没有对应的有效索引节点(可能索引节点被删除或者路径不存在了)
目录项缓存
- “被使用的”目录项链表;
- “未被使用的”双向链表;
- 散列表和相应的散列函数。
先从缓存中找,VFS将目录项对象加入dcache中,dcache在一定意义上页提供对索引点的缓存。
(4) 文件对象
文件对象表示进程已打开的文件。
结构体:struct file
操作函数:struct file_operations
3.5 其他
3.5.1 文件系统相关的数据结构
struct file_system_type——用来描述各种特定文件系统类型
struct vfsmount —— 描述一个安装文件系统的实例
3.5.2 进程相关的数据结构
struct files_struct——由进程描述符中的 files 目录项指向,所有与单个进程相关的信息(比如打开的文件和文件描述符)都包含在其中。
struct fs_struct——由进程描述符中的 fs 域指向,包含文件系统和进程相关的信息。
struct mmt_namespace——由进程描述符中的 mmt_namespace 域指向。