虚拟文件系统
安装点
文件系统是数据特殊的分层存储。被安装在一个特定的安装点,该安装点在全局层次结构中被称为命名空间,所有安装文件系统被称为根文件系统。
超级块
代表一个已经安装的文件系统。存储文件系统的额控制信息。
目录项对象
文件通过目录组织,路径中的目录条目被称为目录项。目录被当做特殊的文件。
在路径中,包括普通文件在内,每一部分都是目录项对象。路径中的每个组成部分都有索引节点对象表示。
目录项对象没有磁盘对应的数据结构,VFS根据字符串形式的路径现场创建它。由于并非真正保存在磁盘,所以目录项结构体没有被修改标志。
目录项缓存
- 被使用的目录链表:该链表通过索引对象中的i_dentry项连接索引节点,给定一个索引节点可能有多个连接,所以可能有多个目录项对象
- “最近被使用的双向链表”:头结点是最新的数据,删除时从尾结点删除
- 哈希散列表:通过哈希函数将特定路径解析为目录对象
文件对象
可以当做有序的字节串,面向字节流的抽象。在磁盘上也没有相应的数据对应
索引节点对象
代表一个文件。包含内核在操作文件或
目录时的全部信息。仅当文件被访问时,索引节点才被创建。他可以是设备或管道这种特殊文件。
文件相关的信息和文件本身区分开。访问权限、大小、拥有者等信息被称为元数据,放在单独的数据结构中(inode)。
和进程相关的数据结构
files_struct
fs_struct
由进程描述符中fs域指向,包含文件系统和进程相关的信息,包含了当前工作目录和根目录
namespace
由进程描述符中的namespace域指向,使得每一个进程都看到唯一的文件安装系统而不是目录。
对于使用克隆标志CLONES_FILES、CLONE_FS创建的进程,共享这两个结构体。
默认所有进程共享命名空间,只有在clone时使用CLONE_NEWS标志时,才会给进程另一个命名空间拷贝。