现在的位置: 首页 > 综合 > 正文

linux文件系统的系统分析–(十二)vfs层的三个hashtable

2013年04月05日 ⁄ 综合 ⁄ 共 944字 ⁄ 字号 评论关闭

vfs_caches_init中有三个重要的hashtablemount_hashtabledentry_hashtable
inode_hashtable

Hashtable有什么作用?主要的查找的效率很高,vfs层用这三个就是为了提高查找效率。另外一个,inodedentry是内存中的数据,而数据的来源是硬盘,如果我们获得了inodedentry数据,加到hashtable中,方便下一次的快速获取,而不是再次访问硬盘。

Mount_hashtable:

mnt_init中完成mount_hashtable的初始化。而在挂载文件系统的时候,一个重要函数graft_tree会将文件系统的vfsmount结构体内嵌的structlist_headmnt_hash加入到mount_hashtable中。这样在做文件系统挂载或者路径查找时,有需要做文件系统转换的时候,比如follow_mountfollow_down函数都会调用lookup_mnt__lookup_mnt可以快速的查找要转换的文件系统。

Dentry_hashtable:

dcache_init中完成dentry_hashtable的初始化。在路径查找中就会用到这个hashtableLink_path_walkdo_lookupd_lookup__d_lookup

structhlist_head *head = d_hash(parent,hash);

同样的利用hash快速找到dentry

Inode_hashtable:

inode_init中完成inode_hashtable的初始化。比如sysfs_get_inodeiget_locked:

structhlist_head *head = inode_hashtable + hash(sb, ino); //利用inode_hashtable快速查找

而且iget_lockedget_new_inode_fast__inode_add_to_lists

hlist_add_head(&inode->i_hash,head);

利用inode内嵌的structhlist_node i_hash结构加入到inode_hashtable,方便以后的查找。

抱歉!评论已关闭.