linux - 每个进程的页表是否包含映射到内核地址空间的条目?

标签 linux kernel

在Linux中,每个进程都有一个页表,它将用户地址空间映射到物理页框。

每个进程的页表是否包含映射到内核地址空间的条目?

如果是,则所有进程的页表都将一个内核镜像映射到同一地址。这意味着所有表都包含相同的内核地址条目。浪费吗?

最佳答案

是的,有点像。顶级页表是针对每个进程的,但它可以包含内核地址空间的单个条目(在 64 位体系结构上或在 32 位体系结构上有多个条目)。然后,该条目将指向在每个进程之间共享的公共(public)“子”页表。这些条目也将被标记为“全局”,以便硬件在上下文切换时保留 TLB 中的虚拟到物理转换。

每个进程都需要内核空间条目,因为内核代码可以在任何进程中随时执行。例如,任何中断或系统调用在执行适当的处​​理程序时都会立即尝试访问内核地址。如果当前进程的地址空间中没有映射,则无法访问内核代码。

通过让每个进程共享内核地址的公共(public)“子”页表,内核不必复制内存中的条目并浪费空间。并且对内核内存使用情况的任何更新只需要修改一个页表而不是每个进程。

关于linux - 每个进程的页表是否包含映射到内核地址空间的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33294535/

相关文章:

c# - 从 Linux 盒子远程执行 Windows 10 命令

mysql - 设置 crontab 以停止和启动 mysql 和 httpd 的正确方法

linux - nf_ct_get(skb,&ctinfo) 函数获取 IPv6 udp 数据包的 netfiter conntrack 'struct conn'

linux - 如何理解虚拟到物理的翻译?

c - Flash 视频游戏中的模式匹配并将鼠标点击发送到 Linux 中的该区域

json - apt-vim 插件 FileNotFoundError

linux - 用户输入以在 linux shell 脚本中设置校准月份和年份

c - 基本内存地址混淆

c - 编译内核模块时如何解决函数名冲突

java - 没有内核的 Libsvm