Skip to content

2012年 408 操作系统 第 31 题

操作系统2012年选择题2分

题目

下列关于进程和线程的叙述中,正确的是( )。

错因

B

把进程和线程的角色反着记了。引入线程后角色分工是:进程是资源分配单位(地址空间、文件描述符表等以进程为单位)、线程是调度单位(CPU 调度看线程)。把两者位置颠倒是这道题最常见的错。

C

把系统级和用户级线程混为一谈。用户级线程的切换全在用户态线程库里完成(保存栈 / 改 PC / 恢复另一线程的栈),不需要内核——OS 看到的是整个进程,不知道里面有几个 ULT;系统级线程才需要内核切换。误以为两者都靠内核是抹平了 ULT 和 KLT 的关键差异。

D

线程是为了共享地址空间才引入的——同一进程内的线程共享代码段、全局变量、堆,只有栈和寄存器各自一份。如果各线程地址空间独立,那就是进程而不是线程了。

总解析

进程 vs 线程 的核心分工:

维度进程线程
资源分配单位(地址空间、FD 表、信号处理表)
调度单位没有线程时是支持线程后是
地址空间独立同进程内共享
切换开销大(要切地址空间)小(不切地址空间)

关键澄清"是否支持线程"对进程的影响

  • 不支持线程的 OS:进程既是资源分配单位也是调度单位(早期 Unix)
  • 支持线程的 OS:进程仍是资源分配单位,调度单位变成线程

→ 不管 OS 支不支持线程,进程始终是资源分配的基本单位

逐项核对:

选项描述判定
A不管是否支持线程,进程都是资源分配单位 —— 进程的资源分配角色是不变的
B线程是资源分配单位、进程是调度单位✗ 反——角色颠倒
C系统级和用户级线程切换都需内核✗ ULT 切换不进内核
D同进程内线程地址空间不同✗ 反——线程定义就是共享地址空间

速记:"进程是资源的家、线程是 CPU 的脚"——家始终是进程一家人共享的(包括没有线程时进程一个人住),脚是看哪个线程在跑(调度)。

最终答案是 A

最后更新:

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