有没有人能根据上面的问题来确认我的想法?在CPU处理位于该系统BIOS地址的复位矢量地址指令之后。然后,它处理系统BIOS代码,包括扫描所有io总线并动态地将系统资源(中断、io地址)分配给这些io设备。然后在系统内存中为这些分配的系统资源建立一个中断向量表?
发布于 2019-08-25 01:35:18
然后处理系统BIOS码,包括扫描所有io总线并动态地将系统资源(中断、io地址)分配给这些io设备。
说大也大吧。请注意,有些硬件是在“残缺的传统”模式下启动的(例如,第一个视频卡、USB键盘、具有“并行ATA仿真”的旧SATA控制器等),因此当操作系统真正想要正确使用这些设备时,它必须重新配置它们。这包括中断控制器- BIOS不会将任何东西配置为使用现代MSI (“消息通知中断”),BIOS也不会配置任何东西使用旧的IO APIC芯片-将(在可能的情况下)配置为使用旧的PIC芯片(对于多CPU系统来说,这些芯片相当有限/无用)。以同样的方式你可以假设(例如)IOMMU将处于“最不安全,所有内容都通过”的状态。
也有可能BIOS不支持总线。例如,如果您有一个连接到infiniband控制器的设备,则BIOS不太可能有任何代码来处理它。
然后是热插拔PCI和thunderbolt之类的东西,在这种情况下,如果BIOS在引导期间/之后没有插入,BIOS就不可能对其进行配置和分配资源;这主要迫使(完全成熟的)操作系统支持它自己的配置和资源分配。
当然,如果操作系统进行自己的配置和资源分配;然后,它有意义的操作系统做它自己的配置和资源分配(免疫从BIOS和怪癖,以避免恼人的“遗留模式”,更容易支持其他类型的固件,使其更容易支持类似"kexec()",并使其更容易处理虚拟机崩溃留下任何PCI设备使用“通过”在未知状态,并提高安全性使用“禁用尽可能多的设备,配置IOMMU为尽可能严格的,然后设置一个动态信任根与SKINIT或类似的”方法)。
换句话说,是的,BIOS确实会尝试进行配置和资源分配,但在实践中,除了启动更好的东西所需的零点几秒之外,这并不是很有用。
,然后在系统内存中为这些分配的系统资源建立一个中断向量表?
不要忘记,IRQ只是一种类型的资源--有内存映射的IO寄存器和IO端口(如果您想查看旧的ISA卡,还有DMA通道);而且只有IRQ在中断向量表中有意义。此外,BIOS本身通常使用轮询(而不是IRQ),因此即使BIOS支持某个设备,它也可以禁用设备的IRQ,并且中断向量表中没有任何设备的IRQ。
https://stackoverflow.com/questions/23062002
复制相似问题