操作系统章节测 01:操作系统概述 与 进程与线程

覆盖《操作系统概述》《进程与线程》两章,共 35 题(第 1-33 题为单项选择,第 34-35 题为综合大题),全部为模拟题。限时 80 分钟,先做后看答案。做错的题请登记到 错题本。

第 1 题 操作系统的四个特征中,互为存在条件、缺一不可的最基本两个特征是( )。 A. 并发与虚拟 B. 并发与共享 C. 共享与异步 D. 虚拟与异步

第 2 题 单处理器系统中,下列说法正确的是( )。 A. 多道程序设计使多个程序并行执行 B. 多个程序宏观上同时运行、微观上分时交替执行,称为并发 C. 并发与并行是同一个概念的两种说法 D. 引入多道程序后,任意时刻可以有多个程序同时处于运行态

第 3 题 分时系统与实时系统相比,下列说法错误的是( )。 A. 分时系统追求及时响应与交互性 B. 实时系统首要目标是满足截止时间要求,可靠性要求高 C. 实时系统以吞吐量最大化为设计目标 D. 分时系统的时间片轮转不能保证紧急任务优先处理

第 4 题 使多道批处理系统中 CPU 与 I/O 设备并行工作成为可能的关键技术是( )。 A. 虚拟存储技术 B. 通道技术与中断技术 C. SPOOLing 技术 D. 覆盖与交换技术

第 5 题 操作系统提供给应用程序(编程人员)使用的接口是( )。 A. 命令接口 B. 图形用户界面 GUI C. 系统调用 D. 库函数

第 6 题 下列指令中,属于特权指令的是( )。 A. 加法运算指令 B. 从内存取数指令 C. 置时钟指令 D. 陷入指令

第 7 题 关于陷入指令(trap),下列说法正确的是( )。 A. 陷入指令是特权指令,只能在内核态执行 B. 陷入指令必须在用户态可以执行,否则用户程序无法请求内核服务 C. 执行陷入指令后 CPU 仍处于用户态 D. 陷入指令由编译器在链接阶段自动插入,与操作系统无关

第 8 题 缺页中断属于( )。 A. 外中断 B. 内中断中的自愿中断 C. 内中断中的故障(fault) D. 内中断中的终止(abort)

第 9 题 时钟中断、I/O 完成中断、用户进程执行除法指令出错,依次属于( )。 A. 外中断、外中断、内中断 B. 内中断、外中断、内中断 C. 外中断、内中断、外中断 D. 内中断、内中断、外中断

第 10 题 中断隐指令完成的操作是( )。 A. 关中断、保存断点、取出中断服务程序入口地址并送 PC B. 保存通用寄存器、执行设备服务例程、恢复现场 C. 关中断、保存通用寄存器、执行中断返回 D. 判断中断优先级并处理中断嵌套

第 11 题 CPU 响应中断(检测中断信号)的时机是( )。 A. 任意时钟周期 B. 一条指令执行完毕后 C. 一个机器周期结束后 D. 取指周期结束后

第 12 题 用户程序发出一次磁盘读请求(系统调用)并阻塞等待,数据就绪后处理完毕返回用户程序。此过程中 CPU 由用户态进入内核态至少( )次。 A. 1 B. 2 C. 3 D. 4

第 13 题 与大内核相比,微内核结构的主要优点与代价是( )。 A. 性能更高 / 可靠性差 B. 可靠性与可扩展性好 / 服务进程间通信需经内核 IPC,频繁状态切换导致性能较低 C. 代码量更大 / 维护困难 D. 设备驱动运行在内核态 / 便于调试

第 14 题 关于外核(exokernel)体系结构,下列说法正确的是( )。 A. 内核负责资源的分配策略,用户态库操作系统负责资源保护 B. 内核只负责资源保护与多路复用,资源分配策略交由用户态的库操作系统实现 C. 外核将全部系统服务都置于内核态运行 D. 外核通过消息传递为每个应用提供文件系统服务

第 15 题 下列不属于 PCB 内容的是( )。 A. 进程标识符 PID B. 程序的代码 C. 进程优先级 D. 程序状态字 PSW 的副本

