linux内核设计与实现读书笔记——虚拟文件系统

  • Post author:
  • Post category:linux


虚拟文件系统VFS:内核子系统,为内核用户程序提供文件和文件系统的相关接口。

一、通用文件系统接口:

可以使用通用系统调用对不同介质和文件系统进行操作。

原因:内核在底层文件系统接口建立抽象层——通用文件系统模型,包括文件系统常用功能集和行为,使得linux能够支持各种文件系统。实际文件系统通过编程提供VDS期望的抽象接口和数据结构。

流程:用户空间操作——> 虚拟文件系统接口——>实际文件系统对应的操作——>物理介质工作

二、VFS中对象&数据结构:

使用数据结构来代表通用文件对象,每个文件对象包括操作对象,操作对象描述了内核针对主要文件对象可以使用的方法,操作对象通过结构体指针实现。

1)超级块对象:代表具体的已经安装的文件系统。超级块存储文件系统的信息。



操作对象:super_operation,内核针对特定文件系统所能调用的方法。



super_block结构体定义于<linux/fs.h>,结构体中的每项是指向超级快操作函数的指针。



操作包括:创建、初始化、读、写索引节点。在VFS进程上下文中调用。

2)索引节点对象:包含了内核在操作文件或目录时需要的全部信息。



索引节点对象:inode结构体,定义在<linux/fs.h>。一个索引节点代表文件系统的一个文件。



操作对象:

inode_operation,内核针对特定文件所能调用的方法。

对指定索引及索引对象进行创建,符号链接,目录的操作,

3)目录项对象:目录项代表路径的组成部分,注意目录当做文件来对待。



目录项对象:路径中的每个对象都是目录项对象。由dentry结构体表示,定义在<linux/dcache.h>中,并非保存在磁盘上,根据字符串形式的路径名现场创建;状态:被使用、未被使用、负状态;目录项缓存中被使用链表。


操作对象:

dentry_operation,内核针对特定目录所能调用的方法,定义在<linux/dcache.h>中。

4)文件对象

文件对象:file表示,定义在<linux/fs.h>中,打开的文件在内存中的表示,由系统调用open创建,close撤销,没有对应的磁盘数据,反过来指向索引节点。



操作对象:file_operation,内核针对进程已打开文件所能调用的方法,包括各种读写方式等。

与进程有关的数据结构:file_struct,fs_struct,namespace。

5)其它对象

file_system_type:描述文件系统类型;

vfsmount:安装点,描述暗转文件系统的实例;



版权声明:本文为cleo321原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。