目录
一、为什么需要中断
二、什么是中断
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博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/38600.html