Skip to content

2010年 408 操作系统 第 32 题

操作系统2010年选择题2分

题目

本地用户通过键盘登录系统时,首先获得键盘输入信息的程序是( )。

错因

A

shell(命令解释程序)在用户登录之后才启动,且按键时它早已运行——但它不是"首先获得"按键的程序。键盘扫描码先经过中断 → 内核驱动 → 缓冲队列,shell 通过 read 从输入队列里拿到字符,至少是第三个接触按键信息的环节。

C

系统调用服务程序是用户主动 read 时才被触发——但用户按键这件事是硬件主动发起的(按键 → 键盘控制器 → 中断),不是用户态主动 read 启动的事件链。把"事件流"的方向看反了。

D

用户登录程序(login)也是个用户进程——用户输入的字符经过一系列内核处理才到达它。它跟 shell 一样,也是通过 read 等待键盘数据,按键信息要先经过中断 ISR + 驱动队列,最后才到登录程序。

总解析

按键 → OS → 用户进程的完整事件链:

1. 用户按键

2. 键盘控制器检测按键 → 产生扫描码 → 触发硬件中断(IRQ)  ← 中断从这里开始

3. CPU 响应中断 → 跳到中断处理程序          ← 第一个软件!

4. 中断处理程序:
   - 从键盘控制器读扫描码
   - 翻译成 ASCII / Unicode
   - 放入键盘输入缓冲队列
   - 唤醒等待键盘的进程(如登录程序、shell)

5. 等待按键的用户进程被唤醒,read 系统调用返回字符

6. 用户进程(login → shell)处理字符

首先获得按键信息的是中断处理程序——它是硬件中断后第一个执行的软件,从硬件那里直接拿扫描码,没有任何中间层。

程序何时获得按键信息顺序
B 中断处理程序硬件中断后立刻第 1(首先)
C 系统调用服务程序用户进程 read 时(更晚)第 2
D 用户登录程序read 返回时第 3
A 命令解释程序登录后 read 时第 4(如果登录到 shell)

关键判定:硬件主动发起的事件 → 中断处理程序最先接到。键盘按下是硬件触发的异步事件,唯一直接响应硬件信号的软件就是 ISR。

最终答案是 B

最后更新:

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