5

我最近不得不解决 x86 PIC 的专有操作系统问题,其中操作系统预期的计时器仅在 CPU0 上中断。我启用了 IO-APIC 来解决这个问题并进行 CPU 转向,因此中断只发送到 CPU0。问题解决了。

有人告诉我,我们的硬件坏了做这样的事情。即当只有一个 PIC 正在使用时,在所有 CPU 上引发定时器中断。有问题的“硬件”是 QEMU/KVM。

QEMU/KVM 有问题吗?操作系统是否做出了无效的假设?

我怀疑 QEMU/KVM 这样做是完全正确的,操作系统应该能够处理 CPU 上的定时器中断!= 0 ...

4

1 回答 1

2

我认为这是真的,PIC 通常只向 CPU 0 提供中断,包括定时器中断。大多数操作系统不会尝试使用 PIC 进行 SMP,因为 CPU1 无法获得或接收任何中断(包括某种用于进程调度的定时器中断);例如,带有“noapic”的 Linux 会禁用除 C​​PU0 之外的所有内容。我认为这个操作系统在 qemu 中遇到了一个奇怪的角落案例。

于 2016-05-03T04:43:48.237 回答