微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

究竟什么是内存映射 io 和基于端口的 io

如何解决究竟什么是内存映射 io 和基于端口的 io

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

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

提前致谢。

解决方法

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 访问权限)您希望它通过 DMA 将数据传入或传出物理 RAM。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。