Skip to content

进程组成与 PCB 组织方式

🎯 一句话结论:进程由 PCB + 程序 + 数据 三部分组成,是系统资源分配和调度的基本单位

进程组成:PCB(进程控制块,唯一标识)、程序(描述做什么)、数据(执行所需数据)。

PCB 组织方式

方式说明
链接方式PCB 通过链表链接,同一状态的 PCB 链接成一个队列
索引方式同状态的 PCB 集中记录在索引表中,通过索引表查找
顺序方式PCB 按顺序连续存放(不适用于动态变化)

⚠️ 三种方式中索引方式最常见:为每种进程状态建立索引表,PCB 记录在索引表中。

三态模型

三态模型(必须熟练掌握转换):

运行 → 就绪(时间片到)
运行 → 阻塞(等待某事件)
阻塞 → 就绪(等待的事件发生)
就绪 → 运行(被调度)

进程三态图

  • 三态模型包括:就绪、运行、阻塞。

  • 五态模型有两种版本,考场上以题目选项为准:

    版本包含状态来源
    软考版三态 + 挂起 + 终止软考部分真题采用此说法
    标准教材版三态 + 新建(New) + 终止(Exit)王道/汤小丹等教材,对应七态再加挂起

    ⚠️ 考场策略:如果选项同时出现"新建"和"挂起",选含"新建"的为五态;如果只有"挂起"没有"新建",则五态选"挂起"。新建态在实际 OS 中确实存在,但软考部分题目将其归为创建过程而非独立状态。

  • 进程基本状态不包括挂起态(挂起态是七态模型中的扩展状态)。

  • 七态模型 = 五态(标准教材版) + 就绪挂起 + 阻塞挂起

    新建 → 就绪 ↔ 运行 → 终止
              ↕        ↕
           就绪挂起  阻塞挂起 ← 阻塞

    挂起(Suspend)指进程被从内存换出到外存,释放内存空间。就绪挂起(就绪但换出)、阻塞挂起(阻塞且换出),当事件发生或被激活时回到就绪态。

前趋图

详见:架构师-备考 综合知识-系统基础-操作系统-前趋图与资源图

进程同步与互斥

  • 临界资源:各进程间需要以互斥方式对其进行访问的资源
  • 临界区:进程中对临界资源实施操作的那段程序
  • 互斥:同一时间只能由一个任务单独使用临界资源,使用时加锁(如多进程共享打印机)
  • 同步:多个任务可并发执行,有速度差异,需要等待协调。目标是确保进程间正确协作。

信号量与 PV 操作

🎯 一句话结论:互斥信号量初值 = 1;同步信号量初值 = 共享资源数量。P 减一申请,V 加一释放。

信号量

  • 互斥信号量:对临界资源互斥访问,初值为 1
  • 同步信号量:对共享资源的访问控制,初值一般是共享资源的数量

P/V 操作

  • P 操作(申请资源):S = S - 1,若 S ≥ 0 则继续执行;若 S < 0 则阻塞,插入阻塞队列
  • V 操作(释放资源):S = S + 1,若 S > 0 则继续执行;若 S ≤ 0 则从阻塞队列唤醒一个进程

信号量值含义与前趋图 PV 规则

前驱图 PV 规则,是同步信号量下的行为。

🎯 一句话结论:S < 0 时,|S| = 等待进程数。前趋图中信号量数 = 有向边数,初值全 0。

信号量值含义

  • S ≥ 0:信号量的值表示可用的资源数
  • S < 0:信号量的绝对值 = 等待该资源的进程数
  • 例:S 初值为 3,当前值为 -1 → 有 1 个进程在等待

前趋图 PV 操作规则

  • 信号量数量 = 前趋图中的有向边数量
  • 所有信号量初值均为 0
  • 前驱进程完成后执行 V 操作(发出信号)
  • 后继进程开始前执行 P 操作(等待信号)

💡 核心理解:信号量 = 一条私有消息通道

关键洞察:每个信号量本质上就是一个独立的消息通道(定向通知),每条有向边配备一个专属信号量,仅供该边对应的后继进程消费。

为什么互斥信号量只需要一个?

互斥信号量保护的是共享资源,不管谁来用,大家争同一个锁

    你 ──→ [打印机] ←── 室友
          锁 (S=1)

所有人对同一个信号量做 P/V,因为争的是同一把锁。一个锁就够了。

为什么同步信号量需要 = 有向边数?