第 16 题 下列进程状态转换中,不可能发生的是( )。 A. 运行态→就绪态 B. 阻塞态→就绪态 C. 就绪态→阻塞态 D. 运行态→阻塞态

第 17 题 关于"运行态→阻塞态"的转换,正确的说法是( )。 A. 是被调度程序强制剥夺 CPU 导致的被动行为 B. 是进程自身请求等待某事件(如请求 I/O、P 操作)的主动行为 C. 由其他进程通过 wakeup 原语导致 D. 由时钟中断导致

第 18 题 处于静止阻塞(挂起阻塞)状态的进程,当它所等待的事件发生后,该进程将转换为( )。 A. 活动阻塞态 B. 运行态 C. 静止就绪(挂起就绪)态 D. 活动就绪态

第 19 题 进程控制原语(如创建、撤销、阻塞、唤醒)执行期间不允许中断,其原子性通过( )实现。 A. 信号量机制 B. 关中断指令 C. 硬件 TestAndSet 指令 D. 管程机制

第 20 题 关于进程通信方式,下列说法错误的是( )。 A. 共享内存是速度最快的 IPC 方式 B. 管道通信是半双工的,双向通信需要建立两个管道 C. 匿名管道可供任意两个无亲缘关系的进程使用 D. 消息传递方式可用于分布式系统中的进程通信

第 21 题 管道通信中,当写进程将管道缓冲区写满而读进程未取数据时,写进程将( )。 A. 继续写入并覆盖旧数据 B. 阻塞等待 C. 被撤销 D. 忙等待不阻塞

第 22 题 引入线程后,下列说法正确的是( )。 A. 线程是资源分配的基本单位,进程是处理机调度的基本单位 B. 进程是资源分配的基本单位,线程是处理机调度的基本单位 C. 进程和线程都是资源分配的基本单位 D. 线程拥有完整的系统资源,可独立于进程存在

第 23 题 在纯用户级线程(多对一模型)的系统中,下列说法正确的是( )。 A. 一个线程阻塞,内核可调度同进程的其他线程运行 B. 一个线程发起阻塞系统调用,整个进程都被阻塞 C. 进程内的多个线程可分配到多个处理机上并行执行 D. 线程切换必须陷入内核并由内核完成

第 24 题 同一进程内的两个线程切换时,下列说法正确的是( )。 A. 必须更换页表基址寄存器,切换地址空间 B. 不需要切换进程地址空间,只需保存/恢复线程的寄存器与栈 C. 必须先撤销原线程 D. 与进程切换的开销完全相同

第 25 题 三级调度中,决定将外存对换区中的进程换入内存的是( )。 A. 高级调度(作业调度) B. 中级调度 C. 低级调度(进程调度) D. 磁盘调度

第 26 题 下列情况中,不能进行进程调度与切换的是( )。 A. 当前进程时间片用完 B. 当前进程主动阻塞 C. 处理中断的过程中 D. 当前进程执行完毕进入终止态

第 27 题 作业 J1、J2、J3、J4 的到达时刻依次为 0、1、2、3,运行时间依次为 8、4、9、5。采用非抢占短作业优先(SJF)调度,平均周转时间为( )。 A. 14.25 B. 15.25 C. 13.75 D. 12.25

第 28 题 某时刻有三个作业等待调度:X 已等待 4、要求服务 2;Y 已等待 3、要求服务 6;Z 已等待 5、要求服务 5。采用高响应比优先(HRRN),将被调度的是( )。 A. X,响应比 3 B. Y,响应比 1.5 C. Z,响应比 2 D. X,响应比 2

第 29 题 关于时间片轮转(RR)调度,下列说法错误的是( )。 A. 时间片过大时,算法退化为先来先服务 B. 时间片过小时,进程切换的开销占比过高 C. 时间片越小,系统吞吐量一定越高 D. RR 适合分时系统,能保证较好的响应时间

第 30 题 关于多级反馈队列调度算法,下列说法错误的是( )。 A. 新进程通常进入最高优先级队列 B. 进程用完当前队列的时间片后降入下一级队列,通常时间片加倍 C. 高优先级队列为空时才调度低优先级队列中的进程 D. 长作业会永远停留在最高优先级队列中被反复调度

