首先vfs是内存中维护的虚拟数据,是对各种fs的高层次的抽象,一般主要包括:dentry、inode、super_block这几个真实的文件系统物理信息的内存表示,通过管理这些数据结构,就完成了对该文件系统的操作。
对于一个文件系统而言,super_block是最关键的数据结果,它代表 了这个文件系统自身,它存有fs中文件块的大小,超块的操作函数等,超块的内容具体fs在存储介质上的超块数据结构获得,操作函数结构为super_operation。
dentry是fs中的目录,目录和文件按树状分布,通过遍历目录可以到达根目录,这个在vfs中反映fs系统文件的树状关系。目录也是文件,每个文件都有dentry结构,其链接到上级目录的dentry,为加快对dentry的查找,内核使用的slab做dentry cache,并加入hash表。
inode为索引节点,代表一个具体文件,包含了该文件的一些描述信息。主要是对文件的操作函数和文件缓存,对于一个文件,inode是唯一的。主要关注i_fop(基本的操作函数)和i_mapping(对文件内容进行缓存,无论是读还是写,现在缓存中找,之后才可能去磁盘中操作,主要是通过对文件地址空间的一种映射关系去确定实际的缓存数据)。
最后来谈谈file文件结构,它是对一个file的内存态数据表示,它主要是f_mapping(address_space),类似于i_mapping。
对于多个进程打开同一个文件,大部分情况下,进程内的file是多个实体,进程间file内核表示是互不相同的,除非是父子进程。file结构只是在进程角度上,表示打开的文件。所以数据一致性不是page cache能保证的,是要应用程序保证的。
阅读(1169) | 评论(0) | 转发(0) |