中断与中断处理全解析
1. 中断描述符表与处理流程
中断描述符表(IDT)将每个向量号与处理相关事件的指令描述符关联起来。由于只有 256 个向量号,IDT 最多包含 256 个描述符,不过实际使用时,只需为真正用到的向量号设置条目即可。
当发生异常或中断时,处理器会先把被中断程序或任务的当前状态(状态标志寄存器和程序计数器)保存到栈中。IDT(或 IVT)中的每个条目都存有中断处理程序的起始地址,处理器会从 IDT(或 IVT)读取处理程序的起始地址到程序计数器,然后开始执行处理程序。处理程序使用 IRET 指令返回,该指令与普通程序返回用的 RET 指令类似,但会恢复保存的状态寄存器 FLAGS。
2. 多外设中断问题及解决方案
在计算机系统中,外设的中断线需连接到 CPU 的中断输入信号,这样外设就能中断 CPU 并请求其处理。然而,当有多个外设都要中断 CPU 时,若为每个外设都给 CPU 添加一个中断输入引脚,会使 CPU 接口变得复杂,还会增加出错概率。
- 轮询方式 :可以让所有外设共享 CPU 上的一个电平敏感中断输入引脚(IRQ)。一旦有中断产生,CPU 会跳转到与该 IRQ 引脚关联的中断处理程序。此处理程序会轮询每个 I/O 外设,以确定是哪个设备发出了中断。现代 I/O 外设都有可寻址(内存映射)的状态寄存器,其中通常有一个中断待处理位,当设备发出中断时,该位会被内部置位。CPU 读取这个位就能确定中断设备,若该位置位,处理器会跳转到特定的设备服务程序,在该程序中清除中断处理位并处理中断请求。不过,这种轮询技术比较耗时。以下是使用轮询的 IRQ 中断处理程序的伪代码
超级会员免费看
订阅专栏 解锁全文

1917

被折叠的 条评论
为什么被折叠?



