Linux kernel I/O端口和I/O内存之间的差异

Linux kernel I/O端口和I/O内存之间的差异,linux-kernel,kernel,Linux Kernel,Kernel,我只是想知道I/o端口和I/o内存之间的区别,因为我很困惑。如果有人解释它的用途,那就太好了。我的意思是,当首选I/O端口和I/O内存时。内存区域和I/O区域之间没有概念上的区别:它们都是通过在地址总线和控制总线上断言电信号来访问的 虽然一些CPU制造商在其芯片中实现了单个地址空间,但其他制造商认为外围设备不同于内存,因此应该有一个单独的地址空间。一些处理器(最著名的是x86系列)具有单独的I/O端口读写电线和访问端口的特殊CPU指令 Linux在其运行的所有计算机平台上都实现了I/O端口的概念

我只是想知道I/o端口和I/o内存之间的区别,因为我很困惑。如果有人解释它的用途,那就太好了。我的意思是,当首选I/O端口和I/O内存时。

内存区域和I/O区域之间没有概念上的区别:它们都是通过在地址总线和控制总线上断言电信号来访问的

虽然一些CPU制造商在其芯片中实现了单个地址空间,但其他制造商认为外围设备不同于内存,因此应该有一个单独的地址空间。一些处理器(最著名的是x86系列)具有单独的I/O端口读写电线和访问端口的特殊CPU指令

Linux在其运行的所有计算机平台上都实现了I/O端口的概念,即使在CPU实现单个地址空间的平台上也是如此。端口访问的实现有时取决于主机的特定品牌和型号(因为不同型号使用不同的芯片组将总线事务映射到内存地址空间)

即使外围总线有单独的I/O端口地址空间,也不是所有设备都将其寄存器映射到I/O端口。虽然ISA外围板通常使用I/O端口,但大多数PCI设备将寄存器映射到内存地址区域。这种I/O内存方法通常是首选的,因为它不需要使用专用处理器指令;CPU内核访问内存的效率更高,并且编译器在访问内存时在寄存器分配和寻址模式选择方面有更大的自由度


更多详细信息参见

访问pci设备时,我如何知道应该使用端口还是I/o内存进行访问?它取决于cpu还是pci设备?