内存映射I/O和端口映射I/O的区别

8

内存映射I/O是一种技术,它允许使用中央内存(RAM)与外设进行通信。端口映射I/O使用端口(带有特殊的汇编指令)通过数字端口进行通信。

相对于另一种方法,各自的优势是什么?


2
在发布问题之前最好先阅读常见问题解答 - http://stackoverflow.com/faq - Roger Rowland
1
内存映射IO的优点在于您不需要特殊指令来写入设备。它看起来像是内存写入,但某些地址将映射到某些设备集。端口映射I/O使用不同类别的指令。 - Anirudh Ramanathan
1
拥有单独的I/O总线是英特尔处理器非常特定的功能。这可以追溯到他们早期的8位处理器时代。在那个时候,总线设计非常简单,而且在64KB地址空间中选择一个空闲位置是很困难的。但是,这些考虑因素在今天已经不再适用了。 - Hans Passant
你能否在编写驱动程序时为特定设备或架构之一做出选择?因为如果不能,这就是一个硬件设计/计算机工程问题,而不是一个编程问题。 - millimoose
一些PCI外设可以让您使用I/O或内存映射访问,我认为这样做是为了让板卡能够在非Intel机器上工作(以前更多)。I/O空间支持大多已经消失。这是外设必须设计支持的功能,而不是软件或处理器的问题。 - old_timer
你也可以在这里查看:https://dev59.com/zW855IYBdhLWcg3wcz_y?rq=1 - Sil
1个回答

16
正如Cthulhu所说,内存映射I/O允许像读/写正常内存一样读/写I/O设备端口(使用相同的机器代码/汇编语言),但有一个缺点:您会消耗物理内存地址空间来存储内存映射I/O设备(想想32位Windows无法访问PC上的所有4G RAM)因此,使用端口映射I/O方法的优点是,您拥有专用的地址空间用于I/O设备,并且可以使用整个内存寻址范围来访问内存。
编辑:这里是对您的问题更全面的回答:hardware ports to memory addresses

请查看http://superuser.com/q/703695/78897。 - Pacerier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接