我试图了解Linux内核使用的内存地址类型,它们是
- 用户虚拟地址
- 实际地址
- 巴士地址
- 内核逻辑地址
- 内核虚拟地址
我明白了以下几点:
用户虚拟地址:用户看到的地址可能不在 RAM 中,它可能是交换地址。
实际地址:每个内存地址都必须以某种形式表示物理地址。物理地址是直接形式。
同样:内核逻辑地址和内核虚拟地址。
我无法理解总线地址及其要求。
如果解释起来很幼稚,参考材料可能会很有用。
答案1
在大多数系统中,物理地址空间被映射到各种“设备”——其中一个是系统 RAM,另一个可能是 PCI 总线之类的东西。总线地址是实际放置在映射总线的地址引脚上的值,通常是从物理地址中获取的某个范围的位。其他总线引脚(例如片选和读/写等)可能取自物理地址,也可能不取自物理地址。这是连接设备和总线的“内存映射”方法,但它不是唯一的方法 - 例如,Intel 处理器有特殊的 I/O 指令来指示您正在与设备通信,并且物理地址不起作用参与其中。在这种情况下,总线地址被编码在指令中或驻留在寄存器中。干杯!
穆雷...