云计算百科
云计算领域专业知识百科平台

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

前言

计算机四级嵌入式主要考试的内容分为两个大部分:计算机组成与接口和操作系统原理

考点大纲每年不敢保证都一模一样,可以参考官网的考试大纲按需复习,但每年考来考去大差不差的都是那些东西。 官网网址:https://ncre.neea.edu.cn/html1/category/1507/899-1.htm

2025年的考试大纲如下所示:

我会按照该大纲的顺序将整理出来的知识点一章一章整理出来,都放在这个专栏中,希望能够帮助各位准备考试的同学能够顺利通过!

目录

 前言

一、管程

二、PV 操作(P 减 V 加)

三、进程互斥的解决方式

(一)解决思路

(二)临界区相关

(三)硬件实现方法

(四)其他相关算法与机制

四、进程间相互制约关系

五、进程同步机制的准则

六、经典生产者 – 消费者模型

七、消息缓冲通信机制组成

八、加锁与 PV 操作的区别

九、选课系统程序相关题目分析

(一)题目一

(二)题目二

 论文投稿: 2026年第二届人工智能与计算智能国际学术会议(AICI 2026) 大会官网:https://ais.cn/u/FRfIrm 大会时间:2026年2月6-8日 大会地点:中国-郑州-郑东新区城际酒店

