Skip to content

2026年 408 操作系统 第 32 题

操作系统2026年选择题2分

题目

下列操作中,鼠标中断处理程序完成的是( )。

错因

A

把"中断处理"和"上层语义解析"搞混了。判断"这是单击 / 双击 / 拖拽"涉及对鼠标动作序列的语义解读,应由更高层的设备无关 I/O 软件或图形子系统完成(如 X Server、Wayland 合成器)。中断处理程序的设计目标是尽快返回——不能在中断上下文里做语义分析,否则会阻塞后续中断。

B

把中断处理和系统调用做的事弄混了。鼠标数据从内核缓冲区复制到用户进程缓冲区,是用户进程通过 read 系统调用主动发起的——上下文已切到该进程的内核态,再将数据 copy_to_user 到该进程缓冲区。中断处理程序根本不知道哪个用户进程在等这条数据,它的工作止于"把数据放进内核缓冲区"。

C

把"硬件做的事"误算到了软件头上。数据从鼠标这个外设到设备的数据寄存器,是设备控制器自己完成的硬件动作(鼠标检测到位置变化 / 按键 → 控制器把数据放进自己的输入寄存器并触发中断请求)。中断处理程序是 CPU 看到中断信号后才开始跑的软件,它不可能"亲手"把数据从外设搬到寄存器——那一步中断尚未发生。

总解析

判定思路:把"鼠标按了一下"到"应用程序拿到事件"这个全链路按层次拆开,看每一层各做什么——中断处理程序只负责其中一段。

完整数据流(从下到上):

阶段谁做做什么
① 物理层鼠标硬件 + 设备控制器检测按键/移动;把数据放入控制器的数据寄存器;向 CPU 发中断信号
中断处理中断处理程序(OS 内核)从数据寄存器读取数据 → 写入内核缓冲区;ack 中断
③ 设备无关层OS I/O 软件把字节级数据组装成"事件"(移动/单击/双击)、放入对应进程等待队列
④ 用户层应用程序通过 read() 系统调用触发 copy_to_user,把内核缓冲区的数据复制到应用缓冲区

中断处理程序的关键设计原则是**"快进快出"**——只做必须立即做的最小工作(搬数据离开寄存器、确认中断),其余复杂处理(语义解析、唤醒进程、与用户交互)都交给上层。

逐项核对

选项描述实际由谁做
A解析鼠标输入指令含义(是单击还是双击)上层设备无关 I/O 软件或图形系统
B数据同步到用户缓冲区用户进程发起的 read() 系统调用(copy_to_user)
C数据从输入设备到数据寄存器设备控制器(硬件)
D数据从数据寄存器到内核缓冲区中断处理程序 ✓

速记中断处理 = 把数据从硬件寄存器抢救到内核缓冲区,前后两端都不归它管:之前是硬件、之后是用户的事。

最终答案是 D

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题