我知道CPU通过IO端口地址(通常是16位)与IO设备进行通信,但我想知道谁进行了IO端口地址的分配?BIOS?CPU?操作系统?这些地址是预设还是动态的?
我知道CPU通过IO端口地址(通常是16位)与IO设备进行通信,但我想知道谁进行了IO端口地址的分配?BIOS?CPU?操作系统?这些地址是预设还是动态的?
这取决于你所说的设备类型:
如果是PCI或PCI Express设备,则基本I/O地址在启动时由BIOS设置。如果需要(考虑热插拔设备的情况),操作系统可能会重新映射它们。
如果是传统的ISA插槽设备(非PnP),则基地址通常由板上跳线或DIP开关设置。在这种情况下,基地址无法动态更改。
一些ISA板支持ISA PnP,允许其基地址在启动时由BIOS或操作系统设置。
在PC中,还有几个内置于主板/芯片组中的“ISA”设备,它们位于固定的I/O地址上(例如PS/2键盘控制器)。它们是硬编码的,不会改变。
一些内置于主板上的外围设备,如串行端口和并行端口,在BIOS设置中配置其基地址。在这种情况下,BIOS设置的行为类似于跳线或DIP开关。