VFS的缩写是Virtual Filesystem Switch or Virtual file system.我觉得地一个比较实至名归。
VFS在linux kernel当中是作为所有文件系统的抽象而存在的!他也是linux为什么能兼容众多fs的原因所在。
结构
Dentry
是的,一直以来我都没有对dentry深入的理解。
inode是目录和文件的统一抽象,可是VFS经常要执行diretory-specific operations, such as path name lookup. Path name lookup involves translating each component of a path, ensuring it is valid, and following it to the next component. To faciliate this, the VFS employs the concept of a directory entry(dentry). A dentry is specific component in path. 原文为Robert love所写。哦,原来dentry 和inode其实是一回儿事,dentry也是对目录和文件的一个统一抽象,只不过dentry包含的多是和目录项操作相关的数据成员。目录项操作通常很耗时,dentry可以简化这个过程。
The dentry cache, dcache
你要知道,内核从无到有创建一个dentry是很费力的。真可谓是千辛万苦。省略。。
所以在不用这些dentry时,不能随便就destroy 或是free了,内核通常是用Dentry cache缓存起来的。
dcache由三部分组成:
正在使用的dentry 用d_alias 链接到inode,没有使用的dentry用d_lru链接到super_block.这就是cache。实际上还有一个hashtable,使用来加速查找上面中情况的dentry,所以hashtable存储了所有我们已经访问但是没有删除的dentry。是不是很简单呀。
Inode
inode 这个大家最熟悉了,是表示文件和目录元信息的结构。不多说了。
The inode cache, icache
dentry和inode一衣带水,没有理由不为inode弄个icache。基本上和decache一样。不再说明了。
File
内核中每一个结构,都是有他们特定的用途。搞懂这个很重要。也可以说这是理解内核的关键所在。
dentry是为了目录项操作而生,而inode是为了元数据而生。而file呢?是对正在被操作的文件的一种抽象,a view一个视角。file就是为了操作一个文件而生。
file->path->dentry->inode->super_block
file->path->dentry->super_block
Super_block
这个就是后面的暗黑森林了。super_block是文件系统的抽象。
struct vfsmount
只有挂载了的文件系统才有实际意义,vfsmount就是表示一个文件系统挂载相关的信息。
阅读(1765) | 评论(0) | 转发(0) |