在Linux中,每个进程都有一个页表,它将用户地址空间映射到物理页框。
每个进程的页表是否包含映射到内核地址空间的条目?
如果是,则所有进程的页表都将一个内核镜像映射到同一地址。这意味着所有表都包含相同的内核地址条目。浪费吗?
最佳答案
是的,有点像。顶级页表是针对每个进程的,但它可以包含内核地址空间的单个条目(在 64 位体系结构上或在 32 位体系结构上有多个条目)。然后,该条目将指向在每个进程之间共享的公共(public)“子”页表。这些条目也将被标记为“全局”,以便硬件在上下文切换时保留 TLB 中的虚拟到物理转换。
每个进程都需要内核空间条目,因为内核代码可以在任何进程中随时执行。例如,任何中断或系统调用在执行适当的处理程序时都会立即尝试访问内核地址。如果当前进程的地址空间中没有映射,则无法访问内核代码。
通过让每个进程共享内核地址的公共(public)“子”页表,内核不必复制内存中的条目并浪费空间。并且对内核内存使用情况的任何更新只需要修改一个页表而不是每个进程。
关于linux - 每个进程的页表是否包含映射到内核地址空间的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33294535/