以下两篇文献对设备控制器中 IO 端口和寄存器的关系有何不同说法? 它们之间的关系究竟是什么?
以下引述是否来自https://cs.nyu.edu/courses/fall10/V22.0436-001/lecture24.html这是否意味着在设备控制器中,每个寄存器恰好有一个 IO 端口,并且每个 IO 端口恰好有一个寄存器?
每个 I/O 设备通过控制器连接到 I/O 总线。一个简单的控制器在总线上至少有 3 个地址(端口),每个地址对应控制器中的一个寄存器
- 数据寄存器(可读或可写,取决于它是输入设备还是输出设备)
- 控制寄存器(可写,用于控制设备操作)
- 状态寄存器(可读,用于确定设备状态 - 特别是是否准备好接收或提供数据)
更复杂的设备(例如磁盘)将具有多个控制和状态寄存器
以下来自操作系统概念的引述是否意味着在设备控制器中,IO 端口有四个寄存器?
I/O 端口通常由四个寄存器组成,称为状态寄存器、控制寄存器、数据输入寄存器和数据输出寄存器。
• 主机读取数据输入寄存器以获取输入。
• 数据输出寄存器由主机写入以发送输出。
• 状态寄存器包含主机可以读取的位。
• 控制寄存器。 ...
谢谢。
答案1
您在帖子中描述的是“典型”场景,尤其是当 I/O 与 CPU 位于不同的总线上(PCI/PCI 就是一个很好的例子)或者您正在与控制器而不是实际的 I/O 设备通信时。当然,现实情况要复杂得多。
硬件可以设计为以硬件设计人员想要的任何方式对来自 CPU 的读/写请求做出反应。
例如,可以:
使得仅仅访问(读取或写入) I/O 地址就会导致设备执行某些操作。
使得对同一 I/O 地址的读取和写入实际上访问设备上的不同寄存器或功能。
简单设备可能不需要数据、控制和状态寄存器。PC 并行端口就是一个例子。它由 I/O 地址空间中的单个字节控制。
当然,任何此类设备都可以由 CPU 直接寻址,而不是“在”控制器后面。并行端口是一种老式的 ISA 设备。虽然现在它实际上是 LPC 总线,但 LPC 的设计工作方式与 ISA 类似。
上述情况在 PC 时代之前非常常见,我相信在 ARM 和 MIPS 等非 x86 平台上也很常见。
复杂的控制器(大多数)将需要一种额外的机制来指定要与连接到控制器的哪个设备进行通信。I2C 就是这样的。
答案2
知识产权通常被设计为具有明确边界的模块……它们通常位于处理器核心的地址空间中。可能的开发一个 I/O 块任何一个单个输入或输出引脚,其中寄存器的单个位连接到任何一个读取输入值或设置输出值......但这没用,而且相当浪费地址空间。
相反,模块的设计更加“特色“因此在某些情况下,更加并行 - AVR I/O 模块有 8 个输入/输出引脚,而 STM32 I/O 模块有 16 个引脚。AVR 提供基本的 I/O 功能,而 STM32 具有斜率控制和可映射到 I/O 引脚提供的驱动程序的备用功能。
考虑以下 I/O 端口:
自动电压调节器
STM32
以下引用是否意味着在设备控制器中,每个寄存器恰好有一个 IO 端口,并且每个 IO 端口恰好有一个寄存器?
我会说 ”不“——这意味着至少I/O 模块的某种形式的数据、控制和状态接口。
请记住,许多教育材料都提出了一个易于理解的模型,然后才使其无效,并提出真正存在的警告和技术复杂性。
以下来自操作系统概念的引述是否意味着在设备控制器中,IO 端口有四个寄存器?
我再说一遍“不“...它给了一个”典型的“ / ”根据“对某事物可能由什么构成的预期。