目录

一、概述

二、中断的框架

2.1 硬件示意图

2.2 中断处理流程

2.2.1 中断处理过程中典型的寄存器

2.2.2 PIC中断处理流程

2.2.3 CPU侧中断处理流程

三、中断的上半部和下半部

3.1 上半部和下半部的由来

四、小结

五、参考


一、概述

操作系统需要对硬件外设进行管理,但是二者的处理速度往往不在一个数量级上,需要一种方法是CPU和外设协同工作而不至于影响到机器的性能,如果采用轮询——内核周期性的对设备状态进行查询,这样会浪费不少CPU时间,从而考虑硬件再需要时再通知内核,变被动为主动,这就是中断机制的由来。

二、中断的框架

2.1 硬件示意图

以8259A为基本模型,主要为了说明中断整体流程

外设的中断信号线通常通过中断控制器与CPU相连,通过上图简单的PIC(8259A)框图试图说明基本的中断硬件框架和处理流程。在PIC工作之前,通常要对其进行配置,主要包括

  • 设定中断触发电信号的类型,常见的有水平触发和边沿触发。
  • 将外设的中断引脚号映射到处理器可见的中断vector。
  • 屏蔽掉某些外部设备的中断。

PIC通常提供一些控制寄存器来进行上述工作,如上图中的ICWs。一个重要的功能就是配置映射规则(红色部分),这样OS通过软件中断号irq来标识中断,软件上拥有更大的灵活性。

2.2 中断处理流程

2.2.1 中断处理过程中典型的寄存器

IRR 中断请求寄存器,某管脚收到中断请求但还没有提交给CPU,概念上等同于有些架构上的中断pending寄存器。

IMR 中断屏蔽寄存器,屏蔽某一个管脚的中断,这样IRR就不会感知到中断。

PR  中断优先级寄存器。

ISR 中断处理中,中断已经提交给CPU但CPU没有处理完毕。

2.2.2 PIC中断处理流程

  1. 一个或者多个管脚上产生中断,如果中断没有被屏蔽,IRR相应位置位。
  2. PIC 拉高INT 通知CPU有中断发生。
  3. CPU 通过INTA 应答。
  4. 收到应答,对应的IRR位清0,对应的ISR置1。
  5. CPU通过INTA发送二次脉冲,计算优先级最高的IRQ,通过D0~D7将其对应的vector发送给CPU。
  6. 等待CPU写EOI,清除ISR对应的位。

TIPS:

  • 被IMR屏蔽的寄存器,不会在IRR中置位,可能会导致中断丢失。
  • CPU 自身屏蔽中断时,如x86上的(CLI),中断会在IRR中置位,处于pending状态,一旦cpu开启中断使能,会立即处理。

画了个图,便于记忆

2.2.3 CPU侧中断处理流程

先说明一个中断向量表的概念,当处理器被中断打断以后会暂停当前的工作,处理中断,这时候需要知道到哪里获取中断处理函数的地址,中断向量表每一项都是处理地址,使用vector去定位这个地址。

  1. cpu获取到vector,查询中断向量表,获取中断处理地址。在x86上根据vector获取IDT表中的中断门,这里需要留意的是程序通过中断门跳转后,对应EFLAGS中的中断使能位IF会关闭!
  2. 保存被打断任务的上下文,执行中断处理程序。
  3. 中断完成后写EOI寄存器应答,恢复被打断的任务的上下文,使其继续执行。

TIPS:

  • 中断处理程序运行在中断上下文,一般和进程上下文进行区分。简单说,上下文是指程序运行时寄存器的最小合集。进程上下文是在进程切换(睡眠、调度等)时需要保存的寄存器的集合,此时内核代表进程执行(系统调用或内核线程);中断上下文是中断打断当前执行的任务过程而产生的,在切换过程中,中断切换的上下文和进程切换的上下文是不同的(如进程调度时需要切换页表cr3,中断切换则不需要)。因此,在进程上下文中可以执行的睡眠、调度等操作不能在中断上下文中进行(因为切换过程要保存原有上下文,切换新的上下文,而切换是由硬件和软件协同完成的,两者上下文不一致会导致问题),后面研究一下不同上下文切换过程就会明白。
  • 在中断上下文执行代码不可阻塞

三、中断的上半部和下半部

3.1 上半部和下半部的由来

一方面,由于中断是打断了原有执行流程的异步操作,我们希望它能迅速的执行完毕返回到原有的任务中去,因为硬件在进入中断上下文过程中中断是被自动关闭的(还记得上面x86执行中断门IF被关闭吗),我们必须尽快开启中断响应其他事件。另一方面,中断处理程序又需要完成大量的工作,如在处理网卡数据包时,处理程序既要对硬件进行应答,还要将数据包拷贝到内存中,交给协议栈处理,这针对千兆万兆的网卡是极大的工作量。显然这两个方面是矛盾的,因此我们一般把中断切分为两个部分:上半部(top half)和下半部(bottom half)。上半部中断是关闭的(即不会主动打开中断),主要完成一些重要、紧急的与硬件相关的任务,还是以网卡举例,上半部会会ack nic保证nic可以触发中断,将报文拷贝到ram中,打开中断,发送EOI。后续协议栈处理交由下半部来做。

