中断处理的详细过程

0. 一些相关概念

0.1 内中断

  • 因为CPU内部出错导致的中断。不需要中断请求。一般与当前指令执行有关。
  • 内中断也称为异常
  • 内中断分为两类
    • 自愿中断:指令中断,比如系统调用时的访管指令
    • 强迫中断:
      • 硬件故障(要与硬件中断做区分):如缺页
      • 软件中断:如整数除0
  • 内中断按照处理情况来分类
    • 陷入:有意而为之的中断,如系统调用
    • 故障:由错误条件引起的中断,可能被中断处理程序所修复,如缺页
    • 终止:不可修改的致命错误造成的中断。中断处理程序处理完后不在将控制返回给引发终止的应用程序。比如整数除0.
  • 内部中断不能被屏蔽,一旦出现就应该立即处理

0.2 外中断

  • 会发生中断请求。一般是有外部事件而导致的中断。
  • 外部中断的分类
    • 外设请求(就是硬件中断):IO操作完成自动给CPU送中断信号
    • 人工干预:用户强行终止一个进程
  • 外部中断按是否可屏蔽进行分类
    • 不可屏蔽中断:即使关中断时(IF=0)也会被响应
    • 可屏蔽中断:关中断时不会被响应。要等到开中断之后才会被响应

0.3 中断源

  • 外部中断源:
    • 中慢速外设:如打印机,键盘,鼠标
    • 数据通道:如磁盘、网络
    • 实时时钟:如定时器
    • 故障源:如电源掉电、外设故障
  • 内部中断源:
    • 阶上溢
    • 非法除法
    • 缺页
    • 等等
  • 中断源配有中断标志触发器屏蔽触发器
    • 中断标志触发器:置为1表示该中断源发出来中断请求
    • 屏蔽触发器:置为1则CPU在查询中断请求时即使这个中断源有中断请求也不会去处理,而是要等到屏蔽触发器置为0后才会去处理该中断源的中断请求。

1. 中断请求阶段

1.1 中断请求标记

  • 每个中断源向CPU发出中断的时机是随机的
  • 为了记录这些中断事件和区分不同的中断源,中断系统为每一个中断源设置了一个中断请求标志触发器。如果某个中断源发出了中断,就将相应的标志触发器置为1
  • 对于外中断,CPU统一在每条指令执行阶段结束前向中断控制器发出中断查询信号,去查询是否有中断请求要去处理。

2. 中断判优阶段

  • 如果有多个中断源发出了中断请求。则需要根据中断优先级选择优先级高的中断请求先进行响应
  • 中断默认优先级是由一个硬件排队器来实现的
  • 但是中断屏蔽字可以动态改变中断优先级。

2.1 中断优先级排序原则

  1. 硬件故障中断优先级最高,其次是软件中断
  2. 不可屏蔽中断优先级高于可屏蔽中断
  3. DMA请求优于IO设备的中断请求
  4. 高速设备优于低速设备
  5. 输入设备优于输出设备
  6. 实时设备优于普通设备

3. 中断响应阶段(中断隐指令)

3.1 CPU响应中断必须满足的三个条件

  • 中断源有中断请求
  • CPU允许中断:即开中断
  • 一条指令执行完毕,且没有更紧迫的任务

经过中断判优,中断处理进入中断响应阶段,中断响应时,CPU向中断源发出中断响应信号,同时:

  • 关中断
  • 保存断点(pc寄存器)
  • 获得中断服务程序的入口地址:根据中断类型号,查找中断向量表,找到中断服务程序的首地址(即中断向量

4. 中断服务阶段

  1. 保护现场:保存中断服务程序将要使用的所有寄存器的原始内容,以便于在退出中断服务程序之前进行恢复。(通用寄存器和状态寄存器和屏蔽字
  2. 开中断:即允许中断服务程序运行时能有更高级别的中断请求出现,实现中断嵌套
  3. 中断服务:中断处理过程,这里运行中断嵌套
  4. 关中断:保证恢复线程不被打断
  5. 恢复现场:恢复主程序的中断线程,通常是将保存在堆栈中的现场信息弹出回到原来的寄存器中
  6. 开中断
  7. 中断返回:返回到原程序的断点处,继续执行原程序

5. 中断返回阶段

  • 返回到原来程序的断点处,恢复硬件现场,继续执行原程序

6. 补充:中断源和异常源

6.1 中断源

  • 外部(硬件产生)的中断
    • 外部中断通过处理器上两个引脚(INTR和NMI)接收。
    • 从引脚NMI接收到信号时,就代表产生了一个不可屏蔽硬件中断,他使用固定中断向量号2
    • 从引脚INTR接收到的信号是可屏蔽硬件中断,它可以使用中断向量号0~255,可以通过标志寄存器EFLAGS中的IF标志屏蔽此类可屏蔽中断
  • 软件产生的中断
    • 通过INT n指令产生的中断。中断向量号0~255都可取
    • 软件产生的中断指令不能够屏蔽
    • 如果是 INT 2 ,则会调用NMI的中断处理程序,但此时不会激活处理器NMI处理硬件

6.2 异常源

  • 处理器检测到的程序错误异常
    • 在应用程序或操作系统执行期间,如果处理器检测到程序错误,就会产生一个或多个异常。
    • 处理器为其能检测到每一个异常都定义了一个向量,异常可以分为故障,陷阱和中止
  • 软件产生的异常
    • 指令INTO,INT 3 和BOUND指令可以用来从软件中产生异常。
  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值