一、管程

  • 定义:管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作可同步进程并改变管程中的数据。
  • 访问规则
    • 局部于管程的数据结构,仅能被局部于管程的过程访问,管程之外的过程无法访问。
    • 局部于管程的过程,仅能访问管程内的数据结构。
  • 核心作用:所有进程访问临界资源必须经过管程,管程每次仅允许一个进程进入,实现进程互斥,但管程无法保证自身互斥。
  • 管理对象:共享的数据结构和一组操作过程。
  • 二、PV 操作(P 减 V 加)

  • 基础概念:由 P 操作原语和 V 操作原语组成(原语是不可中断的过程),用于对信号量进行操作。
  • 具体操作
    • P(S)
      • 将信号量 S 的值减 1(S=S-1)。
      • 若 S≥0,该进程继续执行;否则,进程置为等待状态,排入等待队列。
    • V(S)
      • 将信号量 S 的值加 1(S=S+1)。
      • 若 S>0,该进程继续执行;否则,释放队列中第一个等待信号量的进程。
  • 功能范围:可实现进程同步、进程互斥、进程的前趋关系;属于低级通信原语,无法承担进程间大量信息交换(进程共享)的任务。
  • 三、进程互斥的解决方式

    (一)解决思路

  • 竞争各方平等协商。
  • 引入进程管理者,由管理者协调竞争各方对互斥资源的使用。
  • (二)临界区相关

  • 临界区定义:每个进程中访问临界资源的那段代码。
  • 访问规则:每次仅准许一个进程进入临界区访问临界资源,一个进程进入后不允许其他进程进入。
  • 适用资源:无论是硬件临界资源还是软件临界资源,多个进程必须互斥地对其进行访问。
  • 访问流程
    • 进入区:进程访问临界资源前,需调用进入区代码(P 操作)。
    • 临界区:执行访问临界资源的代码。
    • 退出区:执行退出区代码(V 操作)。
  • 注意事项:若进程遗漏 P 原语,将无法保证互斥访问临界区。
  • (三)硬件实现方法

  • 相关指令
    • Test-and-Set(TS)指令
      • 算法逻辑:测试锁变量的值,若为 1,则重复测试;若为 0,立即将锁变量置为 1,进入临界区。
      • 核心特性:是一条完整的指令,执行过程不可中断,保证锁的测试和关闭的连续性。
      • 退出操作:退出临界区时,将锁变量置为 0。
    • Swap 或 Exchange 指令:寄存器和存储内容交换的指令,可用于信号量操作,实现系统任务之间的同步或互斥。
  • 优点
    • 使用范围广:适用于任意数目的进程,单处理器和多处理器环境中完全相同。
    • 简单:标志设置简单、含义明确,易验证正确性。
    • 支持多个临界区:一个进程内有多个临界区时,只需为每个临界区设立一个布尔变量。
  • 缺点
    • 进程等待进入临界区时,耗费处理机时间,无法实现 “让权等待”。
    • 进入临界区的进程从等待进程中随机选择,可能导致部分进程 “饥饿”。
  • (四)其他相关算法与机制

  • Peterson 算法:实现互斥锁的并发程序设计算法。
  • 信号量机制:实现进程互斥的重要方法。
  • 排除项:分派器(Dispatcher)是实时系统调度策略之一,非进程互斥方法。
  • 四、进程间相互制约关系

    相互感知程度交互关系一个进程对其他进程的影响潜在的控制问题
    相互不感知(完全了解其他进程的存在) 竞争关系 一个进程的操作对其他进程的结果无影响 互斥、死锁(可释放资源)、饥饿
    间接感知(双方都与第三方交互,如共享资源) 通过共享进行协作 一个进程的结果依赖于从其他进程获得的信息 互斥、死锁(可释放的资源)、饥饿、数据一致性
    直接感知(双方直接交互,如通信) 通过通信进行协作 一个进程的结果依赖于从其他进程获得的信息 死锁、饥饿

    五、进程同步机制的准则

  • 空闲则入
  • 忙则等待
  • 有限等待
  • 让权等待
  • 六、经典生产者 – 消费者模型

  • 生产者之间:对缓冲区和临界资源存在竞争,为互斥关系。
  • 消费者之间:对缓冲区和临界资源存在竞争,为互斥关系。
  • 生产者与消费者之间
    • 同步关系:生产与消费过程中可能出现供大于求(暂缓生产,努力消费)或供不应求(努力生产,暂缓消费)的现象。
    • 互斥关系:环形缓冲池为临界资源,生产者和消费者均需使用。
  • 七、消息缓冲通信机制组成

  • 消息缓冲区
  • 消息队列首地址
  • 同步互斥信号量
  • 发送接收消息原语
  • 八、加锁与 PV 操作的区别

  • 操作本质与粒度
    • 加锁(如 TS 指令、Peterson 算法的锁机制):专门用于实现进程互斥的机制,核心是控制临界区的独占访问,操作对象多为锁变量(布尔变量等),粒度单一,仅聚焦 “禁止并发进入临界区”。
    • PV 操作:基于信号量的通用同步原语,不仅能实现互斥(控制临界资源访问),还可实现进程同步、前趋关系等,操作对象是信号量(整数变量),粒度更灵活,支持复杂的进程间协作逻辑。
  • 功能覆盖范围
    • 加锁:仅针对临界资源的互斥访问设计,无其他扩展功能,无法处理进程间 “等待 – 唤醒” 的同步需求(如生产者 – 消费者的供需协调)。
    • PV 操作:除互斥外,可通过信号量的计数特性实现同步(如用信号量记录缓冲区空位数、产品数),还能表达进程的前趋依赖关系,功能覆盖更全面。
  • 实现方式与灵活性
    • 加锁(硬件级如 TS 指令):多为硬件指令或简单软件算法实现,逻辑直接,仅需对锁变量进行 “测试 – 设置” 或 “交换” 操作,适用于简单互斥场景。
    • PV 操作:是操作系统提供的原语级接口,依赖信号量的数值变化控制进程状态(继续执行 / 阻塞),可通过调整信号量初始值和 PV 操作的位置,适配不同的并发场景(如多个生产者 – 消费者、多临界资源竞争),灵活性更高。
  • 对 “让权等待” 的支持
    • 加锁(硬件方法):进程等待进入临界区时会循环测试锁变量(如 TS 指令的 while 循环),耗费处理机时间,无法实现 “让权等待”。
    • PV 操作:当 P 操作导致信号量 S<0 时,进程会主动置为等待状态并排入队列,释放处理机资源,支持 “让权等待”,更符合进程同步机制的准则。
  • 通信能力
    • 加锁:无任何进程间通信功能,仅解决 “互斥访问” 问题,不涉及进程间信息交换。
    • PV 操作:虽属于低级通信原语,无法承担大量信息交换,但可通过信号量的状态变化间接传递简单状态信息(如 “资源可用”“任务完成”),具备微弱的通信雏形。
  • 九、选课系统程序相关题目分析

    (一)题目一

  • 程序代码
  • PROCESS P(.)//学生学号为i,课程号为j
    //局部变量
    {int r;
    r=search();//找到课程j并返回课程学生余量
    if(r>=1)
    {identify(i);//确认学生选课成功,记录
    r=r-1;
    modify(r,j);//将课程j的课余量修改为r
    print("恭喜您选课成功!");
    }
    else print("对不起,没有该课程或选课已满。");
    }

  • 选项:
    • A. 选课学生没选满系统就可能发生死锁
    • B. 选课学生能够正常选课,选课学生数与初设相符
    • C. 选课学生数可能会超出课程容量
    • D. 选课学生选不了课,系统会报错
  • 结论:选课学生数可能会超出课程容量(选项 C)。
  • (二)题目二

  • 程序代码
  • Semaphores mutex;//定义信号量
    PROCESS P(i,j)//学生学号为i,课程号为j
    //局部变量
    {int r;
    P(mutex);//加锁
    r=search();//找到课程j并返回课程学生余量
    if(r>=1)
    {identify(i,j);//确认学生选j课成功,记录
    r=r-1;
    modify(r,j);//将课程j的课余量修改为r
    print("恭喜您选课成功!");
    }
    else print("对不起,没有该课程或选课已满。");
    V(mutex);//解锁
    }

  • 选项:
    • A. 选课学生数可能会超出课程容量
    • B. 选课学生能够正常选课,选课学生数与初设相符
    • C. 选课学生没选满系统就可能发生死锁
    • D. 选课学生选不了课,系统会报错
  • 结论:选课学生能够正常选课,选课学生数与初设相符(选项 B)。
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » 计算机四级嵌入式之操作系统原理(四)并发与同步
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!