页表如何存储在主内存中?

SE *_*ent 3 virtual-memory

我知道页面表存储在内存中,每个进程都有自己的表,但是每个表都有条目作为虚拟内存中虚拟页面的数量,所以每个进程如何有一个表,每个表都驻留在主内存中,每个表中的条目数量大于主存储器中的物理页面数量...有人可以向我解释我很困惑,在此先感谢.

Old*_*kus 10

通常,页表被称为存储在内核拥有的物理内存中.但是,由于每个进程都有自己的页表(除非操作系统使用反向分页方案),因此页表可能会变得非常大.对于具有典型4KB页面大小的32位地址空间,我们将需要20位虚拟页面编号和12位偏移.20位VPN(虚拟页码)意味着将有2 ^ 20个翻译.即使每个翻译,即Page Table条目需要4字节的内存,它也相当于4x(2 ^ 20)= 4MB的内存,所有这些只是地址转换,这很糟糕.

因此,现代操作系统将这样大的页表放在虚拟内核内存(即硬盘)中,并在需要时将它们交换到物理内存.因此,页表的虚拟化方式与每个页面虚拟化的方式相同.

我建议你阅读这本精彩而简单的书籍,以清楚了解Memory Virtualization和Paging相关概念:http: //pages.cs.wisc.edu/~remzi/OSTEP.

  • 这本书看起来不错...正在阅读~ (2认同)