6.3 中断机构和中断处理程序
L35
学习目标
中断是 CPU 处理外部事件和内部异常的机制,需保护现场、分析中断原因、转入相应处理程序并恢复现场返回。
- 中断的基本概念:CPU 在执行程序时遇到外部事件或内部异常,暂停当前程序转去处理事件,处理完后返回。
- 中断的类型:外部中断(硬件中断,如 I/O 完成、时钟)和内部中断(异常/陷入,如缺页、系统调用)。
- 中断处理过程:保护 CPU 现场→分析中断原因→转入相应处理程序→恢复现场返回。
- 中断优先级:多个中断同时发生时按优先级处理,高优先级可抢占低优先级。
原理 · 深入理解
6.3 中断机构和中断处理程序
本节概览:先建立「中断机构和中断处理程序」的框架,再依次展开下列小节。
- 中断简介
- 中断处理程序
6.3.1 中断简介
中断和陷入指CPU对I/O设备发来的中断信号的一种响应。CPU暂停正在执行的程序,保留CPU环境后,自动转去执行该I/O设备的中断处理程序。
中断和陷入的主要区别是信号来源,即来自CPU外部还是CPU内部。
中断
由CPU外部事件引起。
陷入(Trap)
由CPU内部事件引起,如程序出错、运算上下溢出,又称内中断。
屏蔽(禁止)中断
处理机处理一个中断时屏蔽所有中断,对任何新到的中断请求暂不予理睬。优点是简单,但不能用于实时性要求较高的中断请求。
嵌套中断
在设置了中断优先级的系统中:同时有多个不同优先级中断请求时,CPU优先响应最高优先级请求;高优先级中断请求可抢占正在运行的低优先级中断的处理机。
中断向量表
为每种设备配以相应的中断处理程序,将其入口地址放在中断向量表的一个表项中,为每个设备的中断请求规定一个中断号,直接对应于中断向量表的一个表项。
中断优先级
系统为不同中断源规定不同的优先级。
6.3.2 中断处理程序
当一个进程请求I/O操作时,该进程被挂起,直到I/O设备完成操作后,设备控制器向CPU发送中断请求,CPU响应后转向中断处理程序,处理程序执行相应处理,处理完后解除相应进程的阻塞状态。
做 · 实验
- 根据「学习目标」列出 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 上,会多出哪些硬件假设?
- 同一驱动多实例如何表示?
- 扁平「对象键值存储」算目录吗?