永远年轻,永远热泪盈眶!
分类: LINUX
2014-09-12 22:19:48
VFS是Linux和Unix文件系统中采用的一种技术机制,旨在一个操作系统中支持多个不同类型的文件系统。VFS是操作系统
内核中这样一组数据结构与子程序的集合,它位于操作系统系统调用层面与具体类型文件系统之间,负责 :
1、记录操作系统中可以支持和已经安装有哪些文件系统类型;
2、将相关系统调用转换为对具体类型文件系统的调用;
3、负责不同类型文件系统间的协同工作(例如跨FS(文件系统)复制);
4、实现对不同类型文件系统的动态装卸和可扩充性等。
安装点和链接
/d1/f1路径上可能存在两个不同类型的文件系统。
结论:需逐个分量逐次调用具体类型文件系统,而不能一次性的整个路径名转交。
因此,与具体类型文件系统的交互(即调用次数)增多了。
因此,内存缓冲数据结构进入VFS、内存活动I结点,目录项,超级块,等
为了统一管理和减少代码重复,文件系统类型无关的操作(即大部分内存操作)进入VFS,
文件系统类型相关的操作(即所有外存操作,及少量内存操作)留在具体类型文件系统中。
以上这三个因素导致的VFS实际结构和过程。
VFS打开文件过程图
应用程序通过open系统调用进入内核
参数:路径名等(例如/d1/f1)
↓
根据/的inode(OS初启时已进内存)查d1目录项已在内存(系统打开文件表等)否,是则判断是否安装点并作处理,否则根据
操作表调用FS类型相关函数读盘上根目录文件内容查有无d1,无则错返,有则建填d1的dentry对象和inode对象(可能读盘inode)
↓
根据d1的inode查f1目录项已在内存否,否则根据操作表调用FS类型相关函数读盘上d1目录文件内容查有无f1,无则错返,
有则建填f1的dentry对象、inode对象(可能读盘inode)和file对象
↓
成功返回文件句柄(进程打开文件表的行号)