对于CPU上的每个进程,是否有页表?还是每个进程都一样?

操作系统使用Page Directory和Page Table来处理内存虚拟化

我不确定的一件事是这个问题的标题:每个进程的结构是一样的,还是每个进程都拥有一个特定的页面表?

每个stream程都有一个页面表,这似乎很麻烦和不切实际。 还有一个事实,就是整个数据结构(页面目录,页面表格…)似乎都是针对物理内存的每一个字节。

实现虚拟内存的操作系统中的每个进程都有自己的地址空间。 这是更安全的,因为它允许进程之间的隔离,并解决随机化。 也更容易pipe理与不同的物理内存configuration,并允许overcommit。

地址空间的大小实际上可能比物理内存的数量大得多。 这是一个function:地址随机化,映射文件和其他整洁的技巧更多的空间。

在Linux上(尽pipe其他操作系统肯定是相似的), 每个进程都有自己的一组页表 。 pipe理4 KB页面帧可能需要4个字节,可pipe理。 虽然,使用大量的内存乘以大量的进程,你的页表使用大量的内存和CPU。 这种情况有时对大型数据库尤其如此,可以通过使用更大(“巨大”)的页面大小来缓解。