I/O 数据传输模式和 I/O 地址访问

I/O Data tranfer Modes and I/O addresses access

我已经意识到建立 I/O 连接的 3 种方法:

1- 已编程 I/O(轮询)

2-中断驱动I/O

3- 直接内存访问 (DMA)

现在,我需要将其与访问 I/O 地址的方式联系起来

(隔离 I/O || 内存映射 I/O):

DMA

内存映射不影响设备的直接内存访问(DMA) ,因为根据定义,DMA 是一种绕过 CPU.

的内存到设备通信方法

这是我所有的信息。

我现在理解这些主题了吗,还是有任何误解?

端口映射与内存映射(通信)

这是如何执行IO访问,即CPU如何与设备通信。
使用 端口映射 IO,CPU 使用特殊指令(例如 x86 的 inout)从特殊设备中的 read/write IO地址space你不能用load/store指令访问。
使用 内存映射 IO,CPU 执行正常的内存加载和存储以与设备通信。
后者在安全权限和代码生成方面通常更加精细和统一。

轮询与中断驱动(通知)

这是如何 CPU接收来自设备的通知。
使用 轮询 CPU 将重复从设备读取状态寄存器并检查是否设置了完成位(或等效位)。
使用 中断驱动 通知,设备将引发中断而不需要 CPU 进行任何周期性工作。
轮询占用 CPU 但对于某些工作负载来说延迟更短。

DMA 与非 DMA(转移)

这是如何将数据从设备传输到CPU。
使用 DMA,设备将直接写入内存。
如果没有 DMA,CPU 将不得不重复读取数据(使用端口或内存映射 IO)。


所有这三个维度彼此独立,您可以随意组合它们(例如端口映射、中断驱动、DMA).
但是请注意,文献中的命名法并不一致。
此外,不同的设备具有不同的接口,可能不需要所有三个维度(例如,一个非常简单的仅输出 GPIO 引脚可能有一个只写寄存器,因此在这种情况下谈论轮询或 DMA 没有意义) .