在具有highmem的x86机器上,当内核想要查询物理帧的内核虚拟地址时,它将使用page_address
。它的工作原理取决于是否定义了宏WANT_PAGE_VIRTUAL,它决定void *virtual
中是否添加了struct page
。如果没有void *virtual
,内核将使用哈希表page_address_htable
进行转换,这似乎是x86应用的方法。相反,mips和m68k只需要void *virtual
(我对此不太确定)。
所以我的问题是,为什么x86更喜欢哈希表到改进的struct page
?它带来了哪些好处?
答案 0 :(得分:6)
由于需要大量的struct page
(每页一个!),在结构中添加一个以上的单词是非常昂贵的(或者相反,即使用一个单词缩小结构也会产生很多效益)。在32位体系结构上WANT_PAGE_VIRTUAL
特别昂贵 - 没有它,struct page正好是32个字节,这意味着它很好地包含在缓存行等中。
在x86上,哈希查找速度足够快(因为乘法在x86上很快),所以权衡强烈支持使结构页面变小。我猜m68k乘法是足够昂贵的,膨胀结构页面到36字节是值得的。