第 31 题 某记录型信号量 S 初值为 2,先后经过 3 次 P 操作、0 次 V 操作后,S.value 与等待队列中的进程数为( )。 A. −1 与 1 B. 1 与 1 C. −1 与 0 D. 0 与 1

第 32 题 关于死锁的必要条件,下列说法正确的是( )。 A. 存在循环等待则一定发生死锁 B. 破坏互斥条件是预防死锁最常用的方法 C. 死锁一定存在循环等待,但存在循环等待不一定死锁 D. 四个必要条件只要满足其中两个就可能死锁

第 33 题 系统有同类资源 10 个,三个进程 P1、P2、P3 的最大需求分别为 6、8、9,目前已分别分得 2、3、3。若用银行家算法判断,当前状态为( )。 A. 安全,存在安全序列 B. 不安全 C. 已经死锁 D. 无法判断

第 34 题(PV 应用大题,模拟题) 睡眠理发师问题。理发店内有一名理发师、一把理发椅和 3 张供顾客等候的椅子(即店内最多同时容纳 4 名顾客)。顾客到达时,若无空椅子则立即离开;有空椅子则坐下等候。理发师没有顾客时睡觉,有顾客时唤醒并依次理发。请用记录型信号量写出理发师进程与顾客进程的同步伪代码。要求:给出每个信号量的定义与初值理由,写出完整伪代码,并验证方案不会死锁。

第 35 题(银行家算法大题,模拟题) 某系统有 A、B、C 三类资源,总量为 (9, 6, 6),当前 5 个进程的资源状况如下:

进程Max (A,B,C)Allocation (A,B,C)
P0(5, 3, 2)(1, 1, 0)
P1(4, 2, 2)(2, 0, 1)
P2(6, 2, 3)(2, 1, 1)
P3(3, 3, 3)(1, 0, 1)
P4(4, 3, 4)(1, 1, 1)

(1) 计算各进程的 Need 向量与当前 Available 向量。 (2) 用安全性检查算法判断当前状态是否安全;若安全,给出一个完整的安全序列(列表推演)。 (3) 此时进程 P2 发出请求 (1, 1, 1),银行家算法能否分配?说明理由。 (4) 若改为进程 P1 发出请求 (1, 0, 1),能否分配?说明理由。

答案与解析

第 1 题:B |考点:操作系统四大特征及相互关系|难度:易 并发与共享互为存在条件:无并发则无需共享,不能共享则并发无法实现;虚拟与异步建立在二者之上。错因提醒:误选 A,把"最基本"错记成"并发与虚拟"。

第 2 题:B |考点:并发与并行的区别|难度:易 单处理器微观上任一时刻只有一个程序在执行,只能并发;"并行"需多核/多处理机支持。错因提醒:A、D 中"并行/多个同时运行态"是单核下的典型错误表述。

第 3 题:C |考点:分时与实时系统设计目标|难度:易 实时系统以截止时间与可靠性为首要目标,资源利用率甚至可让位于实时性;吞吐量最大化是多道批处理的目标。错因提醒:把批处理的目标安到实时系统头上。

第 4 题:B |考点:多道批处理的技术基础|难度:易 通道使 I/O 独立于 CPU,中断使 CPU 能感知 I/O 完成,二者共同支撑 CPU 与 I/O 并行。错因提醒:SPOOLing 是用磁盘模拟脱机 I/O 的技术,不是本题答案。

第 5 题:C |考点:操作系统接口|难度:易 程序接口 = 系统调用,是应用程序使用 OS 服务的唯一途径;命令接口与 GUI 面向人,库函数只是系统调用的封装。错因提醒:误选 D——printf 等"函数"底层仍靠系统调用完成。

第 6 题:C |考点:特权指令范围|难度:易 置时钟改变机器状态,属特权指令;算术与访存为普通指令;陷入指令必须用户态可执行。错因提醒:D 是本考点最高频陷阱。

第 7 题:B |考点:陷入指令与系统调用机制|难度:中 陷入指令在用户态执行,经中断/异常机制切换到内核态执行服务例程,再返回用户态。错因提醒:误选 A 者混淆了"执行陷入指令"(用户态)与"处理系统调用"(内核态)两个阶段。

