【发布时间】:2023-03-22 05:00:02
【问题描述】:
我知道访问 I/O 地址空间中的端口需要特定的 IN/OUT 指令,它们不是物理内存 (RAM) 的一部分,但我不明白 I/O 地址空间实际位于哪里(物理上)? (某种内存在)I/O 控制器?物理内存的保留端?
【问题讨论】:
-
物理硬件将无处不在。例如cpu 本身中的输入/输出指令,各种系统总线和芯片(北桥、南桥)中的实际 i/o 线等...,无论提供端口的硬件实际驻留在何处。
-
这个问题没有意义。 x86 上的 I/O 端口根本不存在于内存中。它们没有内存地址。
-
duskwuff 我知道他们没有内存地址。这就是为什么我要问他们在哪里? CPU访问设备寄存器目录吗?寄存器是否映射到某个地方?如果映射它们在哪里映射?我想了解何时执行 IO/OUT 指令的低级细节?
-
马克,你快回答我的问题了。你能给我一个例子吗。假设这个 PCIE 端点设备位于总线 0,CPU 在执行 IN/OUT 指令(直接从 PCIE 设备寄存器)或从 PCI 控制器(寄存器)或位于南桥的寄存器时如何获取数据?
-
总线上的控制信号决定了这一点,控制信号最终来源于指令以及处理器内核和总线之间的层。 Jasen 几乎涵盖了这一点,尽管我认为 pci(e) 中存在 I/O 空间是出于遗留原因,尽管这样卡可以在任何地方工作,我会假设大多数 I/O 是内存映射的……可能是x86 pcie 控制器或内核和控制器之间的某处将 I/O 转换为内存映射,不确定。很容易用谷歌搜索并找到......
标签: linux assembly io x86 hardware