VFS是具体文件系统的抽象,依靠超级块、inode、dentry以及文件这些结构来发挥作用,文件系统的架构就体现在这些结构的使用方式中。
1、超级块作用分析
1)
2)所有的dentry都指向一个dentry_hashtable
dentry_hashtable是一个树组,每一个树组成员都是hash链表数据结构。
这里是指内存中的dentry;---如果某个文件已经被打开过,内存中就有该文件的dentry结构,且该dentry链接到dentry_hashtable树组的某个hash链表头。 后续再访问该文件,直接从hash链表里面找到,避免再次读取硬盘。这是dentry的 cache 概念。
3)/home/mnt目录指向一个挂载文件的系统
dentry的d_mounted成员判断目录不是一个普通的目录,而是一个文件系统。不为0:该dentry是个挂载点,有文件系统挂载,需要特殊处理。
如图所示,挂载过来的文件系统本身是一个dentry树,有自己的根目录,两个dentry树之间没有链接关系
如何找到挂载的文件系统在哪里?
新的数据结构vfsmount, 当文件系统被挂载的时候,它的vfsmount结构就被链接到内核的一个全局链表------mount_hashtable数据链表。
mount_hashtable是一个树组,每个成员是一个hash链表。 上文的例子有两个vfsmount,cj文件所在的文件系统vfsmount被链接到mount_hashtable。当发现mnt是一个特殊的目录时,从mount_hashtable树组找到hash链表头,再遍历整个hash链表,就能找到cj文件所在文件系统的vfsmount,然后mnt目录的dentry被替换,
2、dentry作用分析
3、inode作用分析
内核提供hash链表树组inode_hashtable,所有的inode结构都需要链接到树组里面的某个hash链表。【与hash链表树组dentry_hashtable类似】
4、文件作用分析