如何理解d_hash()的功能?

时间:2013-08-28 00:24:59

标签: c filesystems kernel

代码是:

static inline struct list_head * d_hash(struct dentry *parent, unsigned long hash)
{
      hash += (unsigned long)parent / L1_CACHE_BYTES;
      hash = hash^(hash>>D_HASHBITS)^(hash>>D_HASHBITS*2);
      return dentry_hashtable + (hash & D_HASHMASK);
}

如何理解这个功能?
特别是,“hash = hash^(hash>>D_HASHBITS)^(hash>>D_HASHBITS*2);

谢谢

PS:代码形式为:http://lxr.oss.org.cn/source/fs/dcache.c?v=2.6.16#L885

1 个答案:

答案 0 :(得分:0)

首先,您需要了解哈希函数及其使用原因。接下来,您需要知道dcache(目录缓存)应该做什么。从usenix.org:d-cache“在内存中保存一个表示文件系统目录结构的树。”基本元素称为d-entry

该函数返回指向列表的指针,并需要父dentry和hash。列表指针指向一个“桶”(wikipedia)条目,这些条目与提供的条目具有相同的哈希值(这必须单独搜索)。

您在评论中提到的行依赖于按位运算符(wikipedia)。 '^'是独家或','>>'是一个正确的转变,'&'是一个按位和。

这应该让你开始理解这个功能。你必须查找常量,例如“D_HASHBITS”。