我怀疑每个进程都有自己独立的页表,那么为什么需要系统范围的页表呢?此外,如果页表是将虚拟地址映射到物理地址,那么我认为两个进程可以映射到相同的物理地址,因为所有进程都具有相同的虚拟地址空间。这是真的吗?
答案 0 :(得分:1)
关于第二部分,即将虚拟地址映射到相同的物理地址,库代码和应用程序代码的不同实例,这确实是做了什么。代码被赋予只读访问权限,同一虚拟地址被映射到同一物理地址。通过这种方式,不需要在物理内存中具有相同代码的多个副本,所有这些都假设未启用ASLR。
现在关于数据部分,像Linux这样的现代操作系统使用请求分页,这是一个页面只在访问(读或写)时被带到物理内存。此时,内核可以确保为该页面分配唯一的物理地址。我不知道系统范围页表的目的是什么。
答案 1 :(得分:0)
内核将使用系统范围的页表,在大多数系统中,它总是映射到内存中。 (通常,32位系统会将较低的2-3 GB虚拟地址空间分配给用户进程,将较高的1-2 GB分配给内核。)使内核映射在所有进程中通用意味着您没有当您从userland输入系统调用时,担心确保您要运行的内核代码已映射。