第 8 题:C |考点:中断与异常分类|难度:中 缺页由当前访存指令引发,属内中断;调页后可修复并重新执行该指令,属故障类。错因提醒:凭"缺页引发磁盘 I/O"误判外中断是最常见丢分点。

第 9 题:A |考点:中断分类综合判定|难度:中 时钟中断与 I/O 完成中断来自 CPU 外部(外中断);除法出错由当前指令引发(内中断)。判定口诀:看来源是否与当前执行指令相关。

第 10 题:A |考点:中断隐指令的分工|难度:中 关中断、保存断点、取中断向量送 PC 由硬件(中断隐指令)完成;保存通用寄存器与执行服务例程由软件完成。错因提醒:B 中的"保存通用寄存器"是服务程序的事,与硬件分工别混淆。

第 11 题:B |考点:中断响应时机|难度:易 中断响应在指令周期末尾进行,一条指令的执行不可被中断打断。错因提醒:选 A/C 者忽略了"指令是最小可中断单位"。

第 12 题:B |考点:系统调用与中断的状态切换|难度:难 第一次:read 的陷入指令使 CPU 进入内核态启动 I/O 后返回用户态并阻塞;第二次:磁盘就绪发出 I/O 完成中断,CPU 再次进入内核态执行中断服务并唤醒进程。错因提醒:漏数 I/O 完成中断(误选 A);或多算不必要次数。

第 13 题:B |考点:大内核与微内核对比|难度:易 微内核只保留最基本功能,服务进程在用户态,通信经内核 IPC(消息传递),可靠可扩展但性能低。错因提醒:微内核性能更差,"微内核性能高"必错。

第 14 题:B |考点:外核结构|难度:中 外核只做资源保护与多路复用,分配策略下放给用户态 libOS。错因提醒:A 恰好把内核与 libOS 的职责说反。

第 15 题:B |考点:PCB 内容|难度:易 PCB 存管理信息与上下文,程序的代码本身在程序段,不在 PCB 中。错因提醒:PSW 副本(处理机上下文)在 PCB 中,不要误选 D。

第 16 题:C |考点:五态转换不可能边|难度:易 就绪进程未占有 CPU,不会发出等待请求;阻塞只能由运行态进入,阻塞唤醒后只能到就绪。错因提醒:"阻塞→运行""就绪→阻塞"都不存在,一并记住。

第 17 题:B |考点:运行→阻塞的主动性|难度:易 请求资源或事件是进程自身的主动行为;被剥夺 CPU(运行→就绪)才是被动的。错因提醒:A 描述的是运行→就绪。

第 18 题:C |考点:挂起态转换|难度:中 静止阻塞等的事件发生后转静止就绪,需被激活后才进入活动就绪(内存)。错因提醒:误选 A/D——挂起状态下进程不在内存,事件发生也不能直接回内存。

第 19 题:B |考点:原语的实现|难度:易 原语靠关中断(特权指令)保证不被打断,运行在内核态。错因提醒:原语是"用关中断实现的原子操作",与信号量机制(解决同步互斥)不是一回事。

第 20 题:C |考点:进程通信方式对比|难度:中 匿名管道基于 fork 后描述符继承,只能用于亲缘进程;无亲缘进程需命名管道。错因提醒:共享内存最快(少内核拷贝)、消息传递可用于分布式,这两条常设为正确项。

第 21 题:B |考点:管道机制|难度:易 写满阻塞写进程、读空阻塞读进程,靠阻塞维持同步。错因提醒:管道缓冲区不会覆盖旧数据。

第 22 题:B |考点:进程与线程的角色分工|难度:易 引入线程后:进程 = 资源分配单位,线程 = 处理机调度单位(标准口径)。错因提醒:A 把两者角色说反。

第 23 题:B |考点:用户级线程特性|难度:中 内核按进程分配 CPU,看不到用户级线程,故一个线程阻塞系统调用即整个进程阻塞,也无法利用多核;线程切换在用户态由线程库完成。错因提醒:A、C、D 都是内核级线程的性质。

