为屏蔽各种底层文件系统差异,vfs是在应用层和fs之间抽象而来,而应用层为了统一接口,则遵循POSIX协议,调用glibc中函数,实现访问所有文件,可以认为vfs才是直接面对用户态程序的入口,而用户态程序又经过glibc访问vfs。
文件系统一般分3类:在存储介质中的文件系统(ext2、ext3等)、基于内存的文件系统(proc、sysfs、debugfs等),网络文件系统(不熟)。
从用户角度来看,一个应用程序打开某个文件,返回的是一个int型的句柄,但是这个句柄在内核中是对应一个file结构,该句柄当然也是内核分配的,不过两个独立应用程序可能出现相同的句柄,但是它们实际对应的是不同的文件。该句柄只有在该应用程序中有效。
而对于内核而言,真正有意义的是inode结构,每一个具体的fs中,inode都是唯一的,它记录了其一切有用信息,对于用户访问文件的入口,如open,read等调用,提示下open一个文件,成功的返回值是一个int的整数,0,1,2一般是标准错误输入输出等,因此句柄会从3开始。
对于一个具体的fs,一定有其super_block,因为他包含了该超块内操作inode的具体函数实现,这也体现了vfs的层次和作用。
内核将所有活动文件的超块维护起来,目的可能是为了sync数据到存储介质中吧,因为遍历所有超块中的脏inode,就能同步数据了。
阅读(1371) | 评论(0) | 转发(0) |