博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从文件 I/O 看 Linux 的虚拟文件系统
阅读量:6973 次
发布时间:2019-06-27

本文共 1123 字,大约阅读时间需要 3 分钟。

1 引言

Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等。通过使用同一套文件 I/O 系统调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系统格式;更进一步,对文件的操作可以跨文件系统而执行。如图 1 所示,我们可以使用 cp 命令从 vfat 文件系统格式的硬盘拷贝数据到 ext3 文件系统格式的硬盘;而这样的操作涉及到两个不同的文件系统。

图 1. 跨文件系统的文件操作
图片示例_跨文件系统的文件操作

“一切皆是文件”是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套操作界面。

图 2. 一切皆是文件
图片示例_一切皆是文件

而虚拟文件系统正是实现上述两点 Linux 特性的关键所在。虚拟文件系统(Virtual File System, 简称 VFS),是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了内核中的一个抽象功能,允许不同的文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。

为了能够支持各种实际文件系统,VFS 定义了所有文件系统都支持的基本的、概念上的接口和数据结构;同时实际文件系统也提供 VFS 所期望的抽象接口和数据结构,将自身的诸如文件、目录等概念在形式上与VFS的定义保持一致。换句话说,一个实际的文件系统想要被 Linux 支持,就必须提供一个符合VFS标准的接口,才能与 VFS 协同工作。实际文件系统在统一的接口和数据结构下隐藏了具体的实现细节,所以在VFS 层和内核的其他部分看来,所有文件系统都是相同的。图3显示了VFS在内核中与实际的文件系统的协同关系。

图3. VFS在内核中与其他的内核模块的协同关系
图片示例_VFS在内核中与其他的内核模块的协同关系

VFS即虚拟文件系统是Linux文件系统中的一个抽象软件层;因为它的支持,众多不同的实际文件系统才能在Linux中共存,跨文件系统操作才能实现。VFS借助它四个主要的数据结构即超级块、索引节点、目录项和文件对象以及一些辅助的数据结构,向Linux中不管是普通的文件还是目录、设备、套接字等都提供同样的操作界面,如打开、读写、关闭等。只有当把控制权传给实际的文件系统时,实际的文件系统才会做出区分,对不同的文件类型执行不同的操作。由此可见,正是有了VFS的存在,跨文件系统操作才能执行,Unix/Linux中的“一切皆是文件”的口号才能够得以实现。

转载于:https://www.cnblogs.com/li-hao/archive/2012/01/03/2310846.html

你可能感兴趣的文章
PeopleSoft Audit
查看>>
支付宝 快捷支付 需要注意的事情
查看>>
java中常见异常总汇,附解释
查看>>
CSRF 攻击的应对之道
查看>>
(转)scala中map与flatMap浅析
查看>>
# 数据分析常用算法
查看>>
Buy Cheap Couch, Handbags and Purse Online
查看>>
UI Prototype Design IDE( 界面原型设计工具 )
查看>>
[转]大话企业级Android应用开发实战 Activity
查看>>
输入和输出--javase中的路径
查看>>
符号运算 条件语句 三元(目)运算
查看>>
20190524 题解
查看>>
在单进程单线程或单进程多线程下实现log4cplus写日志并按大小切割
查看>>
【Leecode】存在重复
查看>>
Gradient Descent with Momentum and Nesterov Momentum
查看>>
Jquery-UI实现弹出框样式
查看>>
【设计模式】抽象工厂模式
查看>>
GAN生成式对抗网络(四)——SRGAN超高分辨率图片重构
查看>>
ExtJs 4.0 视频教程代码
查看>>
傅立叶级数(Fourier Series)和周期现象
查看>>