0

代码是:

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

4

1 回答 1

0

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

该函数返回一个指向列表的指针,并且需要一个父目录和一个散列。列表指针指向与提供的具有相同哈希的条目的“桶”(维基百科)(必须单独搜索)。

您在评论中提到的行依赖于按位运算符(维基百科)。'^' 是异或,'>>' 是右移,'&' 是按位与。

这应该让您开始了解该功能。您必须查找诸如“D_HASHBITS”之类的常量。

于 2013-11-19T14:43:28.570 回答