关于操作系统和页表,分页和页表似乎有4种通用方法
基本 - 存储页码和偏移量的单个页表
分层的 - 将虚拟地址分解为多个部分的多层表
散列 - 散列页表,通常可能包含映射到同一条目的多个散列
Inverted - 逻辑地址还包括 PID、页码和偏移量。然后使用 PID 在表中查找页面,并将表中的行数添加到偏移量以找到主内存的物理地址。 (粗略的,可能是糟糕的定义)
我只是想知道每种方法的优缺点是什么?看起来 basic 是更简单的方法,但也可能占用更多内存空间以获得更大的地址空间。 还有什么?
最佳答案
构建可用页面模型的关键是尽量减少不必要条目的未使用空间。您希望最小化所需的内存量,同时保持较低的内存查找计算成本。
Basic 会占用大量内存(对于使用 4GB 内存的现代系统,仅表可能就需要 300 MB),因此不切实际。
Hierarchical 通过仅添加实际使用的子表来大量减少内存。尽管如此,每个进程都有一个根页表。而如果进程的内存占用是分散的,那么从表中可能还会有很多不需要的表项。这是一个比 Basic 更好的内存解决方案,并且只增加了边际计算量。
由于散列冲突,散列不起作用
Inverted 是使 Hashed 工作的解决方案。内存使用非常小(与单个进程的基本表一样大,加上一些 PID 和链接开销)。问题是,如果存在哈希冲突(多个进程使用相同的虚拟地址),您将不得不遵循链信息(就像在链表中一样),直到找到具有匹配 PID 的条目。除了散列计算之外,这可能会产生大量的计算开销,但会保持尽可能小的内存占用。
关于operating-system - 分页:基本、分层、散列和倒置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5544419/