计算机组成原理中断向量表
中断向量表(Interrupt Vector Table, IVT)
中断向量表是计算机系统中用于管理中断处理的核心数据结构,主要存在于早期x86架构的实模式(16位)系统(如DOS)及部分嵌入式系统中。它为每个中断类型分配唯一的中断向量号,并存储对应中断服务程序(ISR)的入口地址,是CPU实现快速中断分发的关键组件。
一、核心定义与作用
- 定义:
中断向量表是一个固定长度的数组,每个数组元素(表项)对应一个中断向量号(0~255,共256个表项,x86架构专用),存储该中断对应的处理程序的物理地址(段地址:偏移量)。 - 作用:
CPU通过中断向量号直接索引IVT,获取处理程序地址并跳转执行,避免复杂的地址计算,实现高效的中断响应。
二、结构与格式(以x86实模式为例)
1. 表项数量与范围
- 固定包含256个表项,对应向量号 0~255,覆盖所有可能的硬件中断、软件中断和异常事件。
- 前32个向量号(031)预留给系统内部异常(如除法错误、页错误)和非屏蔽中断(NMI),32255用于可屏蔽中断(IRQ)和用户自定义中断。
2. 单个表项格式(4字节)
- 段地址(Segment):16位,标识处理程序所在的段(16位实模式下,段地址左移4位形成20位基地址)。
- 偏移量(Offset):16位,段内偏移地址,与段地址组合形成20位物理地址(
物理地址 = 段地址×16 + 偏移量
)。 - 示例:
若向量号为n
,则其对应的表项地址为n×4
(IVT在内存中从地址0x00000
开始存储,共占用256×4=1024字节
)。
三、典型中断向量号分配(x86架构)
0 | 除法错误(Divide Error) | 除以0或除法结果溢出时触发,如执行DIV 指令出错。 |
1 | 调试中断(Debug) | 调试器使用,如单步执行、断点中断(对应INT 1 指令)。 |
2 | 非屏蔽中断(NMI) | 硬件紧急中断(如内存错误),不可被屏蔽,优先级最高。 |
3 | 断点中断(Breakpoint) | 程序执行到INT 3 指令时触发,用于调试时设置断点。 |
4 | 溢出中断(Overflow) | 算术运算溢出(如INTO 指令检测到溢出标志OF=1时触发)。 |
5~31 | 系统异常 | 包括页错误、双重故障、缺段等处理器内部错误。 |
32~255 | 可屏蔽中断(IRQ) | 由外部设备通过中断控制器(如8259A)触发,如键盘(IRQ1→向量号33)、定时器(IRQ0→向量号32)。 |
四、工作流程
-
中断触发与向量号生成:
- 硬件中断:设备通过中断控制器(如8259A)向CPU发送中断请求(IRQ),控制器将IRQ映射为对应的向量号(如IRQ0对应向量号32)。
- 软件中断:程序通过
INT n
指令直接指定向量号n
(如INT 0x80
对应向量号128,Linux早期系统调用)。
-
CPU索引IVT:
CPU收到中断信号后,暂停当前任务,根据向量号n
计算表项地址(n×4
),读取段地址和偏移量,组合成物理地址。 -
跳转执行ISR:
CPU跳转至该物理地址,执行对应的中断服务程序,处理完毕后通过IRET
指令恢复原任务。
五、与中断描述符表(IDT)的区别
适用模式 | 实模式(16位) | 保护模式(32位/64位) |
表项大小 | 4字节(段:偏移) | 8字节(中断门/陷阱门,含特权级等信息) |
特权级保护 | 不支持(所有中断直接进入内核态) | 支持(通过DPL检查调用者特权级) |
地址空间 | 20位物理地址(实模式限制) | 32位/64位线性地址(支持分页机制) |
现代系统应用 | 仅用于兼容或简单系统 | Windows、Linux等现代系统的标准选择 |
六、初始化与管理
- 初始化位置:
系统启动时(如BIOS引导阶段),会预先填充IVT,将前32个向量号绑定到处理器内部异常的处理程序,后续向量号由操作系统或设备驱动动态注册(如DOS系统通过INT 21H
的AH=25H
功能修改中断向量)。 - 局限性:
实模式下IVT缺乏权限保护,用户程序可随意修改表项,可能导致系统崩溃(现代系统通过保护模式和IDT解决此问题)。
七、总结
中断向量表是早期x86系统中断处理的核心,通过固定的向量号与处理程序地址映射,实现了高效的中断分发。尽管现代操作系统(如Windows、Linux)在保护模式下改用功能更强的中断描述符表(IDT),但IVT的设计思想(向量号索引、快速跳转)仍被继承,且x86架构至今保留对IVT的支持(如兼容旧程序或处理特定异常)。理解IVT是掌握中断机制底层原理的重要基础。
#牛客创作赏金赛#操作系统I 文章被收录于专栏
操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的核心程序,是用户与硬件之间的桥梁,也是计算机系统的核心组成部分。