【软考备考】PV 操作与信号量详解:零公式纯逻辑,拆成套路就是送分题(附 10 道练习)

📅 2026/7/17 10:04:27
【软考备考】PV 操作与信号量详解:零公式纯逻辑,拆成套路就是送分题(附 10 道练习)
计算机组成原理通关之后进军操作系统。第一站就是上午题的思维担当PV 操作与信号量。这块每年稳定考 1~2 题而且是上午卷里少有的背公式没用、必须真懂的题型前趋图里该填 P 还是 V、信号量初值设多少、取值范围是多少。很多同学失分的原因是把 P、V 当成了黑话——其实它就是个抢厕所和接力赛的故事讲通了套路比流水线还固定。一、为什么需要 PV并发进程的两个麻烦多个进程并发运行会踩出两类事故麻烦一抢厕所互斥。打印机、共享变量、缓冲区这类临界资源同一时刻只能一个进程用。两个进程同时往打印机吐数据打出来的就是乱码。需要一个机制一次只放一个进程进去。麻烦二接力赛同步。进程间有先后协作A 算出结果B 才能接着干生产者放了货消费者才能取。需要一个机制让 B 在 A 没干完之前乖乖等着A 干完了再叫醒 B。信号量 PV 操作一个机制把两个麻烦全解决了。二、信号量一个整数的管理学信号量 S 就是一个整数表示某种资源的管理状态三种取值三种含义S 0还有 S 个可用资源S 0资源刚好用完但还没人排队S 0资源没了且有 |S| 个进程正在排队等待。比如 S -3翻译过来资源已耗尽3 个进程在排队。这个|S| 等待进程数是软考高频考点。三、P 操作和 V 操作申请与释放对信号量只能做两种操作都是原语执行中不可打断P(S)S S - 1 ← 申请资源 若 S 0本进程进入等待队列阻塞 V(S)S S 1 ← 释放资源 若 S ≤ 0从等待队列唤醒一个进程记忆法P 抢Pass要通行证V 放。每次 P 抢一个资源抢不到减完变负就排队每次 V 归还一个还完发现还有人在排加完仍≤0就喊下一个进来。两个判断时机细品一下逻辑完全自洽P 减完还 ≥ 0说明减之前至少有 1 个资源抢到了直接走减完 0说明本来就空的排队去V 加完 ≤ 0说明加之前 S 是负的——负数意味着有人在排必须唤醒一个。四、两个经典模型往里套就行模型一互斥抢厕所信号量 mutex 1 ← 互斥信号量初值恒为 1一个坑位 每个进程 P(mutex) ← 进厕所前申请 临界区用打印机/改共享变量 V(mutex) ← 出来释放P、V 像括号一样把临界区夹住保证任何时刻临界区里最多一个进程。模型二同步接力赛A 必须先跑完B 才能起跑信号量 S 0 ← 同步信号量初值恒为 0接力棒还没交出来 进程 A干活 → V(S) ← 跑完交棒 进程 BP(S) → 干活 ← 拿到棒才跑前趋图套路真题直接考前趋图里每条有向边设一个信号量初值全为 0。每个进程——开始前对它所有的入边做 P结束后对它所有的出边做 V。口诀入 P 出 V。例P1、P2 都完成后 P3 才能开始。设 S1、S2 初值为 0P1干活 → V(S1) P2干活 → V(S2) P3P(S1) → P(S2) → 干活 ← 两根接力棒都拿到才动五、生产者-消费者三个信号量的分工这是 PV 题的大魔王其实就三个信号量各司其职empty n ← 空缓冲区数量资源信号量初值缓冲区容量 full 0 ← 已有产品数量资源信号量初值0 mutex 1 ← 缓冲区本身的互斥使用互斥信号量 生产者 消费者 P(empty) P(full) ← 先问有位置/有货吗 P(mutex) P(mutex) ← 再问缓冲区腾得出吗 放入产品 取出产品 V(mutex) V(mutex) V(full) V(empty) ← 通告多了一份货/一个空位铁律坑所在两个 P 的顺序必须是资源信号量在前互斥信号量在后。反过来会怎样生产者先抢到 mutex却发现缓冲区满了P(empty) 阻塞——此时 mutex 被它攥在手里消费者进不来取货empty 永远腾不出来双方互相等死锁。六、信号量取值范围一个公式m 个资源初值 m、n 个进程竞争每个进程用完会 V 归还。S 的极端情况最大值 m没人用资源全闲着最小值 m - nn 个进程每个都 P 了一次全都来抢排队排到最惨。S ∈ [m - n, m]例3 个进程互斥使用 1 台打印机m1n3S ∈ [1-3, 1] [-2, 1]。最小值 -2 的含义1 个进程在用2 个在排队。七、10 道练习题基础题1~51.在 PV 操作中P 操作表示 V 操作表示 。A. 申请资源、释放资源 B. 释放资源、申请资源 C. 创建进程、撤销进程 D. 阻塞进程、唤醒进程2.多个进程互斥使用一台打印机互斥信号量的初值应设为 。A. 0 B. -1 C. 1 D. 进程数 n3.某信号量当前值为 -3其含义是 。A. 有 3 个可用资源 B. 有 3 个进程正在执行 C. 系统出错 D. 有 3 个进程在等待4.进程执行 P(S) 操作后若 S 0则该进程 。A. 继续执行 B. 进入等待阻塞状态 C. 被撤销 D. 优先级提高5.要求进程 A 执行完后进程 B 才能开始为此设置的同步信号量 S 的初值应为 。A. 0 B. 1 C. -1 D. 2进阶题6~10带坑6.系统中有 3 个进程并发运行都需互斥使用同一临界资源互斥信号量 S 初值为 1则 S 的取值范围是 。A. [0, 1] B. [-3, 1] C. [-2, 1] D. [-1, 3]7.进程 P1、P2、P3 并发执行要求 P1 和 P2 都完成后 P3 才能开始。设信号量 S1、S2 初值均为 0则 P3 开始前应执行的操作是 。A. V(S1)V(S2) B. P(S1)P(S2) C. P(S1)V(S2) D. V(S1)P(S2)8.生产者-消费者问题中缓冲区容量为 n信号量 empty空缓冲区数、full产品数的初值分别为 。A. 0、n B. n、n C. 0、0 D. n、09.生产者向缓冲区放入产品下列操作顺序正确的是 。A. P(mutex) → P(empty) → 放入产品 → V(mutex) → V(full) B. P(empty) → P(mutex) → 放入产品 → V(mutex) → V(full) C. P(full) → P(mutex) → 放入产品 → V(mutex) → V(empty) D. P(empty) → 放入产品 → V(full) → V(mutex)10.进程执行 V(S) 操作后 S ≤ 0则系统将 。A. 直接结束该进程 B. 使该进程进入等待状态 C. 唤醒一个等待进程 D. 将信号量清零八、答案与详解1. AP 申请抢V 释放放。D 是 P/V 操作可能引发的结果不是操作本身的语义——P 操作不一定阻塞抢到就不阻塞别混。2. C一台打印机就是一个坑位互斥信号量初值 资源数 1。初值为 0 意味着第一个进程 P 完就变 -1谁都进不去——这是同步信号量的设错场景。3. D信号量为负|S| 排队等待的进程数。S -3资源耗尽3 个进程在排队。4. BP 减完 0说明减之前就没资源没抢到进等待队列阻塞。注意 P 操作不是必然阻塞——抢到资源时直接通过。5. A同步信号量初值 0接力棒初始不在任何人手里B 先 P 必然阻塞直到 A 干完 V(S) 交棒。若初值设 1B 的 P 直接通过A 先 B 后的约束形同虚设。6. C套范围公式 [m-n, m] [1-3, 1] [-2, 1]。坑选 B-3的把3 个进程直接当了最小值——别忘了有 1 个进程是抢到资源的排队的最多只有 2 个S 最小 -2。7. B前趋图套路入 P 出 VP3 有两条入边来自 P1、P2开始前对两条入边都做 P——P(S1)P(S2)。P1、P2 结束处分别 V(S1)、V(S2)。选 A 的把等别人和通知别人搞反了P3 是等待方只能 P。8. D开局时缓冲区全空、无货empty nn 个空位full 0零个产品。选 A 的把两个信号量的含义背反了——empty 管还能放几个full 管能取几个。9. B本题是本篇最大的坑。铁律先 P 资源empty后 P 互斥mutex。选 A 的顺序会导致死锁mutex 被占 等 empty消费者进不来腾位互相等死。C 是消费者的逻辑等 fullD 干脆丢了互斥两个生产者同时写缓冲区数据打架。10. CV 加完 ≤ 0说明加之前 S 是负数——有进程在排队唤醒一个。V 操作自己永远不会阻塞B 错它只是归还资源兼叫醒下家。九、五句话带走信号量为负|S| 排队进程数P 抢V 放P 减完 0 才阻塞V 加完 ≤0 才唤醒互斥初值 资源数同步初值 0前趋图每条边一个信号量入 P 出 V生产者-消费者先 P 资源后 P 互斥顺序反了必死锁范围公式[m-n, m]。下一篇预告操作系统第二站——死锁。四个必要条件怎么记、银行家算法那张表到底怎么填、安全序列怎么找死锁题看着唬人其实是一张 Excel 表的体力活。