分页:基本,分层,散列和反转

时间:2011-04-04 21:12:49

标签: operating-system hashtable paging page-tables

关于操作系统和页表,似乎有4种常用的分页和页表方法

Basic - 存储页码和偏移的单页表

Hierarchical - 一个多层表,将虚拟地址分成多个部分

Hashed - 散列页表,通常可能包含映射到同一条目的多个哈希

反转 - 逻辑地址还包括PID,页码和偏移量。然后使用PID查找表中的页面,并将表中的行数添加到偏移量中以查找主存储器的物理地址。 (粗糙,可能是可怕的定义)

我只是想知道每种方法的优点和缺点是什么?看起来基本是更简单的方法,但也可能在内存中占用更多空间以获得更大的地址空间。 还有什么?

1 个答案:

答案 0 :(得分:2)

构建可用页面模型的关键是最大限度地减少不必要的条目的未使用空间。您希望在保持内存查找的计算成本较低的同时最小化所需的内存量。

  • Basic可占用大量内存(对于使用4GB内存的现代系统,仅适用于表格的300 MB),因此不切实际。

  • 通过添加实际使用的子表,层次结构大大减少了内存。但是,每个进程都有一个根页表。如果进程的内存占用分散,则辅助表中可能仍会存在大量不必要的条目。对于内存而言,这是一个比Basic更好的解决方案,并且仅引入了边际计算增加。

  • 哈希因哈希冲突而无法正常工作

  • Inverted是使Hashed工作的解决方案。内存使用非常小(与单个进程的Basic表一样大,加上一些PID和链接开销)。问题是,如果存在哈希冲突(多个进程使用相同的虚拟地址),则必须遵循链信息(就像在链表中一样),直到找到具有匹配PID的条目。除了哈希计算之外,这可能会产生大量的计算开销,但会使内存占用空间尽可能小。