【中断机制】什么是中断?使用中断的原因、注意事项

目录

一、为什么需要中断

二、什么是中断

1、中断的概念

2、中断的分类

3、中断的处理流程

三、中断处理程序要少用延时的原因


一、为什么需要中断

以网卡为例,CPU 如果要从网卡获取数据,不可能时时盯着网卡啥时候会有数据。当网卡收到数据时,给CPU 发送一个中断请求信号,请求占用CPU,进行数据读取的操作。

如此,CPU 就没必要傻傻的一直等着数据准备就绪,在数据到来之前,CPU可以着手处理其他事情。

二、什么是中断

1、中断的概念

中断是指CPU对系统发生某个时间做出的一种反应。(是外部设备向处理器发起的请求事件)中断发生后,CPU 不会立即执行响应,而是在当前指令执行完以后转入“ 中断处理流程 ”。此时 CPU 会跳转到中断处理程序去处理这个中断,处理完毕后再回到原来位置的下一个位置

2、中断的分类

① 硬中断

硬中断由硬件产生,每个设备或设备集都对应着一个中断向量号。比如下面的  GPIO1的 0~15 引脚产生的中断对应的中断号都是 66。在中断服务函数中我们需要自己辨别具体是哪个引脚产生了中断。

最典型的硬中断就是网卡收到消息,就会向CPU发送中断请求通知CPU处理数据,这里的中断请求就是 “ 硬中断 ”。硬中断可以直接打断 CPU,类似于你打电话的时候,电话线断了。

  1. 发生硬件中断时,外设给CPU发送中断请求
  2. 根据中断向量号查询中断向量表
  3. 协调设备驱动处理外部设备的中断请求

② 软中断

软件中断由CPU执行中断产生指令时产生,是由程序预先实现好的,并非随机的,如系统调用。当程序执行到系统调用这一行时,就会触发软中断。软中断不会直接打断 CPU,类似于你在打电话,有人敲门,你打电话这一操作不会被立马中断。

  • 发生系统调用时,中断向量表查询系统调用表,随后执行对应的系统调用程序
  • 发生异常时,查询中断向量表跳转到异常处理程序

3、中断的处理流程

第一步,保存当前进程的 CPU 运行环境。为了中断处理结束以后,能够回来继续执行最初的工作,CPU 会将当前进程的上下文压入内核栈或者中断栈中。

第二步

  • 如果是软中断,直接查询中断向量表转入中断处理程序;
  • 如果是硬中断,设备收到CPU返回的确认信号后,取消发送的中断请求,转入中断处理程序

第三步,执行中断处理程序

第四步,恢复CPU现场,退出当前中断。后续可能是直接返回原进程,也有可能是处理更高优先级的中断。

三、中断处理程序要少用延时的原因

中断处理的要求是即时处理,尽快退出。如果在中断中使用延时函数或者使用IO阻塞函数,会影响到系统的实时性。如果下次中断来临,延时或者阻塞还没结束,那么就永远在中断里死循环了。

因此,对于中断处理程序的要求是:

  • 短小精悍,不要处理过多任务
  • 不使用延时函数或者IO阻塞的函数

参考文章:

(操作系统)中断机制_蜂蜜小熊的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/challenglistic/article/details/132112486