当前位置: 首页 > news >正文

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

目录

一、为什么需要中断

二、什么是中断

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博客

http://www.lryc.cn/news/110816.html

相关文章:

  • C++20 协程(coroutine)入门
  • 2023.8.6
  • kubernetes网络之网络策略-----Network Policies - Default
  • 奥威BI系统|秒分析,更适合分析大数据
  • 安全作业-Race竞争型漏洞、原型链污染
  • 对微服务网关的一些总结
  • 该选择WPF 还是 Winform?
  • 概念解析 | ChatGPT技术概览
  • 用Rust实现23种设计模式之 代理模式
  • 【nlp pytorch】基于标注信息从句子中提取命名实体内容
  • 图为科技加入深圳市智能交通行业协会 ,打 …
  • 大模型排行榜及相关基础技术
  • Python入门【​try和except结构、常见异常、with上下文管理 、traceback模块和生成异常日志、自定义异常类】(十八)
  • windows脚本获取管理员权限修改host
  • Flask简介与基础入门
  • Stable Diffusion 硬核生存指南:WebUI 中的 GFPGAN
  • IO模型-信号驱动IO
  • 每日一题——回文链表
  • OPENCV C++(一) 二进制和灰度原理 处理每个像素点值的方法
  • Python GUI编程(Tkinter)
  • K8S简介
  • 策略模式——算法的封装与切换
  • c++转换构造,拷贝构造,operator=
  • 支付宝蜻蜓设备abs调试
  • 论memset的时间代价
  • linux下绑定进程到指定CPU的操作方法
  • springboot+maven插件调用mybatis generator自动生成对应的mybatis.xml文件和java类
  • C# 根据前台传入实体名称,动态查询数据
  • Netty入门学习
  • 代客泊车对HUT功能交互规范