内存映射设备如何阻止RAM响应读操作?

时间:2009-10-19 19:09:59

标签: low-level

假设我们有一个占用某个地址空间的内存映射设备。 CPU尝试从设备读取内容,因此它尝试读取该地址空间中的某个单词。真的发生了什么?当内存控制器响应时,它将导致总线争用,因为RAM和设备都试图响应相同的请求。

4 个答案:

答案 0 :(得分:2)

有多种方法可以实现:

  • 支持内存控制器 - 例如允许将某些内存范围重定向到另一个控制器。这在NUMA架构中是隐含的 - “最接近”的内存控制器将处理某个地址范围,并传递所有其他请求。在链中的某个位置 - 或者在链的外面,您可以放置​​电路来处理存储器映射的设备。这在微控制器中很常见,它通常处理片上RAM,​​PROM和/或闪存以及外部连接的存储器。

  • 具有直接内存访问(DMA)的硬件 - 可由任何允许多个设备访问同一内存的控制器提供。外部设备只是写入您要读取的RAM。您需要一个addiotnal协议进行同步,但内存控制器可以支持或提供该协议。

  • 软故障 - 在虚拟内存系统中,访问无效地址将导致软故障,故障处理程序可以提供从端口读取的实际值。这会带来明显的性能损失,但对于小型数据集,与实际硬件访问相比,这可能是微不足道的。

免责声明:这些是经过教育的猜测,通过查看其他人的肩膀来获取一些信息。但我更喜欢在维基百科之前考虑它:)

答案 1 :(得分:1)

不可能发生,因为物理地址多于ram地址

在物理层面,总线的地址线数多于RAM所需的地址线数。处理器要么对地址进行解码,要么选择带有一些和I / O的RAM,或者有时只使用整个地址线来表示RAM(如果它处于一种状态)或I / O(如果它在另一种状态下)。

在嵌入式系统中,它可能完全按照我的描述实现,但大多数情况下还有另一层涉及MMU和多个I / O总线。很少,某种类型的永远在线的MMU将在页表条目中指定I / O总线或内存与I / O,但随后该PTE由地址选择,所以这一切都归结为最终的寻址

最终,某种类型的寻址机制会导致在某处激活物理信号的路径。硬件只对地址进行解码,以便不会同时选择RAM和I / O.

令人困惑的是,MMU可以将一个I / O页面放在虚拟空间中的RAM页面旁边,但是那些映射到的物理地址是可能会有所不同。

答案 2 :(得分:1)

PC的芯片组和BIOS共同工作,在RAM中打了一个洞。如果尝试寻址为I / O保留的空间,则不允许内存控制器响应。

答案 3 :(得分:0)

我猜这是相当的架构/系统依赖。例如,在ARM上,在底层,您不能同时有一个地址指向两个内存位置。你的MMU必须管理它。您的内核(或其他低级代码)管理不同情况下的MMU设置,以便您的设备不会映射到与您要使用的RAM相同的位置。