6.3 中断机构和中断处理程序

L35

学习目标

中断是 CPU 处理外部事件和内部异常的机制,需保护现场、分析中断原因、转入相应处理程序并恢复现场返回。

  • 中断的基本概念:CPU 在执行程序时遇到外部事件或内部异常,暂停当前程序转去处理事件,处理完后返回。
  • 中断的类型:外部中断(硬件中断,如 I/O 完成、时钟)和内部中断(异常/陷入,如缺页、系统调用)。
  • 中断处理过程:保护 CPU 现场→分析中断原因→转入相应处理程序→恢复现场返回。
  • 中断优先级:多个中断同时发生时按优先级处理,高优先级可抢占低优先级。

原理 · 深入理解

中断处理路径 设备 IRQ 关中断/保存 中断服务 读状态 · 清标志 恢复 可唤醒阻塞任务 HDF / 驱动下半部 对照轮询:中断让 CPU 去做别的事,直到设备就绪

6.3 中断机构和中断处理程序

本节概览:先建立「中断机构和中断处理程序」的框架,再依次展开下列小节。

  1. 中断简介
  2. 中断处理程序

6.3.1 中断简介

中断和陷入指CPU对I/O设备发来的中断信号的一种响应。CPU暂停正在执行的程序,保留CPU环境后,自动转去执行该I/O设备的中断处理程序。

中断和陷入的主要区别是信号来源,即来自CPU外部还是CPU内部。

中断

由CPU外部事件引起。

陷入(Trap)

由CPU内部事件引起,如程序出错、运算上下溢出,又称内中断。

屏蔽(禁止)中断

处理机处理一个中断时屏蔽所有中断,对任何新到的中断请求暂不予理睬。优点是简单,但不能用于实时性要求较高的中断请求。

嵌套中断

在设置了中断优先级的系统中:同时有多个不同优先级中断请求时,CPU优先响应最高优先级请求;高优先级中断请求可抢占正在运行的低优先级中断的处理机。

中断向量表

为每种设备配以相应的中断处理程序,将其入口地址放在中断向量表的一个表项中,为每个设备的中断请求规定一个中断号,直接对应于中断向量表的一个表项。

中断优先级

系统为不同中断源规定不同的优先级。

图6-9 对多中断的处理方式 串行屏蔽 嵌套优先
图6-9 对多中断的处理方式

6.3.2 中断处理程序

当一个进程请求I/O操作时,该进程被挂起,直到I/O设备完成操作后,设备控制器向CPU发送中断请求,CPU响应后转向中断处理程序,处理程序执行相应处理,处理完后解除相应进程的阻塞状态。

图6-10 中断现场保护示意图 PC / PSW 压栈 中断处理 恢复
图6-10 中断现场保护示意图

做 · 实验

  • 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
  • 填写外设→module→service 表;交互动画预览寻道。
  • 编译 HDF UART 实验,确认输出能表明走了服务而不是纯裸机路径。
  • 对照裸机串口实验的日志,列出多出来的标识或调用层次。
  • 烧录 08-hdf-uart,串口有课程标识行。

打开工作台

中断机构和中断处理程序

hdf-device-table

用控件单步操作;日志区记下每一步发生了什么。

代码导读

本课在工作台编译烧录。先读 user 实验入口,再对照 kernel / HDF 中被调用的函数,不要一上来改链接脚本。

总结与提升

  • 能说明双缓冲的好处。
  • 能用自己的话复述学习目标,并指出概念与板上实验的对应。
  • 能区分 moduleName 与 serviceName。
  • 能解释路径名解析步骤。
  • 映射表含 uart0、gpio,并预留 tft/rgb。
  • 能默写 Bind/Init/Release 职责。
  • 串口输出稳定,并能说明访问路径经过 HDF。
  • 按下/松开有 HDF 日志。
  • 能叙述中断处理大致步骤。

延伸思考

  • RGB 帧缓冲算哪类缓冲?
  • 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?
  • 同一驱动多实例如何表示?
  • 扁平「对象键值存储」算目录吗?

← 本阶段封面 · 课程列表