BIOS中断如何与保留的硬件中断进行冲突解决?

6

我正在阅读内核引导程序代码的一部分(来自斯坦福大学的CS140 Pintos操作系统):

# Configure serial port so we can report progress without connected VGA.
# See [IntrList] for details.
        sub %dx, %dx                    # Serial port 0.
        mov $0xe3, %al                  # 9600 bps, N-8-1.
                                        # AH is already 0 (Initialize Port).
        int $0x14                       # Destroys AX.

处理器正在实地址模式下执行这些指令。假设中断是通过查找中断向量表的第21个条目(index=0x14)并在那里执行处理程序来处理的。根据此来源,在实模式下BIOS初始化中断表。本Wikipedia页面列出了可用的BIOS中断,包括上述所使用的中断。
我的困惑在于列出的中断异常号与Intel参考文献中“实模式保留中断”的描述(第20-6页)(还在本Wikipedia页面中重复)有很大冲突。
这些中断号如何解决冲突?

5
它们并没有“解决冲突”。Intel保留了1Fh以下的中断用于CPU使用,但IBM忽视了这一点并将其他用途分配给了其中大部分。 Int 0、1、3、6仅用于它们与CPU相关的含义。特别是[int 0Ch "stack fault"](http://www.ctyme.com/intr/rb-0056.htm)和[int 0Dh "general protection fault"](http://www.ctyme.com/intr/rb-0061.htm)具有问题,并且在ROM BIOS的默认设置中也用于IRQ硬件中断。如果需要,处理程序必须特别检查为什么被调用。[例子](https://hg.ulukai.org/ecm/fddebug/file/72709ff5a29f/DEBUG.ASM#l7763) - ecm
谁最后到达,谁就获胜了... - old_timer
1个回答

6
我认为这个传说可以追溯到IBM制造PC时没有阅读英特尔架构手册。从第一个8086开始,英特尔保留了前32个向量用于硬件使用;IBM规定PC BIOS忽略了这一点,并从16(0x10 - 视频服务)开始提供服务;并在向量5上提供了一个奇怪的打印当前视频屏幕页面的服务。向量5被边界检查指令使用。
中断0x10作为“协处理器错误”存在;这是浮点处理器是可选辅助芯片的遗留问题。
中断0x14与您有关,由BIOS定义用于串口处理;由CPU定义为虚拟化异常。
当您处于实模式下时,不存在虚拟化;因此不存在冲突。如果您处于虚拟执行模式,并执行int $0x14,则CPU会遵循idt;由于虚拟机中引起实际虚拟异常的是虚拟机中的访问违规,它会导致退出到虚拟机监视器。 [ hypervisor人员使用“退出”一词来表示导致虚拟机停止执行的条件 ]。
所以,这里没有歧义,只是对糟糕构建的接口有些愚蠢的坚持。

因此,“解决冲突”存在的原因是BIOS加载的IVT被内核后来加载的中断表所取代(并且可能符合英特尔的规格)? - source_indent
1
是的,目前BIOS只用于实模式引导,之后目标操作系统将使用自己的IVT替换原有的。 - mevets

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