轻松理解操作系统 - Linux的虚拟文件系统是如何简化我们的使用的?

在前面几期,我们不仅了解了 Linux文件系统 是如何在硬盘等储存介质上保存文件的:

什么是软硬链接

文件的“身份证” - inode

真正储存文件的地方 - 数据块

文件系统的心脏 - 超级块

以及了解了 Linux系统 中具体都有一些什么文件:

Linux 中有哪些文件?

解决完了以上的问题之后,又有一个新的问题出现了:如何才能让用户方便的使用这些文件呢?尤其是在多文件系统的情况下。

Linux系统解决这个问题的方法是采用了虚拟文件系统(VFS)

一、虚拟文件系统是何方神圣?

通常,我们听说的比较多的“文件系统”都是在硬盘等储存介质上真实存在的。这个“虚拟文件系统”是什么呢?

答案是:它其实就是内存中的一个接口层

它将各种不同的文件系统抽象成一个统一的接口。使上层应用程序和操作系统内核直接调用其提供的接口即可,不必关心底层的实现和区别。

图片

二、虚拟文件系统起到了什么作用?

1、提供统一文件系统接口

VFS 定义了统一的文件系统接口,使得用户空间程序和操作系统内核无需关心底层文件系统的具体实现细节

用户程序和系统内核可以通过相同的系统调用来进行文件的读取、写入、打开、关闭等操作,而无需担心底层文件系统的差异。

2、支持多种文件系统

通过 VFS,操作系统内核可以同时支持多种文件系统,如ext4、NTFS、FAT32等。

这使得用户能够在不同文件系统之间自由地进行文件操作,而无需修改应用程序代码。

3、方便了文件系统的挂载和管理

VFS 负责管理文件系统的挂载和卸载,使得用户能够通过挂载点访问不同的文件系统。

三、那它的实现原理是什么呢?

它的数据结构

1、超级块对象

它会将每个文件系统的超级块都加载到内存中

前面有讨论过它是什么:文件系统的心脏 - 超级块

2、索引节点(inode)对象

它会将许多 inode 加载到内存中

前面有讨论过它是什么:文件的“身份证” - inode

3、目录项对象

它加速了文件路径的解析

它存在于内存之中:Linux文件系统在内存中有什么结构?

4、文件对象

存放已打开的文件和进程之间交互的信息,如文件描述符、文件偏移量等。

系统调用处理

当进程发起一个文件操作的系统调用时,VFS会拦截这个调用,并将其转换为特定于所访问的文件系统的操作。

以打开文件为例,这个流程是:

图片

1 - 拦截系统调用:

当进程调用 open() 系统调用时,VFS会拦截这个调用,并检查其参数的有效性。

2 - 查找目录项对象:

VFS 会根据提供的文件路径,通过逐级查找目录项对象来定位目标文件。

如果目标文件不存在,VFS 会根据系统调用的标志位决定是否创建新文件。

3 - 创建或获取文件对象:

文件对象会被添加到进程的文件描述符表中,以便后续访问。

4 - 执行文件系统操作:

VFS 会根据目标文件所在的文件系统类型,调用相应的文件系统操作函数来完成文件操作。

一个从生化环材专业转行的字节研发工程师,日常分享干货和有趣的科普。欢迎围观
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值