我知道页表存储在内存中,每个进程都有自己的表,但是每个表都有条目作为虚拟内存中虚拟页的数量,那么每个进程如何有一个表并且每个表都驻留在主内存中,此外,每个表中的条目数大于主内存中的物理页数......有人可以向我解释我很困惑,
提前致谢。
最佳答案
通常,页表被称为存储在内核拥有的物理内存中。然而,页表会变得非常大,因为每个进程都有自己的页表(除非操作系统使用反向分页方案)。即使是具有典型 4KB 页面大小的 32 位地址空间,我们也需要 20 位虚拟页号和 12 位偏移量。 20 位 VPN(虚拟页码)意味着会有 2^20 次翻译。即使每个转换,即页表条目需要 4 字节的内存,它也相当于 4x(2^20)= 4MB 的内存,所有只是地址转换,这很糟糕。
因此,现代操作系统将如此大的页表放在虚拟内核内存中,即硬盘,并在需要时将它们交换到物理内存中。因此,页表的虚拟化方式与每个页面的虚拟化方式相同。
我建议您阅读这本精彩而简单的书,以清楚了解内存虚拟化和分页相关概念:
http://pages.cs.wisc.edu/~remzi/OSTEP .
关于virtual-memory - 页表如何存储在主内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24322135/