有人可以根据上述问题确认我的想法吗? CPU处理完位于该系统BIOS地址的复位向量地址指令后。然后处理系统BIOS代码,包括扫描所有io总线并动态地为这些io设备分配系统资源(中断,io地址)。然后它为系统内存中这些分配的系统资源构建一个中断向量表?
答案 0 :(得分:3)
然后处理系统BIOS代码,其中包括扫描所有io总线并为这些io设备动态分配系统资源(中断,io地址)。
排序。请注意,某些硬件以“瘫痪的残障模式”启动(例如,第一个视频卡,USB键盘,具有“并行ATA仿真”功能的旧SATA控制器等),因此,当OS实际想要正确使用这些设备时,必须重新配置他们。这包括中断控制器-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保持禁用状态,并且在中断向量表中没有任何内容。
答案 1 :(得分:0)
非常好。你是在谈论x96。 x86 pc型号用于BIOS扫描和检测基于ISA / PCI(e)的外围设备。将设置每个外围设备(和/或主BIOS)上的biose以响应bios中断。这不是所有bios所做的,它不一定是bios做的第一件事,但它在bios所做的任务列表中。