目录
一、为什么需要中断
二、什么是中断
1、中断的概念
2、中断的分类
3、中断的处理流程
三、中断处理程序要少用延时的原因
一、为什么需要中断
以网卡为例,CPU 如果要从网卡获取数据,不可能时时盯着网卡啥时候会有数据。当网卡收到数据时,给CPU 发送一个中断请求信号,请求占用CPU,进行数据读取的操作。
如此,CPU 就没必要傻傻的一直等着数据准备就绪,在数据到来之前,CPU可以着手处理其他事情。
二、什么是中断
1、中断的概念
中断是指CPU对系统发生某个时间做出的一种反应。(是外部设备向处理器发起的请求事件)中断发生后,CPU 不会立即执行响应,而是在当前指令执行完以后转入“ 中断处理流程 ”。此时 CPU 会跳转到中断处理程序去处理这个中断,处理完毕后再回到原来位置的下一个位置
2、中断的分类
① 硬中断
硬中断由硬件产生,每个设备或设备集都对应着一个中断向量号。比如下面的 GPIO1的 0~15 引脚产生的中断对应的中断号都是 66。在中断服务函数中我们需要自己辨别具体是哪个引脚产生了中断。
最典型的硬中断就是网卡收到消息,就会向CPU发送中断请求通知CPU处理数据,这里的中断请求就是 “ 硬中断 ”。硬中断可以直接打断 CPU,类似于你打电话的时候,电话线断了。
- 发生硬件中断时,外设给CPU发送中断请求
- 根据中断向量号查询中断向量表
- 协调设备驱动处理外部设备的中断请求
② 软中断
软件中断由CPU执行中断产生指令时产生,是由程序预先实现好的,并非随机的,如系统调用。当程序执行到系统调用这一行时,就会触发软中断。软中断不会直接打断 CPU,类似于你在打电话,有人敲门,你打电话这一操作不会被立马中断。
- 发生系统调用时,中断向量表查询系统调用表,随后执行对应的系统调用程序
- 发生异常时,查询中断向量表跳转到异常处理程序
3、中断的处理流程
第一步,保存当前进程的 CPU 运行环境。为了中断处理结束以后,能够回来继续执行最初的工作,CPU 会将当前进程的上下文压入内核栈或者中断栈中。
第二步,
- 如果是软中断,直接查询中断向量表转入中断处理程序;
- 如果是硬中断,设备收到CPU返回的确认信号后,取消发送的中断请求,转入中断处理程序
第三步,执行中断处理程序
第四步,恢复CPU现场,退出当前中断。后续可能是直接返回原进程,也有可能是处理更高优先级的中断。
三、中断处理程序要少用延时的原因
中断处理的要求是即时处理,尽快退出。如果在中断中使用延时函数或者使用IO阻塞函数,会影响到系统的实时性。如果下次中断来临,延时或者阻塞还没结束,那么就永远在中断里死循环了。
因此,对于中断处理程序的要求是:
- 短小精悍,不要处理过多任务
- 不使用延时函数或者IO阻塞的函数
参考文章:
(操作系统)中断机制_蜂蜜小熊的博客-CSDN博客