Linux 文件 I/O 与缓冲机制详解
1. 虚拟文件系统(VFS)
虚拟文件系统(VFS)通过提供通用文件模型来实现抽象,这是 Linux 中所有文件系统的基础。借助函数指针和各种面向对象的实践,通用文件模型为 Linux 内核中的文件系统提供了一个必须遵循的框架。这使得 VFS 能够对文件系统进行通用请求,该框架还提供了支持读取、创建链接、同步等操作的钩子。每个文件系统会注册处理其所能执行操作的函数。
这种方法使得文件系统之间具有一定的共性。例如,VFS 使用索引节点(inode)、超级块(superblock)和目录项等概念进行操作。非 Unix 起源的文件系统,可能没有像索引节点这样的类 Unix 概念,但也必须适应。实际上,Linux 能够毫无问题地支持 FAT 和 NTFS 等文件系统。
VFS 的好处是巨大的。单个系统调用可以从任何介质上的任何文件系统读取数据;单个实用程序可以在任何文件系统之间进行复制操作。所有文件系统都支持相同的概念、接口和调用,一切都能正常工作,而且效果良好。
当应用程序发出 read() 系统调用时,会经历一个有趣的过程:
1. C 库提供系统调用的定义,在编译时将其转换为适当的陷阱语句。
2. 用户空间进程陷入内核,经过系统调用处理程序,然后传递给 read() 系统调用。
3. 内核确定给定文件描述符对应的对象。
4. 内核调用与该对象关联的读取函数。对于文件系统,此函数是文件系统代码的一部分。
5. 该函数执行实际操作,例如从文件系统物理读取数据,并将数据返回给用户空间的 read()
超级会员免费看
订阅专栏 解锁全文
74

被折叠的 条评论
为什么被折叠?



