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

本文深入探讨了虚拟文件系统(VFS)的核心概念,包括通用文件系统接口、VFS中的对象与数据结构,以及与进程相关的数据结构,旨在帮助读者理解Linux内核如何统一管理各种文件系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虚拟文件系统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:安装点,描述暗转文件系统的实例;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值