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

浅谈中断控制器:从 IRQ 到 IRR、IMR、In-Service Register

在计算机体系结构中,中断是 CPU 感知外设事件的核心机制。无论是键盘输入、网卡收包,还是定时器触发,CPU 都是通过中断来获知这些事件。然而,中断并不是设备直接告诉 CPU,而是要经过一个“前台接待”——可编程中断控制器 (PIC)。本文将带领大家逐步理解 IRQ 线、INTR 信号,以及 PIC 的三大核心寄存器:IRR、IMR、In-Service Register (ISR),并区分清楚与 中断服务程序 (Interrupt Service Routine, ISR) 的不同。


1. IRQ 线与 INTR 信号

  • IRQ (Interrupt Request) 线
    每个外设通过 IRQ 线向 PIC 发出中断请求。例如:

    • IRQ0:定时器
    • IRQ1:键盘
    • IRQ14:IDE 硬盘
  • INTR (Interrupt Request to CPU)
    PIC 收集各 IRQ 请求,判断优先级,然后通过 INTR 总线把最终的请求送给 CPU。

类比:

  • IRQ 线 = 客户打电话给前台。
  • INTR 信号 = 前台按总机灯提醒经理(CPU)。

2. PIC 的三大寄存器

2.1 IRR (Interrupt Request Register)

  • 作用:记录哪些 IRQ 线已经触发。

  • 形式:位图寄存器,每一位对应一条 IRQ 线。

    • IRQn 触发 → IRR[n] = 1
  • 理解:相当于“待办清单”。


2.2 IMR (Interrupt Mask Register)

  • 作用:屏蔽某些中断线。

    • IMR[n] = 1 → 屏蔽 IRQn(不让进入 CPU)
    • IMR[n] = 0 → 允许 IRQn
  • 理解:相当于“黑名单/静音名单”。


2.3 In-Service Register (ISR,寄存器)

  • 作用:记录哪些中断正在被 CPU 服务中
  • 当 PIC 把某个请求从 IRR 交给 CPU 时,就会把该位从 IRR 移到 ISR。
  • CPU 处理完并发送 EOI (End Of Interrupt) 之后,PIC 才会清除对应的 ISR 位。
  • 理解:相当于“正在经理办公室里的访客名单”。

3. 中断服务程序 (Interrupt Service Routine, ISR)

需要特别注意:中断服务程序(Interrupt Service Routine)In-Service Register 只是缩写相同,完全是两个概念。

  • In-Service Register:PIC 的硬件寄存器,用来标记“哪个中断正在处理中”。
  • Interrupt Service Routine:软件层面的中断处理函数,CPU 响应中断后跳转执行的代码。

当 CPU 收到中断:

  1. 保存当前现场(寄存器、EFLAGS、CS:EIP 等)。
  2. 根据中断向量号,从 IDT (Interrupt Descriptor Table) 找到对应入口地址。
  3. 跳转执行该中断服务程序(ISR routine)。

例如:键盘中断会触发 CPU 执行 keyboard_interrupt_handler() 例程。


4. 一次中断的生命周期

串起来看整个流程:

  1. 设备发请求

    • 外设触发 IRQn → IRR[n] = 1
  2. PIC 检查屏蔽

    • IMR[n] = 1 → 屏蔽,不会送到 CPU
    • IMR[n] = 0 → 有资格继续
  3. PIC 选中请求

    • IRR[n] 移到 In-Service Register[n]
    • 拉高 INTR → 通知 CPU
  4. CPU 响应

    • 保存上下文
    • 跳转执行中断服务程序 (ISR routine)
  5. 中断结束

    • 中断服务程序执行完毕 → CPU 向 PIC 发送 EOI
    • PIC 清除 In-Service Register[n]
    • 流程结束

5. 示例:键盘中断

  1. 用户敲键 → IRQ1 → IRR[1] = 1
  2. PIC 检查 → IMR[1] = 0 → 合格
  3. PIC 把 IRR[1] → In-Service Register[1],并拉高 INTR
  4. CPU 响应 → 执行 keyboard_interrupt_handler() 中断服务程序
  5. 程序执行完 → CPU 发 EOI → PIC 清除 In-Service Register[1]

6. 总结对比

缩写全称所属层含义类比
IRRInterrupt Request Register硬件 (PIC)记录“谁来敲门了”待办清单
IMRInterrupt Mask Register硬件 (PIC)屏蔽“谁不许进来”黑名单
In-Service RegisterIn-Service Register硬件 (PIC)标记“谁正在被处理”办公室访客
ISR routineInterrupt Service Routine软件 (OS/驱动)CPU 响应中断后执行的函数会谈过程

7. 总结

通过区分 寄存器 (IRR/IMR/In-Service Register)中断服务程序 (ISR routine),我们可以完整理解中断的生命周期。

PIC 就像是一个严格的前台调度员:

  • IRR 记录来访,
  • IMR 过滤名单,
  • In-Service Register 跟踪正在服务的客户,
  • 而 CPU 最终会跳转到相应的中断服务程序来完成处理。

笔者如果在某些地方理解的不正确,还望大家批评指正!

http://www.dtcms.com/a/362024.html

相关文章:

  • 软考-操作系统-错题收集(3)文件系统的索引节点结构
  • 【前端】《手把手带你入门前端》前端的一整套从开发到打包流程, 这篇文章都会教会你;什么是vue,Ajax,Nginx,前端三大件?
  • ComPE for win 纯净的PE系统
  • 软考中级数据库系统工程师学习专篇(67、数据库恢复)
  • Spring Security 深度学习(四): 会话管理与CSRF防护
  • 2025 数字化转型期,值得关注的 10 项高价值证书解析
  • Linux笔记---计算机网络概述
  • 视频动作识别模型-C3D
  • 线程池项目代码细节5(解决linux死锁问题)
  • 关系型数据库——GaussDB的简单学习
  • 《投资-43》- 自然=》生物=》人类社会=》商业=》金融=》股市=》投资的共同逻辑:生存竞争与进化论
  • 前端实现查询数据【导出】功能
  • 自制扫地机器人(二) Arduino 机器人避障设计——东方仙盟
  • A股大盘数据-20250901 分析
  • 设计模式:代理模式(Proxy Pattern)
  • HOW - 前端团队组长提升(沟通篇)
  • kubectl-etcd
  • RSA的CTF题目环境和做题复现第1集
  • nacos微服务介绍及环境搭建
  • linux 函数 kthread_should_stop
  • 「Unity3D」RectTransform的AnchorMin与Max直接定位到Rect四角,使得Left-Top-Right-Bottom都为0
  • 【Spark Core】(三)RDD的持久化
  • MT-Workflow: Odoo 可视化工作流引擎
  • 程序员与杀毒软件:一场不必要的“战争”?程序员用什么杀毒软件?-优雅草卓伊凡
  • 人工智能语音交互开发(五)麦克风频率响应范围
  • PostgreSQL 索引大全
  • 奇偶破题:当反函数撞上奇函数
  • Nano Banana一战封神,我总结了10种官方不会告诉你的神级技巧。
  • 太浅显数学常识暴露太重大数学真相:同样是有首项的无穷数列,此列的项可多于彼列的项
  • 使用修改过的arj源码编译和测试