25 memory cpu port io computer-architecture
任何人都可以解释端口映射和内存映射之间的区别是什么,以及两者都完成了什么?为什么要映射端口,它在结构上与内存映射有何不同,许多架构是否有任何理由同时使用两者?另外,从这个意义上说,什么是“端口”,因为端口在不同的上下文中可能意味着不同的东西?
示例:端口转发,端口作为通信端点,“端口映射”。
假设我将 OUT 写到端口 400h(虚构;仅举个例子)(例如在 x86-64 等中)。
如果它不在内存中,我要写什么或写到哪里?“端口”是如何映射的,在这个意义上它是什么?
Var*_*lex 29
内存映射 I/O 和端口映射 I/O 是两种互补的 I/O 方法。
在内存映射系统中,访问 I/O 设备就像它是内存的一部分。Load和Store命令用于读取和写入 I/O 设备,就像它们用于内存一样(端口映射具有用于 I/O 的特殊命令)。这意味着 I/O 设备使用与内存相同的地址总线,这意味着 CPU 可以引用内存或根据地址的值I/O 设备。这种方法需要在地址空间中进行隔离:也就是说,为 I/O 保留的地址不应该对物理内存可用。
下面是一个简单的基本计算机系统的图像。在当代系统中,情况要复杂得多。

根据维基百科
端口映射 I/O 通常使用一类特殊的 CPU 指令,专门用于执行 I/O。这可以在 Intel 微处理器上找到,带有 IN 和 OUT 指令。这些指令可以向 I/O 设备读取和写入一到四个字节(outb、outw、outl)。I/O 设备有一个独立于通用内存的地址空间,要么通过 CPU 物理接口上的额外“I/O”引脚实现,要么通过专用于 I/O 的整个总线实现。因为 I/O 的地址空间与主存的地址空间是隔离的,所以这有时被称为隔离 I/O。
至于优缺点:由于外围设备比内存慢,共享数据和地址总线可能会减慢内存访问。另一方面,通过内存映射系统提供的 I/O 简单性,CPU 需要更少的内部逻辑,这有助于实现更快、更便宜、功耗更低的 CPU。其逻辑类似于 RISC 系统的逻辑:降低复杂性,获得一个更加专用和健壮的系统,这对于嵌入式系统来说非常方便,例如。
相反(再次来自维基):
端口映射 I/O 指令通常非常有限,通常只提供 CPU 寄存器和 I/O 端口之间的简单加载和存储操作,因此,例如,向端口映射设备寄存器添加常量需要三个指令:将端口读入CPU寄存器,将常量添加到CPU寄存器,并将结果写回端口。
我强烈建议您阅读那篇 wiki 文章以获取更多信息。
要回答您的问题之一:
如果它不在内存中,我要写什么或写到哪里?
您正在通过数据总线写入 I/O 接口的寄存器,稍后(准备就绪时)将数据发送到实际的 I/O 设备。下面是一个示例 I/O 设备接口的图像。

| 归档时间: |
|
| 查看次数: |
29018 次 |
| 最近记录: |