那前面我们给大家介绍了
关于一个具体的simple file system
一个大致的情况
在这个simple file system之上呢
我们还有一层Virtual file system
那它呢起什么作用 大家可以看一看
可以看出来VFS呢
是在simple FS之上
但是在我们应用之下
这么一个中间位置
那么它起到什么作用呢
其实它起到一个承上启下的作用
向下呢 它除了可以
管理simple file system呢
也可以管理不同的device
甚至其它类型文件系统
这是它的一个特点
向上它提供了一层统一的接口
给我们的应用程序来使用
那我们应用程序不用关注
底下到底是哪些具体的文件系统
是设备文件系统还是simple file system
还是其它一些file system
不用care（关心）
那它只需采取统一的一个接口
比如说open read write close
这么些基本函数呢
就可以访问不同类型的文件系统
那为了能够完成这样的功能呢
我们其实需要在VFS这一层
建立和我们进程的一个联系
同时能够把抽象的
file directory和inode
和我们具体的文件系统进行对接
这就是VFS它最主要的一个功能
我们再具体看一下
从大家最能理解的file这个结构入手
那么file就代表一个文件
那么它呢 是站在应用角度
能够看到的一些信息
比如说这个文件
是只读还是可读写的
它当前已经打开了
还是关闭了等等
这一系列信息呢
其实我们的应用程序是需要知道的
但是光有这些信息还是不够的
我们还需要去了解
怎么去进一步地对这个文件
进行相应的操作
可以看到 比如说
从进程角度而言
它需要记录它到底打开了哪些文件
为此会有一个 关于文件的一个list
在这个list里面呢 会有一些信息
比如说举个例子 fd这个信息
fd代表了当应用程序
执行open之后 返回一个整型
但这个整型其实就是一个index
在哪体现呢 在这个fd_array
那么这个index呢
可以访问这个数组
从而可以找到
进一步的文件的信息
另一方面呢 我们可以看到
在file里面有一个成员变量是inode
也意味着我们可以通过file
找到它所对应的inode
有了inode之后
我们就可以进一步去完成
对具体文件系统一个映射
可以看着 在这里面
inode还有不同的特点
比如说它可以是一个sfs
也可以是一个device
在这里面根据它的type可以做区分
这都在inode的成员变量里面
在inode里面呢
除了它的类型信息之外
还有一些跟它使用情况
相关的一些信息
比如说Reference count
就是引用计数
还有open count 打开的计数
所以引用计数是代表的是
我们操作系统或者我们应用程序
对当前这个inode做了一个访问
我们需要记录一下
因为只有当所有这些上层的应用
不对inode进行访问之后
我们才可以把这个inode进行回收
这是一方面
另一方面呢你打开一个文件
那也意味着这个文件所对应的inode
需要有一个加1的操作
来记录当前到底有多少个打开的操作
针对这个inode
这是这两个信息
这两个信息很重要
因为它表示了
关于inode资源的使用情况
这是关于这两块一个介绍
再接下来是跟inode相关的操作
一部分是跟文件系统相关
一个是跟inode本身相关
我们首先看一下
这个inode所属的文件系统
具有什么样特征
可以看出来一个inode
其实它有一个成员变量叫做in_fs
那么这个in_fs决定了
这个inode到底属于哪个文件系统
可以出来这是一个fs的一个结构
那这个fs呢是属于VFS的
我们刚才讲的sfs_fs是不一样的
那个是一个具体的
simple file system的一个描述
而这是一个抽象的VFS的
一个system的描述
可以看出来 在这里面
它很重要的一点是
它包含了对不同类型
文件系统的一个表示
这里面又出现了sfs_fs
以及还有一些具体的
这里面没有展现出来的
比如device_fs等等
那么有了这些成员变量之后呢
我们再结合一些函数指针
就可以有效在VFS这个层面
统一地对不同类型文件系统进行处理
第二个是关于inode本身一些操作
那么这里面列出了关于inode一系列的
统一的一层函数调用一些接口
比如说open close read write
这是大家经常看到的
以及得到目录这个目录项所需要的
叫做get directory entry这么一个操作
这一些操作呢
就是一个统一的interface
至于这底下具体实现
是和我们具体文件系统相关的
我们大家还可以回忆一下
我们前面讲SFS的时候给大家提过
SFS呢 会设定它那个inode
所对应的具体的操作
比如sfs_open sfs_ close等等
有了这个接口 我们就完成了
对具体文件系统的一个隔离
同时向上提供了一层统一的接口
方便了应用程序
对文件的访问和操作