内容整理自较早前的微机原理学习笔记,重点梳理了实现硬件中断机制所依赖几个数据结构和硬件原件。

为什么需要中断?

中断机制的出现是为了协调处理器与外部设备速度不一致的问题,以提高处理器的利用率。
试想我们打开了文本编辑器,处理器就不干活了,等着键盘输入,这会浪费多少处理器计算资源?
另一种方式是处理器忙自己的,等有输入时再通知处理器。这种异步通知处理器就是利用的中断机制。
从工作流程上看有点类似Java语言通过try-catch捕获InterruptedException,主流程收到其他线程的打断通知后转向处理异常情况。

(键盘向中断控制器发送电信号的示例图)

处理器如何发现中断信号?

通常有两种模式感知外部事件的发生。一种是主动的检测,每隔一段去询问一次,即轮询,另一种是被动的,当事件发生时由对方通知自己。处理器接受中断信号采用的轮询方式。

处理器的控制单元是一个时序逻辑电路,同时也是一个有限状态机(FSM) [1],基础的FSM有三个状态FETCH、DECODE、EXECUTE,它表示处理器执行一条指令的有序序列是:从内存读取指令 -> 解释指令 -> 执行指令。
后来在计算机设计上出现了中断机制,就在原来FSM的基础上增加了一个新状态——中断
处理器执行一条指令的流水线就变成了从内存读取指令 -> 解释指令 -> 执行指令 -> 检测中断
由此可见,检测中断事件发生在每一次CPU指令周期中

(一个有中断机制的CPU指令周期(instruction-cycle))

中断控制器

在物理实现中,CPU上有两个引脚NMI和INTR [2],专门用于接收外部设备的中断信号。不过由于CPU的引脚数量有限,给每个外设预留一个引脚是不现实的。
所以在外设和处理器中间还有一个硬件,叫做可编程中断控制器(Programmable Interrupt Controller,PIC),外设通过电路向PIC发送一个中断信号,然后PIC再发送给处理器。PIC是可编程的,意味着可以调整每个引脚对应的外部设备,以及当同时发生多个中断时,设置中断的优先级。

处理器如何处理中断?

中断只是一个电信号,不能传递更多的数据,那么处理器要如何知道怎么处理一个中断请求(interrupt request,IRQ)?
处理逻辑放在中断处理程序(interrupt service routine, ISR)中,该程序是硬件驱动的一部分。我们在安装键盘驱动、鼠标驱动时也向操作系统注册了ISR。
虽然中断类型有很多,处理器倒也不用预先记录每个ISR在什么位置。操作系统在启动时会创建一个中断向量表(interrupt vector table,IVT),这个数据结构是中断ID到ISR入口地址的映射,存放在一个操作系统和处理器都知道的固定内存位置。根据约定,在内存地址空间中,最低的1K空间,即00000H到003FFH为中断向量表。当中断发生时,处理器根据中断ID获取到ISR程序的入口地址,开始执行中断处理程序。

名词释义

[1]有限状态机(Finite State Machine,FSM):一种数学计算模型,该模型在任意时刻只有有限个状态,且往下一个状态的转移依赖上一个状态的输入。
[2]中断有两种,NMI不可屏蔽中断,INTR可屏蔽中断。处理器即便检测到中断请求,也不是每次都要处理。

参考资料

  1. Arduino Interrupts Tutorial:https://www.youtube.com/watch?v=QtyOiTw0oQc
    视频中作者用Arduino单片机演示了硬件实现中断的细节,很值得一看,会让你对硬件中断有个直观的认识。

  2. 可编程的中断控制器:https://en.wikipedia.org/wiki/Programmable_interrupt_controller

    中断控制器的几号引脚对应哪个外部设备是可以编辑的,所以是可编程的。

    以及同时发生多个中断请求时,也由中断处理器确定优先级。

  3. 《计算机系统》Computer Systems:An Integrated Approach to Architecture and Operating Systems

    本文的内容主要来自这本书的第四章和第六章。这是一本很棒的微机原理教材。

  4. 中断处理程序词条:https://en.wikipedia.org/wiki/Interrupt_handler

  5. CPU怎么检测到中断的?操作系统 - CPU是怎么检测到外中断的? - SegmentFault 思否

    这个讨论里有提到中断引脚以及中断控制器

  6. 轻量级线程词条:https://en.wikipedia.org/wiki/Light-weight_process

    里面有讲到调度器激活

  7. Oracle Solaris编写驱动程序文档:中断处理程序概述 - 编写设备驱动程序

    这是写给编写Solaris操作系统驱动程序的开发人员的说明文档,文中比较详细的解释了怎么编写中断处理程序。
    简单阅读一下,可以增加对中断处理程序的直观认识。

  8. 如果同时发生两个中断CPU怎么处理?知乎 - 有问题,就会有答案

  9. 《计算机组成与体系结构》Computer Organization and Architecture: Designing for Performance

    第七章有详细讲解中断处理器的细节

  10. 中断词条:https://zh.wikipedia.org/wiki/中斷

