Operating system 分页:基本、分层、哈希和反转

Operating system 分页:基本、分层、哈希和反转,operating-system,hashtable,paging,page-tables,Operating System,Hashtable,Paging,Page Tables,关于操作系统和分页表,似乎有4种通用的方法来分页和分页表 基本-存储页码和偏移量的单页表格 分层-将虚拟地址分解为多个部分的多层表 散列-一个散列页表,通常包括映射到同一条目的多个散列 反向-逻辑地址还包括PID、页码和偏移量。然后使用PID查找表中的页面,并将表中的行数添加到偏移量中,以查找主存的物理地址。(粗略的,可能是可怕的定义) 我只是想知道每种方法的优缺点是什么?看起来basic是一种更简单的方法,但也可能会占用更多的内存空间来获得更大的地址空间。 还有什么?构建可用页面模型的关键是最

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

基本-存储页码和偏移量的单页表格

分层-将虚拟地址分解为多个部分的多层表

散列-一个散列页表,通常包括映射到同一条目的多个散列

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

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

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

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

  • 通过只添加实际使用的子表,层次结构大大减少了内存。尽管如此,每个进程都有一个根页表。如果进程的内存占用是分散的,那么辅助表中可能仍然有很多不必要的条目。这是一个关于内存的比Basic好得多的解决方案,并且只增加了少量的计算量

  • 由于哈希冲突,哈希无效

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