四、小结

TO DO

还是没有把所有的展示出来,以后补充

五、参考

【1】深入Linux设备驱动程序内核机制 陈学松

【2】系统虚拟化——原理与实现    intel

【3】Linux内核设计与实现  Robert Love

【4】 linux kernel的中断子系统之(八):softirq

中断(一)—— 综述相关推荐

  1. 漫画-Linux中断子系统综述

    1.中断引发的面试教训 2.什么是中断? 中断: (英语:Interrupt)指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程. 即在程序运行过程中,系统出现了一个必须由 ...

  2. 可以在中断服务程序执行malloc吗?

    这是微信群里面的一个群友提的问题,原问题如下: 今天遇到一个面试问题  请教各位老哥  中断服务程序能否malloc ?为什么?我回答是 不行 因为中断服务程序应该要尽量简短,且执行完中断服务程序会跳 ...

  3. AI综述专栏 | 神经科学启发的人工智能

    https://www.toutiao.com/a6698901312337084940/ 重磅干货,第一时间送达 AI综述专栏 在科学研究中,从方法论上来讲,都应先见森林,再见树木.当前,人工智能科 ...

  4. 张亚勤、韦乐平等综述论文:通信人工智能的下一个十年

    来源:专知 [摘 要]移动通信技术走过了37年的发展历程,人工智能技术也已走过了64年的发展历程.从早期的各自独立演进,到5G与人工智能开始深度融合发展,"5G与人工智能"已被业界 ...

  5. 腾讯面试题Java 并发包之线程池综述

    Java 并发包之线程池综述 ■ 线程池的创建 在Java中,您可以通过调整-Xss参数来调节每个线程栈的大小(64bit系统默认1024KB),当减小该值时意味着可以创建更多的线程数,但问题是JVM ...

  6. 中科院自动化所:最新视觉-语言预训练综述

    论文标题: VLP: A Survey on Vision-Language Pre-training 论文链接: https://arxiv.org/abs/2202.09061 摘要 在过去几年中 ...

  7. 边缘计算安全技术综述

    边缘计算安全技术综述 凌捷,陈家辉,罗玉,张思亮  广东工业大学计算机学院,广东 广州 510006   摘要:随着物联网应用的不断展开,大量移动终端设备参与服务计算,传统的云计算模型已经不能满足网络 ...

  8. 最详细的SLAM综述

    论文:Past, Present, and Future of Simultaneous Localization And Mapping: Towards the Robust-Perception ...

  9. ARM-Linux中断系统

    1.前言 了解Linux中断子系统,同时也需要了解ARM体系结构中断处理流程:在熟悉整个软硬件架构和流程基础上,才能对流程进行细化,然后找出问题的瓶颈.<2. 梳理中断处理子系统> 但是所 ...

  10. 《Cortex-M0权威指南》之Cortex-M0技术综述

    <Cortex-M0权威指南>之Cortex-M0技术综述 转载请注明来源:cuixiaolei的技术博客 Cortex-M0 处理器简介 1. Cortex-M0 处理器基于冯诺依曼架构 ...

最新文章

  1. 修改FileZilla生成证书的有效期
  2. 2019年了,C#发展的怎么样了呢?
  3. 前端学习(2883):实现事件处理函数批量绑定
  4. 已编辑好的mysql_安装好的mysql改变数据库文件位置
  5. Vue.use()与Vue.prototype
  6. [原创]jQuery插件Realtime-Modifier正式发布!
  7. koa 的 Context
  8. 七牛2015结姻大典,约吗?
  9. 使用5502自带的UART口发送数据乱码的问题
  10. 2021-07-04应用的生命周期
  11. Sequence I
  12. api 原生hbase_HBase实践 | BDSHBase数据迁移同步方案的设计与实践
  13. 使用Tushare库下载股票数据
  14. OpenGL三维小球碰撞实现方法(glm、glfw)
  15. 《SVN web管理工具CollabNetSubversionEdge》
  16. 联想笔记本重装系统声卡驱动未安装报错代码28,声音图标显示红叉没有声音
  17. 每日一练_13 :java设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声(使用接口)。
  18. 非技术/汇报措辞:你懂得怎样向领导汇报吗(审阅、审批、批阅、批示、查阅)
  19. “海青杯”复赛群雄逐鹿,凡科为青年创业翱翔插上翅膀
  20. DbVisualizer 10破解之后,在输入框使用光标无法准确定位字符

热门文章

  1. About ListView
  2. php 查询出来的字段名全是小写或者大写
  3. yii2添加自定义字段
  4. 今天写的一个导出html页面的过程
  5. SDN第六次上机作业
  6. 游戏迷看过来 年末促销买个华为平板 M3可畅玩
  7. Linux 要如何查看系统架构
  8. springmvc 接收对象 滴灌摘要
  9. [AaronYang]C#人爱学不学[2]
  10. 重写对象的equals和hashCode方法