同步信号量传递的是定向通知 — 前驱要明确告诉"某个特定的后继"可以开始了。每条边是一个独立的依赖关系,每个依赖需要一个专属的信号量:

            ┌─ S12 ──→ P2
    P1 ────┤
            └─ S13 ──→ P3

如果 P1→P2 和 P1→P3 共用同一个信号量 S:

  • P1 做完 V(S) 一次,S=1
  • P2 和 P3 谁先跑 P(S) 谁抢到,不能保证发给正确的人
  • ⚠️ V 操作不知道要唤醒谁,它只是唤醒一个排队的人

用两个信号量 S12 和 S13,各管各的通道:

  • P1 V(S12) → 只通知 P2
  • P1 V(S13) → 只通知 P3
  • P2 只能 P(S12),P3 只能 P(S13),各收各的信号,永不串线

一句话总结

互斥信号量同步信号量
模型一把锁,大家争多条通道,各收各的信
数量1(保护一个资源)= 有向边数(每条边一个通道)
初值1(没人锁)0(信号还没发出)
操作者同进程内 P→V前驱 V,后继 P,跨两个进程

生产者-消费者问题

🎯 一句话结论:三个信号量 — 互斥 S0 + 同步 S1(空闲位)+ 同步 S2(商品数)。

生产者-消费者问题:三个信号量 — 互斥信号量 S0(仓库使用权,初值 1),同步信号量 S1(空闲位置数),同步信号量 S2(商品个数)。

  • ⚠️ 不能同时操作缓冲区(即不要求同时操作),但一次只有一个进程操作缓冲区
  • ⚠️ 不能向满缓冲区存产品,不能从空缓冲区取产品

进程调度

三级调度

  • 高级调度(作业调度):决定哪个后备作业调入系统,成为就绪进程。⚠️ 不存在于分时和实时操作系统
  • 中级调度(对换调度):决定交换区中哪个就绪进程调入内存
  • 低级调度(进程调度):决定内存中哪个就绪进程占用 CPU,最活跃、影响最大。⚠️ 不涉及进程在内存与外存之间交换

调度算法

算法特点
先来先服务 FCFS先到达先分配 CPU,用于宏观调度
时间片轮转每个进程分配相同时间片轮流使用 CPU,用于微观调度
优先级调度优先级大的先分配 CPU
多级反馈调度时间片轮转 + 优先级结合,多级队列不同优先级和时间片

调度方式:可剥夺(高优先级进程可强行抢占 CPU)vs 不可剥夺(必须等当前进程自动释放 CPU)。

死锁

🎯 一句话结论:死锁四条件 — 互斥、占有等待、不可剥夺、环路等待。最小资源数 = n × (R-1) + 1。

四个必要条件:资源互斥、占有并等待、不可剥夺、环路等待。⚠️ "资源共享"不是死锁必要条件。

处理策略

  • 死锁预防:破坏四个条件之一
  • 死锁避免:银行家算法,提前计算安全序列,不安全则不分配
  • 死锁检测:定时运行检测程序
  • 死锁解除:强制剥夺资源、撤销进程

死锁资源计算:n 个进程各需 R 个资源,发生死锁的最大资源数 = n × (R-1),不发生死锁的最小资源数 = n × (R-1) + 1。

练习题

某系统中有3个并发进程竞争资源R。假设每个进程都需要5个R,那么最少需要有(。)个R,才能保证系统不会发生死锁。

  • A.10
  • B.11
  • C.12
  • D.13
📝答案与解析

  • 至少需要资源数=并发进程数×(每个进程所需资源数-1)+1=3×(5-1)+1=13。本题选D。

线程 vs 进程

🎯 一句话结论:线程是调度基本单位,进程是资源分配基本单位。同进程线程共享资源,切换开销小。

引入线程原因:进程创建、撤销和切换时空开销大,限制了并发程度。

进程线程
资源独立分配资源的单位基本不拥有资源(仅 PC、寄存器、栈)
调度传统上可独立调度调度和分配的基本单位
共享进程间资源独立同进程线程共享进程全部资源
开销创建/切换开销大创建/切换开销小

练习题

[Q10] 进程状态/PCB

某计算机系统中的进程管理采用三态模型,那么下图所示的PCB(进程控制块)的组织方式采用(),图中( )。

image.png

  • A. 顺序方式
  • B. 链接方式
  • C. 索引方式
  • D. Hash
📝答案与解析

答案:C

解析:索引方式为每种进程状态建立索引表,PCB记录在索引表中。


