gpt4 book ai didi

linux-kernel - 内核虚拟地址和内核逻辑地址的区别?

转载 作者:行者123 更新时间:2023-12-03 11:45:43 25 4
gpt4 key购买 nike

我无法准确区分内核逻辑地址和虚拟地址。在 Linux 设备驱动程序书中,它说所有逻辑地址都是内核虚拟地址,并且虚拟地址没有任何线性映射。但是,当我们说它是合乎逻辑的,当我们说虚拟时,我们在什么情况下使用这两个?

最佳答案

Linux内核映射属于内核的大部分虚拟地址空间,以物理内存第一部分的偏移量进行1:1映射。 (对于 32 位 x86 而言,1Gb 略低于 1Gb,对于其他处理器或配置可能会有所不同)。例如,对于 x86 上的内核代码,地址 0xc00000001 映射到物理地址 0x1。

这称为逻辑映射 - 1:1 映射(带有偏移),允许内核访问机器的大部分物理内存。

但这还不够——有时我们在 32 位机器上有超过 1Gb 的物理内存,有时我们想将非连续的物理内存块引用为连续的以使事情变得简单,有时我们想映射不是 RAM 的内存映射 IO 区域。

为此,内核在其虚拟地址空间的顶部保留一个区域,在该区域中执行“随机”页到页映射。那里的映射不遵循逻辑映射区域的 1:1 模式。这就是我们所说的虚拟映射。

重要的是要补充一点,在许多平台上(x86 就是一个例子),逻辑和虚拟映射都是使用相同的硬件机制(TLB 控制虚拟内存)完成的。在许多情况下,“逻辑映射”实际上是使用处理器的虚拟内存设施完成的,所以这可能有点令人困惑。因此,不同之处在于完成映射的模式:逻辑为 1:1,虚拟为随机。

关于linux-kernel - 内核虚拟地址和内核逻辑地址的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8708463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com