【问题标题】:Why is there a 1:1 linear mapping in Linux kernel address space?为什么 Linux 内核地址空间中存在 1:1 线性映射?
【发布时间】:2019-01-13 23:38:04
【问题描述】:

据我了解,内核内存的下部是与物理地址 (RAM) 1:1 映射的,我想知道它带来了什么好处,尤其是在 x86 环境中。启用 MMU/TLB 后,通过 CPU 地址总线发送的每个地址都被视为虚拟/逻辑地址。即使线性到物理的转换可以通过减去偏移量来完成,但 MMU 仍然会遍历页表来转换线性地址。我显然看不到任何性能优势。我错过了什么?

【问题讨论】:

    标签: memory-management linux-kernel kernel mmu


    【解决方案1】:

    没有任何好处。 保护模式提供分页机制,因此每个进程都可以完全隔离并受到保护。启用分页后,代码(内核或用户程序)中使用的所有地址都必须是虚拟地址,不能直接使用物理地址。 内核只需要一个简单的方法来访问RAM中的每个字节。 在分页机制下,最简单的映射模式是1:1映射。虽然内核仍然不能跳过页面映射过程,但这种模式实现起来非常简单。任何其他复杂的映射模式都不会有明显的好处。

    【讨论】:

    • 那么为什么线性映射需要偏移?使用没有偏移的精确 1:1 映射会更简单
    • @DzmitrySankouski 这可能是一个历史问题...
    • @DzmitrySankouski 根据我目前所读到的内容,我可以想到两个原因。 1) 出于安全考虑,kaslr(地址空间随机化)意味着每次启动时内核都会位于一个新位置,从而更难破解。 2) 放置在低内存中的内核地址空间(没有偏移)将限制从虚拟地址 0 开始的 16 位或 32 位遗留程序的可用地址空间。请参阅here
    猜你喜欢
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2014-11-13
    • 2017-05-23
    • 2011-09-08
    • 2012-11-15
    相关资源
    最近更新 更多