下面使对Linux kernel development 13章第一节的归纳
虚拟文件系统(VFS)是内核的子系统,它实现文件和文件系统相关的接口来提供给用户空间的程序,
所有文件系统都依靠虚拟文件系统来互相共存,
互相沟通.其实让open(),read(),write()之类的系统调用工作于不同文件系统之间是见了不起的事情。
在早早期的操作系统中,比如DOS,除非有特殊工具,
否则想通过标准的系统调用把一个文件复制到另一个文件系统中是无法做到的。
但是在现代操作系统中,比如Linux,它通过一个虚拟的界面(virtual interface)抽象了对文件系统的访问,
使操作和一般的访问变的可能。
VFS提供了一种通用的文件模型可以来表示任何文件系统的通用特性和行为(behavior)。
对于内核和VFS曾来说,每种文件系统都支持文件,文件夹,都支持创建,删除文件。
举个例子
ret = write(fd, buf, len);
write()系统调用被sys_write()接管,这个系统调用通过fd确定需要写入的文件在哪个文件系统上,然后调用那个文件系统上相关方法。
VFS又包含了四种主要对象
1. superblock object 用来表示一个特别的(specific)被挂载的文件系统
2. inode object 用来表示一个特别的文件
3. dentry object, 用来表示文件夹的entry
4. file object 用来表示和进程关联的一个open file
各种操作对象(operations object)又包含在上面提到的主要的对象中
比如 file object 中的 file_operations 对象,它里面包含了很多可以
让进程在open file中唤醒(invoke) 的方法(methods),比如read(),write()
[ 本帖最后由 madfrogme 于 2012-7-25 02:55 编辑 ]