CPU、BIOS或操作系统负责IO端口地址分配?

3

我知道CPU通过IO端口地址(通常是16位)与IO设备进行通信,但我想知道谁进行了IO端口地址的分配?BIOS?CPU?操作系统?这些地址是预设还是动态的?

2个回答

2

这取决于你所说的设备类型:

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

  • 如果是传统的ISA插槽设备(非PnP),则基地址通常由板上跳线或DIP开关设置。在这种情况下,基地址无法动态更改。

  • 一些ISA板支持ISA PnP,允许其基地址在启动时由BIOS或操作系统设置。

  • 在PC中,还有几个内置于主板/芯片组中的“ISA”设备,它们位于固定的I/O地址上(例如PS/2键盘控制器)。它们是硬编码的,不会改变。

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


1
通常情况下,可寻址I/O的地址是由硬件分配的。
字面上看,有逻辑电路(可以是处理器内部或外部)监视总线以获取特定地址,并导致外设功能寄存器锁存从总线写出的数据,或将读取的数据驱动到总线上。
有时,特定外设的地址是基地址和内部地址的总和,其中基地址可以由DIP开关、跳线甚至(在一些历史案例中,但不是IBM PC中)扩展卡插槽来确定。
在更复杂的接口(如PCI)中,可能会在发现后由软件分配I/O基地址。虽然传统的本地总线接口只是几个逻辑门,但PCI接口非常复杂,具有许多配置功能。

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