在计算机系统中,8259A 可编程中断控制器(PIC)用于管理和处理来自各种硬件设备的中断请求。默认情况下,主片和从片的中断号分配是基于它们在中断向量表(Interrupt Vector Table, IVT)中的位置。本文将详细介绍主片和从片的中断号是如何默认计数的,以及在现代系统中如何进行重映射。
主片和从片的中断号分配
在标准 x86 体系结构中,8259A 主片和从片的中断号有默认的分配方式:
主片(Master PIC)
默认情况下,主片的中断号从 0x08 开始。主片控制的 8 个中断请求(IRQ0 到 IRQ7)对应的中断向量号是 0x08 到 0x0F。这些中断号主要用于处理常见的硬件设备,如系统定时器和键盘。
具体分配如下:
- IRQ0 (系统定时器):中断号 0x08
- IRQ1 (键盘):中断号 0x09
- IRQ2 (连接从片):中断号 0x0A
- IRQ3 (串口 COM2):中断号 0x0B
- IRQ4 (串口 COM1):中断号 0x0C
- IRQ5 (并口 LPT2):中断号 0x0D
- IRQ6 (软盘控制器):中断号 0x0E
- IRQ7 (并口 LPT1):中断号 0x0F
从片(Slave PIC)
从片通过主片的 IRQ2 引脚连接,因此从片的中断号默认从 0x70 开始。它控制的 8 个中断请求(IRQ8 到 IRQ15)对应的中断向量号是 0x70 到 0x77。这些中断通常用于处理实时时钟(RTC)、PS/2 鼠标等设备。
具体分配如下:
- IRQ8 (实时时钟 RTC):中断号 0x70
- IRQ9 (可编程中断):中断号 0x71
- IRQ10 (保留):中断号 0x72
- IRQ11 (保留):中断号 0x73
- IRQ12 (PS/2 鼠标):中断号 0x74
- IRQ13 (协处理器/浮点单元):中断号 0x75
- IRQ14 (主 IDE 通道):中断号 0x76
- IRQ15 (次 IDE 通道):中断号 0x77
PIC 重映射:现代系统中的中断号分配
在现代 x86 系统中,操作系统通常会对 8259A PIC 的中断号进行重新映射。这是为了避免与处理器异常中断(如除零错误、溢出等)发生冲突,因为这些异常中断默认分配的中断向量号范围是 0x00 到 0x1F。
重映射后的中断号
常见的重映射方式是:
- 主片:将主片的中断号映射到 0x20 到 0x27,对应的 IRQ 是 IRQ0 到 IRQ7。
- 从片:将从片的中断号映射到 0x28 到 0x2F,对应的 IRQ 是 IRQ8 到 IRQ15。
通过这种重映射,操作系统可以确保中断向量号 0x00 到 0x1F 保留给处理器的异常处理,而不与硬件中断发生冲突。
总结
- 默认情况下,8259A 主片的中断号从 0x08 开始计数(对应 IRQ0 到 IRQ7),从片的中断号从 0x70 开始计数(对应 IRQ8 到 IRQ15)。
- 在现代系统中,为避免与处理器的异常中断冲突,操作系统通常会将主片和从片的中断号重新映射到更高的中断向量号范围,如 0x20 到 0x27 和 0x28 到 0x2F。
理解 8259A 的中断号分配和重映射机制,对于操作系统开发和硬件编程人员而言,至关重要。通过合理分配和管理中断号,可以确保系统的稳定性和高效性。