【问题标题】:Location of Port mapped I/O address space端口映射 I/O 地址空间的位置
【发布时间】: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


【解决方案1】:

在早期的 X86 处理器(以及 8080、Z80 等)上,I/O 地址空间与内存在相同的数据和地址总线上,但通过激活 CPU 上的专用 IO 请求引脚来访问

所以电气上的 I/O 与 RAM 是并行的

这几天 CPU 直接使用 HDMI 和 PCIe,因此大部分 I/O 空间要么在 CPU 内部(例如:VGA I/O 接口),要么通过 PCIe 串行总线访问 PCIe 也用于内存映射 I/O,因此在这方面 IO 仍然通过与内存映射 IO 几乎相同的电气接口进行访问。但不再通过用于 RAM 的相同 IO 引脚,

【讨论】:

    【解决方案2】:

    可以在 Ralf Browns x86/MSDOS 中断列表中找到 I/O 地址列表:
    http://www.pobox.com/~ralf
    http://www.pobox.com/~ralf/files.html
    ftp://ftp.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/

    inter61d.zip:“PORTS.A”、“PORTS.B”、“PORTS.C”

    【讨论】:

    • 三个链接似乎都死了
    【解决方案3】:

    首先,您应该了解可以对设备进行编程以响应任何地址,即使该地址不是物理内存的一部分。这是通过对其存储器解码器进行编程来完成的。简而言之,I/O 设备的内存位于设备上。提供给设备的 I/O 空间通常映射设备上的内存,即每个 I/O 设备都提供自己的内存。

    嗯,在过去,有一些“知名”地址,例如,0x3f8、0x2f8 用于 com(串行)端口,0xCF8-0xCFC 用于 PCI 配置空间。这些地址不使用任何物理内存,一个单独的 I/O 信号被断言来表示。这些器件的存储器解码器在工厂被编程为仅在 I/O 引脚被置位时才响应这些地址。

    但这已经过时了。即使在 PCI 的后期,大多数设备最初都是通过 IO 空间配置的,但随后它们的内存解码器被编程为响应物理内存上方虚拟空间中的内存映射地址。在对存储器解码器进行编程时,不仅提供基地址,而且还提供该地址空间的大小以避免设备之间的冲突。内存位于设备上,而不是主机的 RAM 或芯片组中。

    对于 PCI-express,我相信现在查询 acpi 表以获取内存映射空间,并且基本上不推荐使用 i/o 指令。现代硬件中通常不包含串行端口。即使是这样,它也会在 PCI 或 PCIe 设备上实现。

    【讨论】:

    • 我还应该补充一点,大多数 PCI 设备也会指出他们想要拥有的地址空间量,因此当软件对内存解码器进行编程时,他们可以考虑这个请求。
    • By "memory decoder" 您似乎实际上指的是地址解码器。您关于“设备可以被编程以响应任何地址” 的断言并不总是正确的,因为地址解码器可以是硬连线的,也可以只是硬件配置的。
    猜你喜欢
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 2019-02-19
    • 2017-05-17
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多