13.1 通用文件系统接口
创新互联建站专注于镇原网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供镇原营销型网站建设,镇原网站制作、镇原网页设计、镇原网站官网定制、小程序制作服务,打造镇原网络公司原创品牌,更为您提供镇原网站排名全网营销落地服务。13.2 文件系统抽象层
VFS抽象层之所以能衔接各种各样的文件系统,是因为它定义了所有文件系统都支持的、基本的、概念上的接口和数据结构。同时实际文件系统也将自身的诸如“如何打开文件”,“目录是什么”等概念在形式上与VFS的定义保持一致。
13.3 Unix文件系统
Unix使用了四种和文件系统相关的传统抽象概念:文件、目录项、索引节点和安装点。
文件:文件其实可以做一个有序的字节串,字节串中第一个字节是文件的开头,最后一个字节是文件的结尾。每一个文件为了便于系统和用户识别,都被分配了一个便于理解的名字。
文件目录好比一个文件夹,用来容纳文件。目录可以层层嵌套形成文件路径。路径中的每一部分都被称作目录条目。目录属于普通文件,它列出包含在其中的文件。
Unix将文件的相关信息和文件本身两个概念区分。文件相关信息,被存储在一个单独的数据结构中,被称为索引节点。
文件系统的控制信息存储在超级块中,超级块是一种包含文件系统信息的数据结构。在磁盘上,文件信息按照索引节点的形式存储在单独的块中;控制信息被集中存储在磁盘的超级块中。及时一个文件系统不支持索引节点,它也必须在内存中装配索引节点结构体,就像他本身包含索引节点一样。如果一个文件系统将目录看成特殊的对象,那么要想使用VFS,就必须将目录重新表示为文件形式。
13.4 VFS对象及其数据结构
1、超级块,代表一个具体的已经安装的文件系统
2、索引节点对象,它代表一个具体文件
3、目录项,路径的组成部分
4、文件对象,代表由进程打开的文件
13.5 超级块对象
各种文件系统都必须实现超级块对象,该对象用于存储特定文件系统的信息,通常对应于存放在磁盘特定扇区中的文件系统超级块或文件系统控制块。对于并非基于磁盘的文件系统,他们会在使用现场创建超级块并将其保存到内存中。
超级块由super_block结构体表示。
13.6超级块操作
13.7索引节点对象
索引节点对象包含了内核在操作文件或目录时需要的全部信息。由inode结构体表示。
一个索引节点代表文件系统中的一个文件,他也可以是设备或管道这样的特殊文件。
13.8 索引节点操作
13.9 目录项对象
每个dentry代表路径中的一个特定部分。目录项没有对应的磁盘数据结构,VFS根据字符串形式的路径名现场创建它。而且由于目录项对象并非真正保存在磁盘上,所以目录项结构体没有是否被修改的标志。
13.9.1 目录项状态
被使用、未使用、负状态。
13.9.3 目录项缓存
13.10 目录项操作
13.11 文件对象
文件对象是已经打开的文件再内存中的表示。因为多个进程可以同时打开和操作同一个文件,所有同一个文件也可能存在多个对应的文件对象。文件对象仅在进程的观点上代表已经打开的文件。文件对象没有对应的磁盘数据。所以在结构体中没有代表其对象是否为脏、是否需要写回磁盘的标志。文件对象通过f_dentry指向相关的目录项。目录项会指向相关的索引节点,索引节点会记录文件是否为脏。
13.12 文件操作
13.13 和文件系统相关的数据结构
file_system_type 用来描述各种特定的文件系统类型
vfsmount 用来描述一个安装文件系统的实例
13.14 和进程相关的数据结构
file_struct 所有与单个进程相关的信息(如打开的文件以及文件描述符)都包含在其中
fs_struct 包含了当前进程的当前工作目录和根目录
namespace