计算机四级嵌入式之操作系统原理(四)并发与同步

计算机四级嵌入式之操作系统原理(四)并发与同步
(全国计算机等级考试 四级嵌入式系统开发工程师 考点精讲,2026最新视角)

NCRE 四级嵌入式系统开发工程师考试中,操作系统原理部分占分较大(通常 30-40 分左右),而并发与同步是重中之重,几乎每年必考大题(选择 + 填空 + 简答 + PV 操作分析)。
本节对应大纲:进程同步机制死锁概念及解决方案(2025版大纲明确要求“深入理解”)。

1. 核心概念速记表(先背这些)

概念定义 / 含义关键特性 / 目的典型考点 / 易错点
并发宏观上多个程序“同时”运行(交替执行)提高资源利用率并发 ≠ 并行;并发导致共享资源竞争
互斥进程对临界资源一次只允许一个进程访问避免数据不一致临界区互斥原则:空闲让进、有限等待等
同步进程间有依赖关系,必须按特定顺序执行协作完成任务生产者-消费者、读者-写者问题
临界区进程中访问共享资源的代码段必须互斥进入临界区四原则(互斥、进步、有限等待、让权)
临界资源一次只允许一个进程使用的共享资源打印机、共享变量、文件等
信号量整型变量 + PV 原语(原子操作)实现互斥 & 同步互斥:初值1;同步:初值0或资源数
管程高级同步原语(封装 + 条件变量)比信号量更安全、更易用条件变量 wait/signal
死锁一组进程互相等待对方释放资源,形成循环等待四个必要条件同时满足鸵鸟、预防、避免、检测+恢复

2. 进程同步与互斥的实现方式对比(选择题常考)

方式实现难度适用性优点缺点 / 问题考点示例
软件方法仅双进程无需硬件支持复杂、忙等待、可能死锁Dekker、Peterson 算法
硬件方法多进程简单、原子性忙等待(自旋锁)TSL(Test and Set Lock)、Swap
信号量多进程灵活(互斥+同步)易出错(顺序错、初值错 → 死锁)PV 操作、经典问题分析
管程多进程自动互斥、条件变量更安全语言级支持(Java synchronized)条件变量、wait/signal

四原则(互斥进入临界区必须满足)

  1. 互斥:同一时刻只有一个进程在临界区
  2. 进步:有进程想进且临界区空闲 → 一定能进
  3. 有限等待:等待时间有限(防饥饿)
  4. 让权等待(可选):进程不能进入时应让出 CPU

3. 信号量 & PV 操作(重磅!大题必考)

信号量 S:整数变量

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

PV 原语(原子操作,不可中断):

  • P 操作(wait / down):申请资源
    S = S – 1
    若 S ≥ 0,继续执行;
    若 S < 0,进程阻塞,进入等待队列
  • V 操作(signal / up):释放资源
    S = S + 1
    若 S ≤ 0,唤醒等待队列中一个进程

初值设置口诀(面试/大题必背):

  • 互斥:信号量初值 = 1(一把锁)
  • 同步(前驱后继):
  • 后继进程等前驱完成:初值 = 0(V 在前驱,P 在后继)
  • 生产者-消费者:缓冲区满信号量初值 = 0,空信号量初值 = 缓冲大小

经典问题 PV 操作模板(默写这些):

  1. 生产者-消费者(单缓冲 / 多缓冲)
   mutex = 1        // 互斥访问缓冲区
   empty = n        // 空缓冲区数
   full  = 0        // 满缓冲区数

   生产者:
     P(empty)
     P(mutex)
       生产...
     V(mutex)
     V(full)

   消费者:
     P(full)
     P(mutex)
       消费...
     V(mutex)
     V(empty)
  1. 读者-写者(读者优先 / 写者优先) 读者优先(读读并发,写写/读写互斥):
  • readcount = 0
  • rmutex = 1(保护 readcount)
  • wmutex = 1(写互斥) 读者:P(rmutex) → readcount++ → if(readcount==1) P(wmutex) → V(rmutex) … 读完 → P(rmutex) readcount– → if(readcount==0) V(wmutex) V(rmutex)
  1. 哲学家就餐(死锁典型案例)

4. 死锁(必考!)

死锁四个必要条件(缺一不可):

  1. 互斥条件:资源独占
  2. 请求与保持(Hold and Wait):占有资源同时请求其他
  3. 不可抢占:资源只能自愿释放
  4. 循环等待:形成环路

处理策略(选择 + 简答常考):

  • 鸵鸟策略:忽略(Windows 很多资源死锁就这样)
  • 预防:破坏四个条件之一(最彻底,但效率低)
  • 资源静态分配(破坏请求保持)
  • 按序申请(破坏循环等待)
  • 避免银行家算法(安全序列检测)
  • 安全状态:存在一个进程序列,所有进程都能完成
  • 每次分配前模拟检查是否进入不安全状态
  • 检测 + 恢复:资源分配图 + 死锁检测算法 → 剥夺资源 / 终止进程

银行家算法考点

  • 最大需求矩阵 Max
  • 已分配 Allocation
  • 需求 Need = Max – Allocation
  • 可用 Available
  • 找安全序列:每次找一个 Need ≤ Available 的进程,假装它完成,释放资源,继续找…

5. 速成自测题(模拟真题)

  1. 信号量初值为 1,用于实现( )
    A. 互斥 B. 同步 C. 两者都可 D. 两者都不可
  2. 生产者-消费者问题中,缓冲区大小为 10,则 empty 初值应为( )
    A. 0 B. 1 C. 10 D. 11
  3. 死锁预防中,破坏“请求与保持”条件的方法是( )
    A. 资源静态分配 B. 按序申请资源 C. 允许抢占 D. 银行家算法
  4. 下列哪个不是死锁必要条件?( )
    A. 互斥 B. 有限等待 C. 请求与保持 D. 循环等待

答案:1.A 2.C 3.A 4.B

掌握这些,并发与同步 这章基本能拿 80%+ 分。下一节通常是内存管理(分区、分页、段页、虚拟内存),想继续要不要我直接出第五节笔记?或者有具体 PV 操作题 / 银行家算法想手撕 / 模拟题想刷,直接贴上来我帮你分析!

文章已创建 4298

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部