
1,
在同一个目录结构中,
可以挂载着若干种不同的文件系统.
VFS隐藏了它们的实现细节,
为使用者提供统一的接口;
2,
目录结构本身并不是绝对的,
每个进程可能会看到不一样的目录结构.
目录结构是由地址空间(namespace)来描述的,
不同的进程可能拥有不同的namespace,
不同的namespace可能有着不同的目录结构(因为它们可能挂载了不同的文件系统)。
含义:
索引节点,
对应设备上存放的一个文件。
创建:
1)在超级块被载入时,
作为根的inode一并被载入
2)通过mknod调用创新新的索引节点
3)在寻找文件路径的过程中,
从设备中读取,
并初始化(跟super_block一样,
inode结构中一部分信息是保存在设备中的,
一部分则是在内在中初始化的)。
函数:
i_op,
索引节点函数集,
主要包含对子inode的创建,
删除等 *** 作.
f_op,
文件函数集,
主要包含对本inode的读写等 *** 作.
在inode被创建后,
1)如果是特殊文件,
则根据对应文件的类型(包括块设备,
字符设备,
fifo,
等等)赋予特定的函数集(并不直接与设备和文件系统类型相关)
2)否则,
对应的文件系统类型会提供相应的函数集,
并且目录和文件函数集很可能不同。
VFS的使用者是进程(用户访问文件系统总是需要启动进程).
描述进程的task_struct结构中files指针指向了一个files_struct结构,
后者描述了进程已打开的文件集合。
files_struct结构维护了一个已打开文件所对应的file结构的指针数组,
数组下标被用作用户程序 *** 作已打开文件的句柄(通常称作fd).
files_struct还维护着已使用的fd位图,
以便在需要打开文件时,
为其分配一个未使用的fd。
详细见参考文献。
虚拟文件系统(VFS)其实也可以翻译成虚拟文件系统转换(virtual filesystem switch)。可以看出来它的作用就是提供一个通用的接口来处理与Unix标准文件系统相关的所有系统调用。它所隐含的思想就是把表示很多不同种类的文件系统的共同信息放入内核;其中有一个字段火函数来支持linux所支持的所有实际文件系统所提供的任何 *** 作。对所调用的每个读写或者其他函数,内核都能把它们替换成支持本地linux文件系统,NTFS文件系统或者文件所在的任何文件系统的实际函数。至于vfs的工作原理 就不是三言两语可以解释清楚的了、里面包含了很多知识包括文件系统、超级块、i节点等等知识。其实主要就是用户安装了不同的文件系统,每个特定文件系统上都实现了包括open() close(),read(),write()等等的 *** 作,在安装的时候,每个特定的文件系统会在虚拟文件系统上注册,当用户需要对特定文件系统进行 *** 作时 只需调用统一的系统调用,虚拟文件系统能够调用对应文件系统上的函数来对文件进行 *** 作。详细的工作原理和实现 楼主需要花时间去学一学 *** 作系统知识可一参考《深入理解Linux内核》《深入linux内核架构》等书欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)