第 24 题:B |考点:线程切换开销|难度:易 同进程线程共享地址空间,切换不换页表,只换寄存器与栈,开销远小于进程切换。错因提醒:跨进程的线程切换才需要换地址空间。

第 25 题:B |考点:三级调度职责|难度:易 中级调度负责内存与外存对换区之间的换入(激活)/换出(挂起)。错因提醒:高级调度管"作业接纳进内存",低级调度管"选进程上 CPU"。

第 26 题:C |考点:调度时机|难度:中 处理中断/异常过程中不能调度切换(中断处理不属于进程上下文)。错因提醒:A、B、D 都是正常的调度时机。

第 27 题:A |考点:SJF 甘特图计算|难度:中 非抢占 SJF:0 时刻仅 J1 到达 → J1(0–8);8 时刻就绪 J2(4)、J3(9)、J4(5),选 J2(8–12)→ J4(12–17)→ J3(17–26)。周转:J1=8、J2=11、J4=14、J3=24,平均 = 57/4 = 14.25。错因提醒:0 时刻只有 J1,"到达时间"约束漏看会把 J2 排在最前(算出 13.75 一类的错误项)。

第 28 题:A |考点:HRRN 响应比计算|难度:易 R = (等待+服务)/服务:X=(4+2)/2=3,Y=(3+6)/6=1.5,Z=(5+5)/5=2,选 X。错因提醒:分子是"等待+服务",不是"等待/服务",公式记错必错。

第 29 题:C |考点:时间片轮转特性|难度:易 时间片过小时切换开销剧增,吞吐量反而下降,"越小吞吐量越高"错误。错因提醒:RR 不饥饿、响应好,但吞吐量不占优。

第 30 题:D |考点:多级反馈队列|难度:中 长作业逐级降到最低优先级队列并在该级内轮转,不会永远留在最高级;"永远在最高级被反复调度"错误。错因提醒:新进程入最高级、时间片逐级加倍、高层空才服务低层——三条正确性质常被拆成干扰项。

第 31 题:A |考点:信号量 value 物理意义|难度:中 2−3 = −1 < 0:第三次 P 的进程阻塞;value = −1 表示等待队列有 |−1| = 1 个进程。错因提醒:S<0 时 |S| 才是等待数;S 的值不是"可用资源数"(可用为 0)。

第 32 题:C |考点:死锁四要素辨析|难度:中 四条件是死锁的必要条件:死锁⇒循环等待成立,但循环等待⇒死锁不成立(多实例资源可能不成死锁)。互斥由资源性质决定,一般不可破坏。错因提醒:A 忽略"多实例资源"的反例。

第 33 题:B |考点:银行家算法安全性判定|难度:中 Available = 10−8 = 2;Need 分别为 4、5、6,均大于 2,找不到可满足的进程,无安全序列——不安全(但尚未死锁,只是不能保证推进)。错因提醒:"不安全"≠"已死锁",选 C 越级了。

第 34 题:PV 应用大题解析 |考点:信号量同步建模(睡眠理发师)|难度:难

信号量定义与初值理由:

int waiting = 0;            // 正在等候的顾客数(含理发椅上者之外的等候者计数)
semaphore customers = 0;    // 等候(含正在理发)的顾客数:同步量,初值 0(开店无顾客)
semaphore barbers = 0;      // 可提供服务的理发师:同步量,初值 0(理发师初始睡觉)
semaphore mutex = 1;        // 保护 waiting 计数的互斥量,初值 1

伪代码:

barber() {
    while (true) {
        P(customers);          // 无顾客则睡觉(阻塞在此)
        P(mutex);
        waiting--;             // 一名顾客离开等候队列上理发椅
        V(mutex);
        V(barbers);            // 通知该顾客可以理发
        给顾客理发;
    }
}
customer() {
    P(mutex);
    if (waiting >= 3) {        // 3 张等候椅全满(理发椅上的顾客不计入 waiting)
        V(mutex);
        离开理发店;            // 不等待,直接走
    } else {
        waiting++;
        V(mutex);
        V(customers);          // 唤醒/通知理发师有顾客
        P(barbers);            // 等理发师叫号
        坐上理发椅理发;
    }
}

