gpt4 book ai didi

io - 内存映射 IO - IO 设备如何知道值已更改?

转载 作者:行者123 更新时间:2023-12-01 23:20:47 28 4
gpt4 key购买 nike

IO 设备如何知道属于它的内存中的值在memory mapped IO 中发生了变化? ?

例如,假设内存地址 0 专用于保存 VGA 设备的背景颜色。当我们更改 memory[0] 中的值时,VGA 设备如何知道? VGA 设备是否不断轮询内存位置?或者 CPU 是否会在设备更改值时以某种方式通知设备(如果是,如何通知?)?

一个示例架构是 MIPS。鉴于 MIPS instruction set没有 inout 指令,我不明白它怎么可能与示例中的 VGA 设备通信(更改时)。另一个例子是 ARM 架构。

最佳答案

在内存映射 I/O 中,对设备的内存区域执行内存读/写将导致 CPU 与设备执行事务以获取/存储该值——直接通过 CPU 的内存总线,或者通过辅助总线(例如 ARM 系统上的 AHB/APB)。此内存事务直接通知设备值正在更改;无需单独通知。

您假设内存映射 I/O 由普通 RAM 映射。 事实并非如此。 事实上,这些设备的行为方式可能与真实内存完全不同!例如,典型的 UART 或 SPI 设备实现可能有一个数据寄存器,可以写入该数据寄存器以传输数据,或从中读取以检索接收到的数据。同样,中断寄存器具有“读取时清除”或“写入 1 以清除”语义的情况并不少见。

它的值(value):在实践中,许多帧缓冲区图形实现实际上就像普通内存一样。不同之处在于内存存储在双端口 RAM(或时分复用总线)中,视频 RAMDAC 不断读取该内存以将其内容传输到连接的显示器。

关于io - 内存映射 IO - IO 设备如何知道值已更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49500383/

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