CPU 上的每个进程是否都有一个页表,或者每个进程的页表是否相同?

CPU 上的每个进程是否都有一个页表,或者每个进程的页表是否相同?

操作系统使用页目录和页表来处理内存虚拟化。

我不确定的一件事是在这个问题的标题中:该结构对于每个进程是否都相同,或者每个进程是否拥有一个特定的页表?

为每个进程设置一个页表似乎很麻烦,也不切实际。此外,整个数据结构(页目录、页表……)似乎可以处理物理内存的每个字节。

答案1

操作系统中实现虚拟内存的每个进程都有自己的地址空间。这更安全,因为它允许进程之间隔离,并实现地址随机化。此外,使用不同的物理内存配置也更容易管理,并允许过度使用。

地址空间大小实际上可能比物理内存大得多。这是一个特点:更多的空间用于地址随机化、映射文件和其他巧妙的技巧。

在 Linux 上(尽管其他操作系统肯定也类似)每个进程都有自己的一组页表。也许 4 个字节用于管理 4 KB 的页框,这是可以管理的。但是,使用大量内存乘以大量进程,并且您的页表会使用大量内存和 CPU。这种情况有时会发生在大型数据库中,可以通过使用更大(“巨大”)的页面大小来缓解。

相关内容