1

好吧,我对内存映射 io 和基于端口的 io 有一些困惑。问题是: -

  1. 在基于端口的 io 中,如果我写入端口,是否会影响相应的内存地址,反之亦然。
  2. x86 是否使用基于端口的 io 或内存映射 io。(我认为它取决于主板,x86 可以同时使用,如果我错了,请纠正我)。
  3. 在内存映射 io 中存在一些与缓存相关的问题,这些问题是什么?
  4. 我们可以在设备上同时使用这两种类型的 io 吗?
  5. DMA 如何与 hdd 一起使用?

提前致谢。

4

1 回答 1

4

IO 空间 ( in/ out) 是与物理内存分开的地址空间,包括在现代 PCI / PCIe 设备中。这取决于您需要如何与之交谈的设备;现代设备通常仅(或大部分)具有 MMIO 寄存器(在物理地址空间中),因为 MMIO 比端口 IO 更有效。

包含 MMIO 寄存器的部分物理地址空间应在 MTRR 或 PAT 中设置为不可缓存;显然 CPU 根本不支持 MMIO 的可缓存内存类型,如果您尝试,可能会锁定。(您可以将 WC 写组合内存用于 VGA RAM 之类的东西,即设备内存,允许写组合以产生 64 字节存储事务 。https://sites.utexas.edu/jdm4372/2013/05/29/notes- on-cached-access-to-memory-mapped-io-regions/ )

DMA 如何与 hdd 一起使用?

请参阅https://wiki.osdev.org/AHCI了解如何告诉控制器(通过 MMIO 访问)您希望它对物理 RAM 进行 DMA 数据访问或从物理 RAM 接收数据。

于 2021-07-03T17:38:57.390 回答