一 真题2010-25
2010-25. 设与某资源关联的信号量初值为 3,当前值为 1。若 M 表示该资源的可用个数,N 表示等待该资源的进程数,则 M、N 分别是( )。
A. 0,1
B. 1,0
C. 1,2
D. 2,0
二 题目要素解析
核心考点 :整型信号量的核心含义,属于操作系统进程同步与互斥模块的基础核心考点,考查信号量值与资源可用数、等待进程数的一一对应关系,是 408 统考选择题的经典常考题型。
考查知识点
- 整型信号量的定义:信号量值与资源可用个数的直接关联关系;
- 信号量的 P/V 操作对信号量值、资源数、等待进程数的影响;
- 判定等待进程数的核心条件:信号量值小于 0时,其绝对值为等待该资源的进程数。
题型特征 :数值对应类选择题,无复杂计算,侧重对信号量基本概念的精准理解,属于基础概念辨析题,易因混淆信号量值与等待进程数的判定条件而出错。
易错点
- 误将信号量当前值与资源可用数割裂开,错误计算资源可用个数;
- 忽略等待进程数仅在信号量值 < 0 时存在的核心条件,盲目根据初值与当前值的差值计算等待进程数。
三 哔哔详解
本题解题核心是牢牢掌握整型信号量的两个核心判定规则,直接通过信号量当前值推导资源可用个数和等待进程数,无需复杂的 P/V 操作反推,一步判定结果。
前置概念铺垫
在操作系统的整型信号量机制中,信号量(S)是用于实现进程同步与互斥的核心变量,与共享资源强关联,其值的含义有严格且唯一的定义(408 必背),是解此类题的关键:
-
信号量的初值 :表示系统中该共享资源的初始总个数,本题中初值为 3,即该资源初始有 3 个;
-
信号量的当前值(S) :直接表示系统中该资源的可用个数(空闲个数);
-
等待进程数的判定规则 :仅当信号量当前值 S < 0 时,其绝对值 | S|*表示*等待该资源的进程数;若 S ≥ 0**,则等待该资源的进程数为0(无进程等待)。
核心逻辑:P 操作(申请资源)会使 S-1,V 操作(释放资源)会使 S+1;仅当申请资源时无可用资源(S-1<0),进程才会阻塞并进入等待队列。
题干条件逐一推导
已知题干中与资源关联的信号量当前值为 1,结合上述核心规则直接推导:
- 推导资源可用个数 M :信号量当前值直接表示资源可用个数,因此 M = 信号量当前值 = 1;
- 推导等待该资源的进程数 N :信号量当前值 1 ≥ 0,根据判定规则,此时无进程等待该资源,因此 N = 0。
选项最终判定
M=1、N=0,对应正确选项为B。
四 参考答案
B ✅
五 考点精析
5.1 整型信号量的定义
整型信号量 是一种由 Dijkstra 提出 的同步机制,其本质是一个整型变量
S,用于表示系统中某类临界资源的可用数量 ,并配合两个原子操作 P(Wait)和 V(Signal) 实现进程互斥与同步。
- 数学表示 :
semaphore S; - 初值设定 :
- 互斥信号量:
S = 1(仅一个进程可进入临界区) - 同步信号量:
S = 0(用于前驱-后继关系) - 资源计数信号量:
S = n(n 个同类资源)
- 互斥信号量:
5.2 性质与特征
| 特性 | 说明 |
|---|---|
| 原子性 | P/V 操作必须是不可分割的原子操作(执行期间不被中断) |
| 非负性(理想) | 理论上 S ≥ 0,但实际实现中可能为负(表示等待进程数) |
| 忙等待(Busy Waiting) | ❗ 最大缺陷:当 S ≤ 0 时,进程在 P 操作中循环测试,持续占用 CPU(不满足"让权等待") |
| 仅支持互斥/简单同步 | 无法高效处理复杂同步场景(如生产者-消费者需多个信号量) |
| 无等待队列 | 不记录等待进程信息,仅靠循环重试 |
💡 关键局限 :
整型信号量因"忙等待"问题,在现代操作系统中已被记录型信号量取代,但仍是理解同步机制的基础
5.3 P/V 操作对信号量状态的影响
1. 对信号量值 S 的影响
| 操作 | 动作 | 公式 |
|---|---|---|
| P(S) | 申请资源 | S = S - 1 |
| V(S) | 释放资源 | S = S + 1 |
✅ 无论资源是否可用,P/V 都会立即修改 S 值(这是原子性的体现)
2. 对可用资源数的影响
| 操作 | 可用资源数变化 |
|---|---|
| P(S) | 若原 S > 0 → 可用资源减 1 若原 S ≤ 0 → 无资源可减(但 S 仍减 1) |
| V(S) | 可用资源加 1(若之前有等待进程,则资源被立即分配,对外表现为"可用数不变") |
📌 注意:
- 可用资源数 =
max(S, 0)(仅当 S ≥ 0 时才有实际可用资源)- 当 S < 0 时,可用资源数 = 0
3. 对等待进程数的影响
| 操作 | 等待进程数变化 |
|---|---|
| P(S) | 若执行后 S < 0 → 等待进程数 = ` |
| V(S) | 若执行前 S ≤ 0 → 理论上应唤醒一个等待进程 (但整型信号量无唤醒机制,依赖其他进程再次尝试 P) |
⚠️ 核心缺陷体现 :
整型信号量没有阻塞/唤醒机制,因此:
- 等待进程数在逻辑上存在(由 S 的负值隐含)
- 但物理上所有进程都在运行态忙等,无真正"阻塞队列"
六 考点跟踪
| 年份 | 题号 | 考查内容 | CSDN 参考链接 | VX参考链接 |
|---|---|---|---|---|
| 2010 | 第25题 | 信号量 | ||
| 2015 | 第45题 | 信号量同步互斥 | ||
| 2017 | 第46题 | 信号量同步互斥 | ||
| 2020 | 第45题 | 信号量同步互斥 | ||
| 2021 | 第45题 | 信号量同步互斥 | ||
| 2022 | 第46题 | 信号量同步互斥 | ||
| 2024 | 第46题 | 信号量同步互斥 |
说明 :本文内容基于公开资料整理,参考了包括但不限于《数据结构》(严蔚敏)、《计算机操作系统》(汤小丹)、《计算机网络》(谢希仁)、《计算机组成原理》(唐朔飞)等国内高校经典教材,以及其他国际权威著作。同时,借鉴了王道、天勤、启航等机构出版的计算机专业考研辅导系列丛书 中的知识体系框架与典型题型分析思路。文中所有观点、例题解析及文字表述均为作者结合自身理解进行的归纳与重述,未直接复制任何出版物原文。内容仅用于学习交流,若有引用不当或疏漏之处,敬请指正。