【问题标题】:What exactly is memory mapped io and port based io什么是内存映射 io 和基于端口的 io
【发布时间】:2021-07-03 16:28:09
【问题描述】:

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

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

提前致谢。

【问题讨论】:

    标签: io x86 port real-mode memory-mapped-io


    【解决方案1】:

    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 数据。

    【讨论】:

    • 端口 IO 使用较少的另一个重要原因是它很小 (64KiB+3B) 并且已经很拥挤。是的,MMIO 允许您使用缓存模式,但我不确定有多少设备可以真正从中受益。顺便说一句,您发现的非常有趣的文章。
    猜你喜欢
    • 2011-04-22
    • 2012-04-02
    • 2011-04-20
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2012-03-28
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多