BIOS 中断如何与保留的硬件中断冲突?

How are BIOS interrupts deconflicted with reserved hardware interrupts?

我正在阅读一段内核引导加载程序代码(来自斯坦福的 CS140 Pintos OS):

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

处理器正在以实地址模式执行这些指令。据推测,中断是通过找到中断向量 Table 的第 21 个(索引=0x14)条目并在那里执行处理程序来处理的。根据 this source, the interrupt table is initialized by BIOS in real mode. This Wikipedia page 列出了可用的 BIOS 中断,包括上面使用的中断。

我的困惑来自于以下事实,即列出的中断异常编号与 Intel reference (page 20-6) (and also repeated in this Wikipedia page)

中对实模式保留中断的描述有很大的冲突

这些中断号是如何消除冲突的?

我想这个传说可以追溯到 IBM 在制造 PC 时没有费心阅读 intel 体系结构手册。 Intel,从第一个8086开始,保留前32个向量给硬件使用; IBM 指定 PC BIOS 忽略了这一点,并在 16(0x10——视频服务)开始服务;在矢量 5 有一个奇怪的用于打印视频屏幕的当前页面。向量 5 被边界检查指令使用。

中断 0x10 作为 "coprocessor error" 继续存在;浮点处理器是可选辅助芯片时的遗迹。

你关心的中断0x14是bios定义的串口处理;并被 CPU 作为虚拟化例外。

当你处于实模式时,没有虚拟化;因此没有冲突。如果您处于虚拟执行模式,并执行一个 int $0x14,则 cpu 紧跟在 idt 之后;因为 real 虚拟异常是由虚拟机中的访问冲突引起的,并导致 exit 到虚拟机监视器。 [exit 是管理程序人员用来表示导致虚拟机停止执行的条件的术语。

因此,没有歧义,只是有点愚蠢地坚持构造糟糕的界面。