虚拟Linux内核,linux内核分析之虚拟文件系统

本文主要是介绍一下linux内核的虚拟文件系统(VFS)。虚拟文件系统(VFS,virtual filesystem),是一个内核软件层,是物理文件系统与服务之间的一个接口层,它对Linux的每个文件系统的所有细节进行抽象,使得不同的文件系统在Linux核心以及系统中运行的其他进程看来,都是相同的。

严格说来,VFS并不是一种实际的文件系统。它只存在于内存中,不存在于任何外存空间。VFS在系统启动时建立,在系统关闭时消亡。 Linux中系统可以使用连接成单一树形结构的不同文件系统。VFS可以无缝地使用多个不同的文件系统,通过VFS可以访问文件系统的系统调用提供一个统一的抽象接口,支持多种文件系统。

VFS的作用是采用标准的UNIX系统调用读/写位于不同物理介质上的不同文件系统,方便的在不同文件系统间进行数据交换和管理。  Linux系统中,VFS使用4个主要对象:超级块、索引节点、目录项、文件对象。每个对象的数据结构中不仅包含了属性还包含了对应的操作。

8783a222a152fe891ace5eaec5b4db3f.png

1、超级块

超级块用于存储已安装文件系统的控制信息的数据结构,代表已安装的文件系统,一个安装实例和一个超级块是一一对应关系。超级块描述文件系统的状态、文件系统类型、大小、区块数、索引节点数等,存放在磁盘的特定扇区中。  超级块使用结构体super_block表示。

(1)变量s_list指向超级块链表的指针,同一时间内核会拥有好几个文件系统的超级块,内核采用双向循环链表的方式来组织这些超级块。

(2)变量s_root指针指向目录项的根目录。

2、索引节点

存储文件的元数据的一种结构,文件的元数据就是文件的相关信息,和文件本身是两种概念。它包含诸如文件大小、拥有者、创建时间、磁盘位置等和文件相关的信息。  每个索引节点都有一个索引节点号,唯一的标识文件系统中的文件。索引节点在文件的整个生命周期都存在。

索引节点使用结构体inode来表示。

(1)变量i_hash包含了一个指向哈希链表的指针,哈希表加速索引节点的查找。

(2)i_ino保存一个索引号,唯一标识。

(3)变量i_sb指针指向文件所驻留的文件系统的超级块。

3、目录项(dentry)

存放目录项(文件的特定名称)与对应文件进行链接的有关信息。在一个文件路径中,路径中的每一部分都被称为目录,如/home/source/hello.c中,目录/,home,source和文件hello.c都是一个目录项。

目录项使用结构体struct dentry来表示。

4、文件对象

文件对象表示进程已打开的一个文件,它是已打开文件在内存中的表示。多进程可能同时打开同一文件,内存中可能存在多个与同一文件对应的文件对象,但与该文件对应的索引节点和目录项是唯一的。

文件对象使用结构体struct file来表示。

5、四者的关系

b423a2d2951cd148e6678444165b589a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值