验证不死锁:

  1. P/V 配对完整:customers 由顾客 V、理发师 P(每客一次);barbers 由理发师 V、顾客 P;mutex 一进一出,三个信号量均严格成对。
  2. P 次序检查:顾客对 customers 的 V 在释放 mutex 之后,理发师对 mutex 的 P 在 P(customers) 之后——不存在"持 mutex 等待 customers、同时顾客持 customers 相关资源等 mutex"的环路。理发师 P(customers) 阻塞时不持有任何信号量(让权等待),顾客满员路径立即 V(mutex) 后离开,不持锁阻塞。
  3. 计数正确性:waiting 只在 mutex 保护下增减,容量约束(最多 3 人等候)由 if 判断保证。
  4. 每个阻塞都有对应的唤醒源:阻塞在 P(customers) 的理发师由下一位顾客 V(customers) 唤醒;阻塞在 P(barbers) 的顾客由理发师 V(barbers) 唤醒——系统总能推进,无死锁。

评分要点(大题按此自查):信号量物理意义说明、初值理由、临界区最小化(waiting 的操作夹紧在 P/V(mutex) 之间)、满员路径的 V(mutex) 不可漏。

第 35 题:银行家算法大题解析 |考点:银行家算法完整推演|难度:难

(1) Need = Max − Allocation;Available = 总量 − Allocation 之和:

进程Need (A,B,C)
P0(4, 2, 2)
P1(2, 2, 1)
P2(4, 1, 2)
P3(2, 3, 2)
P4(3, 2, 3)

Allocation 列和 = (7, 3, 4),故 Available = (9,6,6) − (7,3,4) = (2, 3, 2)。

(2) 安全性检查(Work 初值 = Available,选中进程执行后 Work += 其 Allocation):

步选中判定 Need ≤ Work执行后 Work
1P1(2,2,1) ≤ (2,3,2) ✓(2,3,2)+(2,0,1) = (4,3,3)
2P3(2,3,2) ≤ (4,3,3) ✓(4,3,3)+(1,0,1) = (5,3,4)
3P0(4,2,2) ≤ (5,3,4) ✓(5,3,4)+(1,1,0) = (6,4,4)
4P2(4,1,2) ≤ (6,4,4) ✓(6,4,4)+(2,1,1) = (8,5,5)
5P4(3,2,3) ≤ (8,5,5) ✓(8,5,5)+(1,1,1) = (9,6,6)

全部 Finish = true,当前状态安全,安全序列 P1→P3→P0→P2→P4(不唯一,任给合法序列均可)。

(3) P2 请求 (1,1,1):① (1,1,1) ≤ Need_2 (4,1,2) ✓;② (1,1,1) ≤ Available (2,3,2) ✓;③ 试探分配:Available = (1,2,1),Allocation_2 = (3,2,2),Need_2 = (3,0,1);④ 安全性检查:Work = (1,2,1),各进程 Need:P1(2,2,1)✗(A 不足)、P2(3,0,1)✗、P3(2,3,2)✗、P0(4,2,2)✗、P4(3,2,3)✗——找不到任何可满足的进程,无安全序列。故不能分配,回滚到原状态,P2 等待。

(4) P1 请求 (1,0,1):① (1,0,1) ≤ Need_1 (2,2,1) ✓;② ≤ Available (2,3,2) ✓;③ 试探分配:Available = (1,3,1),Allocation_1 = (3,0,2),Need_1 = (1,2,0);④ 安全性检查:Work = (1,3,1):P1(1,2,0) ✓ → Work = (4,3,3);P3(2,3,2) ✓ → (5,3,4);P0(4,2,2) ✓ → (6,4,4);P2(4,1,2) ✓ → (8,5,5);P4(3,2,3) ✓ → (9,6,6)。安全(序列 P1→P3→P0→P2→P4),可以分配。

错因提醒(大题丢分三连):只比较"请求 ≤ Available"就放行(漏第④步全局安全检查);试探分配后忘记修改 Need;不安全时忘记回滚。另外 (3) 与 (4) 的对比说明:两个请求都"合法且资源够",但分配结果安全性不同——这正是银行家算法存在的意义。