Appearance
题目
下列选项中,操作系统提供给应用程序的接口是( )。
错因
B
中断是硬件触发的事件——CPU 收到中断信号自动陷入内核处理,不是 OS 给应用程序"用"的东西。应用程序也不能"调用中断"(INT n 那种是软中断,本质还是触发陷入指令进系统调用)。把中断当成接口是把"OS 内部机制"和"对外接口"混了。
C
库函数是用户态代码——printf、strlen 等是 C 标准库函数,跑在用户态,不是 OS 提供的。库函数内部可能调用系统调用(printf 调 write),但库本身是另一层(用户库),不是 OS 接口。把"调用就是接口"扩大到库函数就错了。
D
原语(primitive)是 OS 内部的不可分割操作——比如 wakeup、block 这些内核基本动作。它在内核态执行,不暴露给应用程序,也不直接被应用程序"调用"。把"OS 内部基本动作"当成"应用接口"是搞错了暴露层级。
总解析
应用程序与 OS 之间的接口 = 系统调用。这是用户态和内核态之间唯一的、官方的交互通道。
| 概念 | 在哪一层 | 谁能调用 | 用途 |
|---|---|---|---|
| 系统调用 | OS 内核接口 | 应用程序(用户态发起) | OS 给应用的对外接口 |
| 中断 | 硬件机制 | CPU 自动响应 | OS 内部事件分发 |
| 库函数 | 用户态库(C 标准库等) | 应用程序 | 封装常用功能(可能内部调 syscall) |
| 原语 | OS 内部 | OS 内部代码 | 内核基本不可分割动作(不对外) |
判定钥匙:
- 应用程序通过 fork、open、read、write、execve 等让 OS 干活,这些就是系统调用——OS 内核暴露的接口
- printf 调 write,write 是 syscall——printf 是用户态库函数,write 才是接口
速记:syscall 是 OS 的"对外大门"——应用程序敲门进去让 OS 干活;中断是 OS 的"急救通道"(硬件呼叫 OS);库函数是用户那边的便利工具;原语是 OS 内部的零件。
最终答案是 A。