Linux支持多种不同文件系统,要实现这个目的,就要将对各种不同文件系统和管理纳入到一个统一的框架中,让内核中的文件系统界面成为一条文件系统“总线”,使用户程序可以通过同一个文件系统操作界面,也就是同一组系统调用,对各种不同的文件系统(以及文件)进行操作。
这样,就可以对用户程序隐去各种不同文件系统的细节,为用户程序提供一个统一的、抽象的、虚拟的文件系统界面,这就是所谓“虚拟文件系统”VFS(Virtual Filesystem Switch)。这个抽象界面主要由一组标准的、抽象的文件操作构成,以系统调用的形式提供于用户程序,如read()、write()、lseek()等等。这样,用户程序就可以把所有的文件都看作一致的、抽象的“VFS文件”,通过这些系统调用对文件进行操作,而无需关心具体的文件属于什么文件系统以及具体文件系统的设计和实现。例如,在Linux操作系统中,可以将DOS格式的磁盘或分区(即文件系统)“安装”到系统中,然后用户程序可以安完全相同的方式访问这些文件,就好像它们也是ext2格式的文件一样。
在我们使用C语言编写应用程序时,相信会经常使用到write()系统调用;就是向一个文件中写入数据。write()函数的原型为
ssize_t write(int fd, const void *buf, size_t count);
在用户程序的write(f, &buf, len),向文件描述符为f的文件中,写入len个字节数据,待写入的数据存放在buf中。下图为write()将数据写入硬件上的简易流程。我们看到首先通过虚拟文件系统VFS,然后根据不同文件系统的write()方法将数据写入物理设备上。
本文的内容组织如下:首先介绍VFS的四个主要对象和相关操作,然后介绍和文件系统、进程相关的数据结构和操作。
目 录
1 概述… 4
2 VFS主要对象及其数据结构… 5
2.1 Unix文件系统… 6
2.2 超级块对象… 7
2.2.1 超级块操作… 9
2.3 索引节点对象… 12
2.3.1 索引节点操作… 15
2.4 目录项对象… 18
2.4.1 目录项状态… 20
2.4.2 目录项缓存… 21
2.4.3 目录项操作… 21
2.5 文件对象… 23
2.5.1 文件操作… 24
3 与文件系统相关的数据结构… 25
4 和进程相关的数据结构… 27
4.1 files_struct 27
4.2 fs_struct 28
完整文档下载:Linux虚拟文件系统
能提供您提供的文件下载是属于哪本书吗?我的微信书mail100
这是博主自己写的,原创