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() 调用,再返回给系统调用处理程序,最后复制回用户空间, read() 系统调用返回,进程继续执行。
超级会员免费看
订阅专栏 解锁全文
1504

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



