在 Intel x86 处理器上禁用中断会发生什么?

问题描述

在 Intel x86 处理器上禁用中断会发生什么?当中断被启用或丢失时,它们是否排队等待处理?假设使用 Linux 操作系统。

解决方法

PC 上的硬件(异步)中断由 8259 controller 触发,后者将信号 INT 发送到 x86 CPU。如果处理器禁用了中断,CPU 不会用 INTA 确认这一点,并且请求会一直挂起,直到再次启用中断(通过下一条指令末尾的指令 STI)。

所以第一个硬件中断请求被排队,但是来自同一设备的重复中断请求如果在第一个请求被服务之前发生,它们就会丢失。 挂起的请求可以通过 PC 启动或某些驱动程序重新编程 8529 控制器来清除,但这通常不会发生。

另见8259 on Wikipedia