[Q55] 进程状态转换

下列选项中会导致进程从阻塞态变为就绪态的是( )。

  • A. 进程等待的用户输入到达
  • B. 进程关闭文件句柄
  • C. 进程的时间片用完
  • D. 进程执行了exit()系统调用
📝答案与解析

答案:A

解析:阻塞→就绪:等待的事件发生(如I/O完成、用户输入到达)。


[Q73] 进程状态模型

在操作系统中,进程状态模型包括三态模型和五态模型。关于这两种模型,以下说法正确的是( )。

  • A. 三态模型包括就绪、运行和阻塞三种状态
  • B. 五态模型比三态模型多了挂起和终止两种状态
  • C. 三态模型适用于所有类型的操作系统,而五态模型仅适用于分时系统
  • D. 五态模型中不存在就绪状态
📝答案与解析

答案:A

解析:三态=就绪+运行+阻塞;五态多了挂起和终止。A和B都正确,A更基础。


[Q74] 进程基本状态

在操作系统中,进程的基本状态不包括以下哪一种( )。

  • A. 运行态
  • B. 就绪态
  • C. 阻塞态
  • D. 挂起态
📝答案与解析

答案:D

解析:挂起态是五态模型中的扩展状态,不属于基本三态。


[Q102] 进程组成

(本题)是系统进行资源分配和调度的基本单位,通过其物理实体被操作系统所感知,物理实体分为( )三部分。

  • A. 进程
  • B. 线程
  • C. 纤程
  • D. 管程
📝答案与解析

答案:A

解析:进程是资源分配和调度的基本单位。


[Q103] 进程组成

( )是系统进行资源分配和调度的基本单位,通过其物理实体被操作系统所感知,物理实体分为(本题)三部分。

  • A. 代码、文档和配置
  • B. 程序、数据集合和控制块
  • C. 进程栈、系统资源和时间片
  • D. 线程组、信号量和资源池
📝答案与解析

答案:B

解析:进程物理实体 = 程序 + 数据 + PCB(控制块)。


[Q104] 互斥

有多个进程需要同时访问一台打印机,这时迫切需要解决( )问题。

  • A. 同步
  • B. 互斥
  • C. 通信
  • D. 性能
📝答案与解析

答案:B

解析:打印机是临界资源,一次只能一个进程使用 → 互斥问题。


[Q46] PV操作

在PV操作中,P操作的主要作用是( )。

  • A. 释放资源并唤醒等待进程
  • B. 申请资源,若不足则阻塞进程
  • C. 检查资源是否可用
  • D. 增加信号量的值
📝答案与解析

答案:B

解析:P=申请(减1),不足则阻塞;V=释放(加1),有等待者则唤醒。


[Q70] 互斥信号量

在使用信号量实现进程互斥时,以下哪个描述是正确的( )。

  • A. 互斥信号量的初始值应设置为0
  • B. P操作会增加信号量的值
  • C. V操作在进入临界区之前执行
  • D. 互斥信号量的初始值通常设置为1
📝答案与解析

答案:D

解析:互斥信号量初值=1(资源可用),P在进入临界区前,V在退出后。


[Q71] P操作过程

关于P操作(申请资源)的执行过程,以下描述正确的是( )。

  • A. 将信号量S的值加1,然后判断S是否大于0
  • B. 将信号量S的值减1,如果S小于0则进程继续执行
  • C. 将信号量S的值减1,如果S大于等于0则进程继续执行
  • D. 将信号量S的值减1,不进行任何判断直接继续执行
📝答案与解析

答案:C

解析:P操作:S=S-1,若S≥0继续;若S<0阻塞。


[Q54] 信号量值含义

若信号量S的初始值为3,当前值为-1,则表示( )个进程正在等待该资源。

  • A. 0
  • B. 1
  • C. 2
  • D. 3
📝答案与解析

答案:B

解析:S<0时,|S|=等待进程数。|-1|=1个进程在等待。

这道题考的是 信号量值的含义,规则很简单:

信号量 S 的含义:

  • S ≥ 0 → S 表示可用资源数
  • S < 0 → |S| 表示等待该资源的进程数

逐步推演:

步骤S 值变化说明
初始S = 33 个资源可用
进程 A 执行 P 操作S = 2占用 1 个,剩 2 个可用
进程 B 执行 P 操作S = 1占用 2 个,剩 1 个可用
进程 C 执行 P 操作S = 0占用 3 个,资源刚好用完
进程 D 执行 P 操作S = -1资源已用完,D 进入等待队列

