linux - 为什么内核要在进程的页表中添加内核主页表?

标签 linux linux-kernel

为什么内核将内核母版页表添加到进程的页表中?它可以与所有进程共享,如果母版页表在任何时候发生变化,那么内核也需要更新所有进程的页表吗?

最佳答案

每个进程都需要页表的内核部分才能访问内核内存(例如,处理中断或系统调用)。

内核是否真的需要为所有进程单独更新页面映射取决于页面映射是如何完成的。

对于处于保护模式的基于 x86 的系统,页面映射是使用包含对一组页表的引用的页目录完成的,这些页表又用于管理特定内存块中的每个页面。
因此,必须将特定页的更改取出到特定页表中。但是因为页表是使用特定于进程的页目录引用的,所以不需要为每个进程复制内核页表,即。所有特定于进程的页目录都可以引用同一组内核页表。
因此,不需要将内核页表的更改复制到每个进程,因为它已经存在(由于通过页目录进行引用),因此只需更改处理器的内存地址查找表,以便新的映射是从内存中加载的。
因为这部分高度依赖于实际使用的硬件,所以这可能不普遍适用,即。理论上可能存在一个处理器,内核需要将内核页面更改复制到每个进程。

关于linux - 为什么内核要在进程的页表中添加内核主页表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27604089/

相关文章:

Python:如何连接蓝牙设备? (Linux)

c - 如何在 Linux 源代码中包含用户级 C 程序以与 Linux 内核一起编译?

c - 来自 Linux 内核模块的暂停指令不起作用

c - 什么是 "__maybe_unused"?

optimization - 在 Linux 内核中使用可能/不太可能作为返回参数

linux - 如何查看编译后的linux内核?

java - 无法在树莓派上运行java程序

linux - 自主脚本

linux - 使用 bash 列出脚本中使用的所有变量

linux - 如何使用 sed 替换文本文件中的文件名