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

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



