virtual-memory - 页表如何存储在主内存中?

标签 virtual-memory

我知道页表存储在内存中,每个进程都有自己的表,但是每个表都有条目作为虚拟内存中虚拟页的数量,那么每个进程如何有一个表并且每个表都驻留在主内存中,此外,每个表中的条目数大于主内存中的物理页数......有人可以向我解释我很困惑,
提前致谢。

最佳答案

通常,页表被称为存储在内核拥有的物理内存中。然而,页表会变得非常大,因为每个进程都有自己的页表(除非操作系统使用反向分页方案)。即使是具有典型 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/

相关文章:

javascript - Node.js 中的 ENOMEM 由高虚拟内存使用率引起

Linux:禁用交换时 mmap() 的行为

raspberry-pi - ARM 处理器如何使用超过 4GB 的内存?

c++ - 为什么我不能在同一个分配中保留两个连续的内存区域而不用一次调用保留它们?

java - Linux下Java的虚拟内存使用,使用了太多内存

winapi - 从内存地址获取所有者模块

c - 使用 1GB 页面会降低性能

c - 如何在 Windows 平台中找到内存映射文件的末尾而不事先知道文件的大小?

linux - Linux下共享库加载地址

Eclipse INI配置问题