当 S = -1:

  • 绝对值 |-1| = 1 → 有 1 个进程在等待(进程 D)
  • 同时意味着 3 个资源全被占用

所以选 B(1 个进程等待)


[Q66] 前趋图PV规则

在使用信号量实现前驱关系时,以下哪个步骤是正确的( )。

  • A. 设置的信号量数量等于进程数
  • B. 所有信号量的初始值设为1
  • C. 进程执行前进行V操作,执行后进行P操作
  • D. 信号量数量等于有向边数量,初始值为0
📝答案与解析

答案:D

解析:信号量数=有向边数,初值全0,前驱执行后V,后继执行前P。


[Q68] 生产者-消费者

在生产者-消费者问题中,以下哪个选项不属于其基本规则或约束( )。

  • A. 不能向满缓冲区存产品
  • B. 不能向空缓冲区取产品
  • C. 每个时刻仅允许1个生产者或消费者存或取1个产品
  • D. 生产者和消费者必须同时操作缓冲区
📝答案与解析

答案:D

解析:不要求同时操作,但一次只有一个进程操作缓冲区。


[Q69] 同步目的

在操作系统中,同步问题的主要目的是( )。

  • A. 提高系统的运行速度
  • B. 确保进程间的正确协作
  • C. 减少内存占用
  • D. 增加系统的并发度
📝答案与解析

答案:B

解析:同步=协调速度差异,确保进程间正确协作。


[Q97] 并发性

在单CPU环境下,操作系统的并发性是指( )。

  • A. 多个程序在同一时刻同时执行
  • B. 宏观上多个程序同时运行,微观上时间片轮转执行
  • C. 多个程序必须按照严格的顺序依次执行
  • D. 同一时刻可以执行多个特权指令
📝答案与解析

答案:B

解析:单CPU并发=宏观并行、微观串行(时间片轮转)。


[Q64] 死锁条件

在操作系统中,以下哪个条件不是产生死锁的必要条件( )。

  • A. 资源共享
  • B. 保持和等待
  • C. 不可剥夺
  • D. 环路等待
📝答案与解析

答案:A

解析:死锁四条件:互斥、占有等待、不可剥夺、环路等待。"资源共享"不是。

死锁四个必要条件

条件含义
互斥资源一次只能给一个进程用
保持和等待进程占着资源不放,还等别的资源
不可剥夺资源不能被强行抢走
环路等待进程间形成循环等待链
选 A 的原因

A. 资源共享 ❌ — 不是必要条件

  • 死锁需要的是互斥(资源不能共享),而不是共享
  • 如果一个资源可以共享(比如只读文件),多个进程同时用不会死锁
  • 所以「资源共享」恰恰是避免死锁的方向,不是产生死锁的条件

[Q65] 死锁互斥

在操作系统中,关于死锁产生的必要条件之一"互斥",以下描述最准确的是( )。

  • A. 互斥指多个进程可以同时访问临界资源
  • B. 互斥指临界资源在一段时间内只能被一个进程占用,其他进程需等待
  • C. 互斥指进程间不能共享任何资源
  • D. 互斥指进程可以随时释放已占用的资源
📝答案与解析

答案:B

解析:互斥=临界资源独占,一段时间内只能一个进程使用。


[Q47] 死锁资源计算

若系统中有5个进程共享同类资源,每个进程最多需要3个资源,则系统最少需提供( )个资源才能避免死锁。

  • A. 10
  • B. 11
  • C. 12
  • D. 15
📝答案与解析

答案:B

解析:最小不锁资源 = n×(R-1)+1 = 5×(3-1)+1 = 11。


[Q9] 并发+死锁

若一个单处理器的计算机系统中同时存在3个并发进程,则同一时刻允许占用处理器的进程数( );如果这3个进程都要求使用2个互斥资源R,那么系统不产生死锁的最少的R资源数为( )个。

  • A. 至少为1个
  • B. 至少为3个
  • C. 最多为1个
  • D. 最多为3个
📝答案与解析

答案:C(最多1个)

解析:单处理器同一时刻最多1个进程占用CPU。死锁最小资源=3×(2-1)+1=4,选项未给出第二问。


[Q72] 调度

在操作系统中,哪种调度不涉及进程在内存和外存之间的交换( )。

  • A. 高级调度
  • B. 中级调度
  • C. 低级调度
  • D. 实时调度
📝答案与解析

答案:C

