CPU、BIOS或操作系统是否执行IO端口地址分配?

CPU、BIOS或操作系统是否执行IO端口地址分配?,io,operating-system,cpu-registers,bios,Io,Operating System,Cpu Registers,Bios,我知道CPU通过IO端口地址(通常为16位)与IO设备通信,但我想知道谁负责IO端口地址分配?BIOS?中央处理器?操作系统?这些地址是预设的还是动态的?通常可寻址I/O的地址由硬件分配 从字面上说,有逻辑电路(处理器内部或外部)监视总线的特定地址,并使外围功能寄存器锁存从总线上写入的数据,或驱动正在读取的数据 有时,特定外设的地址是基址和内部地址的总和,其中基址可以通过DIP开关或跳线来确定,甚至(在某些历史情况下,但不是在IBM PC中)可以通过插入扩展卡的插槽来确定 在更复杂的接口(如PC

我知道CPU通过IO端口地址(通常为16位)与IO设备通信,但我想知道谁负责IO端口地址分配?BIOS?中央处理器?操作系统?这些地址是预设的还是动态的?

通常可寻址I/O的地址由硬件分配

从字面上说,有逻辑电路(处理器内部或外部)监视总线的特定地址,并使外围功能寄存器锁存从总线上写入的数据,或驱动正在读取的数据

有时,特定外设的地址是基址和内部地址的总和,其中基址可以通过DIP开关或跳线来确定,甚至(在某些历史情况下,但不是在IBM PC中)可以通过插入扩展卡的插槽来确定


在更复杂的接口(如PCI)中,I/O基址可能在发现后由软件分配。虽然传统的本地总线接口可能只是几个逻辑门,但PCI接口非常复杂,具有许多配置功能。

这取决于您所谈论的设备类型:

  • 如果是PCI或PCI Express设备,则设置基本I/O地址 在引导时由BIOS执行。它们可能会被操作系统重新映射 系统(如果需要)(考虑热插拔设备的情况)

  • 如果是传统ISA插槽设备(非PnP),则基址为 通常由板上的跳线或DIP开关设置。那么,, 不能动态更改基址

  • 一些ISA板得到了支持,这使得它们的基础 BIOS或操作系统在引导时设置的地址

  • 在PC机中,也有几个内置的“ISA”设备 位于固定I/O地址(如PS/2)的主板/芯片组 键盘控制器)。有硬编码且不更改

  • 主板上的一些外围设备,如串行端口和并行端口 在BIOS设置中配置其基址。那么,, BIOS设置的行为类似于跳线或DIP开关