CPU中断的硬件实现原理相关推荐

  1. 调试器工作原理--CPU软件断点/硬件断点/单步执行标识

    断点和单步执行是两个经常使用的调试功能,也是调试器的核心功能. 断点是调试器的最常用技术之一.其基本思想是在某一个位置设置一个陷阱,当CPU执行到此位置时,中断到调试器中,让调试者分析和调试,之后恢复 ...

  2. 8.4-中断系统小结(cpu中断七个问题)

    [README] 本文转自bilibili<计算机组成原理(哈工大刘宏伟)>的视频讲解,非常棒,墙裂推荐: [1]中断介绍 1)作用:用中断系统实现了外设数据的输入输出: 还可以用于程序调 ...

  3. 单片机中存储器扩展位地址线怎么算_51单片机CPU结构各部件的原理详细分析

    一. 51单片机串行口工作原理 MCS-51系列单片机片内有一个串行I/O端口,通过引脚RXD(P3.0)和TXD(P3.1)可与外设电路进行全双工的串行异步通信. 1.串行端口的基本特点 8031单 ...

  4. 【嵌入式基础】STM32中断及DMA通信原理编程

    本文主要学习stm32中断.DMA通信原理和编程方法.使用stm32tubemx和HAL库分别完成中断模式编程和串口通信中断实验. 目录 一.STM32中断,DMA通信原理编程 1.STM32中断 ( ...

  5. Android 系统(175)---Android硬件加速原理与实现简介

    Android硬件加速原理与实现简介 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到"硬件加速"这个词.由于操作系统对底层软硬件封装非常完善,上层软件开发者往往 ...

  6. Linux下内存使用率、CPU使用率、以及运行原理-转

    Linux下内存使用率.CPU使用率.以及运行原理 Linux下怎样查看机器配置啊?cpu/内存/硬盘 dmesg 显示开机信息.kernel会将开机信息存储在ring buffer中.您若是开机时来 ...

  7. esp8266~GPIO中断和硬件定时器的正确使用

    最近项目需要检测IO口下降沿信号和定时计数,于是就用到了GPIO中断和硬件定时器.有点可惜,github上面RTOS版sdk没有硬件定时器的使用方法,能够参考的只有1.5的sdk,然而我不会移植,只能 ...

  8. Android硬件加速原理与实现

    一 概述 在手机客户端尤其是 Android 应用开发过程中,我们经常会接触到"硬件加速"这个概念.由于操作系统对底层软硬件封装非常完善,上层软件开发者往往对硬件加速的底层原理了解 ...

  9. Android硬件加速原理与实现简介

    转载自:https://tech.meituan.com/hardware-accelerate.html 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到"硬件加速&qu ...

最新文章

  1. linux下lua bit模块的安装
  2. 百度前端技术学院Task20 笔记
  3. 哈尔滨工业大学-数据库系统(基本知识与关系模型2)
  4. php sublime 插件安装教程,【图片】【Sublime Text 2神器教程】ST安装、插件及操作详解【php吧】_百度贴吧...
  5. C# 图片识别(支持21种语言)
  6. 【图像处理】——Python实现two_pass方法来进行连通域的提取
  7. html表单提交不判断,请问jquery有方法可以判断一个表单提交之后结果是成功或不成功吗?...
  8. 应用实例_兴达奇智能燃烧控制器BMU460DP现场应用实例图
  9. [BZOJ] 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场
  10. ckc交易什么意思_期货交易中的标准仓单充抵保证金是什么意思?
  11. paip.提升用户体验----记住用户名与自动登录
  12. 三星8核S5P6818 核心板(ARM Cortex-A53架构)
  13. 无法安装冰点还原_教程|有备有还,再备不难,如何实现整机还原?
  14. 计算机革命的主角和英雄——十大超级老牌黑客
  15. 基于LDC1614 1612的电感式位移传感器
  16. printf函数,fprintf函数,sprintf函数
  17. 自定义UDF函数:随机生成N位随机数,包含字母,数字
  18. 右击计算机管理打开会闪退,win10应用商店为什么会闪退 win10应用商店出故障怎么修复...
  19. 企业shell编程基础问题解决实践-是骡子是马溜溜
  20. aspen为什么不能用_科学网—Aspen Plus与麻省理工学院(MIT):牛校为什么会牛? - 叶小球的博文...

热门文章

  1. mysql索引创建规则、联合与一般索引、执行计划、索引选择,索引重建与下推
  2. 3dmax与maya的区别在哪里?业界大牛给新手小白的专业解疑
  3. 简单Pandas矩阵归一化
  4. Python-结构体数组
  5. lua 字符串分割_lua切割字符串成table数组
  6. 2022-2028年中国电脑弹簧机行业市场经营管理及投资机会分析报告
  7. 盛大CEO陈天桥:卖了股票也要做网络电视
  8. 解决genymotion-arm-translation.zip无法拖拽安装的问题
  9. 五个金念什么_两个“金”字合在一起读什么(图)
  10. 全球边缘计算大会·北京站最新动态!