解析:低级调度=CPU分配,不涉及内存-外存交换;中级调度才涉及。

这道题选 C(低级调度) ✅。实时调度 不是三级调度中的概念,是两个不同的维度。


三级调度回顾

调度级别别名做什么是否涉及内外存交换
高级调度作业调度决定哪个后备作业调入内存成为就绪进程✅ 是
中级调度对换调度决定交换区中哪个进程换入内存✅ 是
低级调度进程调度决定内存中哪个就绪进程拿到 CPU❌ 

低级调度只看谁上 CPU,进程已经在内存里了,不涉及搬进搬出。所以选 C。


实时调度是调度算法/策略的分类,而不是一个独立的调度级别。

三级调度是按发生的位置和时机分的(作业层→交换层→CPU 层),而实时调度是按调度目标分的:

调度策略分类:  
├── 先来先服务(FCFS)  
├── 时间片轮转(RR)  
├── 优先级调度  
├── 多级反馈队列  
└── 实时调度(保证任务在截止时间前完成)  
        ├── 速率单调调度(RMS)— 静态优先级  
        └── 最早截止时间优先(EDF)— 动态优先级

实时调度关注的是能不能按时完成,它在三级调度中属于低级调度这个层面 — 决定当前哪个进程上 CPU,只是选谁的标准变了(看截止时间而非优先级/时间片)。


高级/中级/低级 = 在哪个阶段做调度 实时调度 = 用什么标准来做调度(按时完成优先)

所以题目中的 D 选项其实是一个分类错误 — 它和 A/B/C 不在同一个维度上。但标准答案还是 C(低级调度),因为它是唯一明确不涉及内外存交换的


[Q76] 调度

在操作系统中,哪种调度不存在于分时和实时操作系统中( )。

  • A. 高级调度
  • B. 中级调度
  • C. 低级调度
  • D. 进程调度
📝答案与解析

答案:A

解析:高级调度(作业调度)在分时/实时OS中不存在,因为作业直接进入内存。


经典题目 — PV 互斥信号量典型应用(多进程共享变量+分支中易漏 V(S))

[Q1] PV互斥信号量

某航空公司机票销售系统有n个售票点,该系统为每个售票点创建一个进程Pi(i=1,2,…,n)管理机票销售。假设Tj(j=1,2,…,m)单元存放某日某航班的机票剩余票数,Temp为Pi 进程的临时工作单元,x 为某用户的订票张数。

初始化时系统应将信号量S赋值为(请作答此空)。Pi进程的工作流程如下图所示,若用P操作和V操作实现进程间的同步与互斥,则图中空(a)、空(b)和空(c)处应分别填入(2)。

image.png

  • A. 0
  • B. 1
  • C. 2
  • D. 3
📝答案与解析

答案:B

解析:多个进程互斥访问共享变量Tj→互斥信号量初值=1。进入临界区前P(S),退出后V(S)。

第二问:

根据典型售票流程,逻辑是:

开始  

读用户订票数 x  

 (a)  ______     ← 申请锁  

读剩余票数 Tj  

 ┌─ x ≤ Tj ? ──→ 否 ──→ (c) ______ ──→ 结束(票不够)  
 ↓ 是  
 Tj = Tj - x  

写回 Tj  

 (b)  ______     ← 释放锁  

输出机票  

结束

答案模式:

空位操作理由
(a)P(S)进入临界区前申请锁,防止多个进程同时操作 Tj
(b)V(S)正常修改完 Tj 后释放锁
(c)V(S)票不够时也要释放锁!否则其他售票点再也无法卖票(死锁)

所以如果选项是:

  • A. P(S)、V(S)、P(S)
  • B. V(S)、P(S)、V(S)
  • C. P(S)、V(S)、V(S)
  • D. V(S)、V(S)、P(S)

选 C ✅ — (a)=P(S), (b)=V(S), (c)=V(S)

⚠️ (c) 容易漏:很多人在票不够的分支直接结束,忘了 V(S) 释放锁,导致整个系统死锁。


[Q75] 进程状态模型

在操作系统中,关于进程状态模型的描述,以下哪项是正确的( )。

  • A. 进程状态模型只包括三态模型
  • B. 进程状态模型只包括五态模型
  • C. 进程状态模型包括三态模型和五态模型
  • D. 进程状态模型不包括三态模型和五态模型
📝答案与解析

答案:C

解析:进程状态模型包含三态(就绪/运行/阻塞)和五态(+挂起/终止)两种模型。