计算机组成原理中断向量表

中断向量表(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)。

四、工作流程

  1. 中断触发与向量号生成

    • 硬件中断:设备通过中断控制器(如8259A)向CPU发送中断请求(IRQ),控制器将IRQ映射为对应的向量号(如IRQ0对应向量号32)。
    • 软件中断:程序通过INT n指令直接指定向量号n(如INT 0x80对应向量号128,Linux早期系统调用)。
  2. CPU索引IVT
    CPU收到中断信号后,暂停当前任务,根据向量号n计算表项地址(n×4),读取段地址和偏移量,组合成物理地址。

  3. 跳转执行ISR
    CPU跳转至该物理地址,执行对应的中断服务程序,处理完毕后通过IRET指令恢复原任务。

五、与中断描述符表(IDT)的区别

特性 中断向量表(IVT) 中断描述符表(IDT,保护模式)
适用模式 实模式(16位) 保护模式(32位/64位)
表项大小 4字节(段:偏移) 8字节(中断门/陷阱门,含特权级等信息)
特权级保护 不支持(所有中断直接进入内核态) 支持(通过DPL检查调用者特权级)
地址空间 20位物理地址(实模式限制) 32位/64位线性地址(支持分页机制)
现代系统应用 仅用于兼容或简单系统 Windows、Linux等现代系统的标准选择

六、初始化与管理

  • 初始化位置
    系统启动时(如BIOS引导阶段),会预先填充IVT,将前32个向量号绑定到处理器内部异常的处理程序,后续向量号由操作系统或设备驱动动态注册(如DOS系统通过INT 21HAH=25H功能修改中断向量)。
  • 局限性
    实模式下IVT缺乏权限保护,用户程序可随意修改表项,可能导致系统崩溃(现代系统通过保护模式和IDT解决此问题)。

七、总结

中断向量表是早期x86系统中断处理的核心,通过固定的向量号与处理程序地址映射,实现了高效的中断分发。尽管现代操作系统(如Windows、Linux)在保护模式下改用功能更强的中断描述符表(IDT),但IVT的设计思想(向量号索引、快速跳转)仍被继承,且x86架构至今保留对IVT的支持(如兼容旧程序或处理特定异常)。理解IVT是掌握中断机制底层原理的重要基础。

#牛客创作赏金赛#
操作系统I 文章被收录于专栏

操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的核心程序,是用户与硬件之间的桥梁,也是计算机系统的核心组成部分。

全部评论

相关推荐

hwwhwh:同双非,有大厂实习其实也没啥用,主要看运气,等就行了
点赞 评论 收藏
分享
11-07 16:07
深圳大学 运营
前端飞升:学长,阿里不是卡双非吗,我深也能去吗
点赞 评论 收藏
分享
11-06 12:53
吉林大学 Java
如题,ip属地末九,计算机科班大三本科生。想找一段寒假实习,也是第一次找实习。 从大二暑假7月开始准备Java后端,前期有点磨叽,导致现在手忙脚乱。目前第二个项目黑马点评快写完了,第一个项目是苍穹外卖(两个项目都是烂大街的,这就很头大)。算法题在lc上从大二至今陆续刷了将近六百题,hot100已过一遍,面试150目前刷了一半。八股刚看了不到一周,想请教一下各位牛友,这一版简历哪些地方需要继续改进,接着优化? 同时,是现在立即开始投递,边投边背八股,完善项目。还是说八股再背个小半个月再开始投递比较好一点,我现在担心的是到了这个月下旬或者12月再开始投递简历面试会有点晚,听同学说到年底hc数量会大...
mikeu04:简历顶部留名字即可,你写“后端开发实习生-Java”就是把自己的方向限制死了。我建议把这揉在个人简介里,说你对后端开发充满热情就行。性别出生年份以及微信号不是必须的。 把个人简介从教育背景里拿出来,第一个写。你的个人简介有点太泛了。把“爱好中长跑”去了,加点数字(“拥有xxx年的xxx经历”),加点你最熟的几个语言或技术栈。和别人的简介区分开来。 专业技能放项目经历前面。面试官一般会优先看这个再往下看你做了什么项目来考察你是否具备这些技能。实习我不是很清楚,但像Redis, JVM, 消息模型,计算机网络这些属于基本知识。你如果了解GCP, AWS, Docker 这些实际生产工具就可以把八股知识换掉。 项目简介可以和工作内容揉在一起。项目简介还是太长了,就一句话,“开发了一个基于【1,2个主要框架】为【目标客户群体】的【产品类型】, 实现了【产品价值】”。产品价值不是功能。比如一个在线计算器,它的功能是算数,但它的价值可以是让人在没带计算器的情况下算数(可访问性)或比手算效率提升了80%。工作内容多加点数字,你这个产品有多少人用了?浏览量是多少?技术上xxx性能提升了多少%?(实在想不出来就丢给deepseek :) 11 月理论上秋招已经结束了。八股是背不完的。无脑投,刷笔试,中了面试邀请就突击面经八股,没问题的。
大厂面试问八股多还是项目...
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务