哈希页表的存储位置

时间:2019-02-18 00:52:50

标签: operating-system paging

我了解的是我们不能保证大量(大于页面大小)的连续内存。如果页表本身的大小足够大而无法存储在1页中,那就是一个问题。因此,我们再次在页表上进行分页,这称为多级页表。但是,如果地址大于32位,则多级页表不是一个很好的选择,因为更多的调整会占用大多数计算量。

为避免使用此哈希页表。

据我了解,哈希页表[可索引]的大小应小于页面大小。因此,对于大地址而言,将会有很多冲突。如果页面大小为12位,则页面表包含2 ^ 52个条目,哈希表大小将为2 ^ 12(大约不知道确切的计算结果),然后每个索引为2 ^ 40大小的链表。那么这如何可行。所以我的假设是哈希表将使用其他方法或其他方式存储。操作系统概念书dint对此做了很多解释,其他站点也对此进行了解释。

我已阅读第380页的操作系统概念。

1 个答案:

答案 0 :(得分:0)

  

我了解的是我们不能保证大量(大于页面大小)的连续内存。

为什么?通常,物理内存管理器必须能够处理(某些)设备驱动程序的物理连续缓冲区的分配。

  

因此,我们再次在页表上进行分页,这称为多级页表。但是,如果地址大于32位,则多级页表不是一个很好的选择,因为更多的调整会占用大多数计算量。

为什么?大多数CPU使用多级页表。然后使用TLB(“翻译后备缓冲区”)来避免在页表中查找内容的开销。现代的80x86不仅发展得更快,而且还具有更高级别的分页结构缓存(除TLB之外)。

  

据我了解,哈希页表[可索引]的大小应小于页面大小。因此,对于大地址而言,将会有很多冲突。如果页面大小为12位,则页面表包含2 ^ 52个条目,哈希表大小将为2 ^ 12(大约不知道确切的计算结果),然后每个索引为2 ^ 40大小的链表。那么这怎么可行。

问题是;如果转换不在哈希表中(例如,由于有限的哈希表大小),通常CPU会产生故障,要求操作系统提供帮助,并且操作系统会找出转换并将其推入哈希表中(在驱逐某些内容之后)否则从散列表中腾出空间)。当然,操作系统可能会使用自己的多级页表来找出翻译(推入哈希表);因此,整个“哈希表”最终变成了一层烦人的额外膨胀(与本身支持多级页表的CPU相比)。