当前位置: 首页 > news >正文

【OS笔记07】:进程和线程5-进程的同步与互斥

文章目录

    • 3.5 进程的同步与互斥
      • 一、基本概念
        • 1. 进程的同步与互斥
        • 2. 临界资源和临界区
        • 3. 进入临界区的准则
      • 二、进程同步与互斥的异同
      • 三、实现互斥的方法
        • 1. 用锁操作原语实现互斥
        • 2. 信号量上的P、V操作原语
          • 1. 信号量 (Semaphore)
          • 2. P、V操作的定义
          • 3. P(S) 操作
          • 4. V(S) 操作

3.5 进程的同步与互斥

一、基本概念

1. 进程的同步与互斥
  • 并发关系:在并发系统中,各个进程由于共享资源、进程协作,会产生相互制约或依赖的关系。这种关系表现为:相互协作的同时,竞争着有限的资源。
  • 两种制约关系
    • 同步 (Synchronization):进程间为了完成一个共同的目标,彼此存在相互合作的协同工作关系、有先后次序的直接制约关系。
    • 互斥 (Mutual Exclusion):多个进程因不能同时访问临界资源而产生的间接制约关系。
  • 重要性:在多道系统中,进程能否正确执行不仅取决于自身的正确性,能否与其他进程实现正确的同步和互斥也十分重要。
2. 临界资源和临界区
  • 临界资源:一次只允许一个进程使用的资源。例如:打印机、共享变量等。若多个进程共享一个临界资源,则必须以互斥的方式使用。
    • 例子:公用变量v,进程A要向v中写入数据,进程B要从v中读取数据,则v是A,B的临界资源,要交替使用。
  • 临界区:访问临界资源的程序区域称为临界区。
3. 进入临界区的准则
  1. 忙则等待:每次至多有一个进程处于临界区。
  2. 空闲则入:当有若干个进程欲进入临界区时,应在有限的时间内使其进入。
  3. 有限等待:进程在临界区内仅逗留有限的时间。

二、进程同步与互斥的异同

  • 相同点:两者都是并发进程在执行的时间顺序上,相互制约的表现。
  • 不同点
    1. 顺序:互斥的进程不规定进入临界区的先后顺序;同步的进程必须按照严格的先后次序执行。
    2. 感知:互斥的进程一般不知道对方存在;同步进程不仅知道对方存在,还需要与之通信。

例子:进程的同步

  • 场景:计算进程和打印进程共享一个单缓冲区域,以完成计算和打印输出。
  • 流程
    1. 当计算进程完成计算,向缓冲区输出结果后;
    2. 计算进程向打印进程发送信号;
    3. 打印进程立即工作并打印结果;
    4. 打印进程取走结果后,向计算进程发出信号;
    5. 计算进程又可以把后续的计算结果写入缓冲区。

三、实现互斥的方法

1. 用锁操作原语实现互斥

为每类临界资源设置一个“锁”,即定义一个变量W:

  • w = 1:表示锁打开。

  • w = 0:表示锁关闭。

  • 关锁原语 lock(w)

    while (w == 0);
    w = 0;
    

    作用:当W=0时,反复测试w的值,只有当W=1时,才执行后面的程序段。

  • 开锁原语 unlock(w)

    w = 1;
    
  • 思考:这种方法能否解决同步问题?

    • 答案是不能。
  • 锁机制的缺点

    1. 浪费CPU时间:在关锁原语中,会反复测试W的状态,浪费了处理机时间(忙等)。
    2. 功能局限:锁机制只能解决互斥问题,不能解决同步问题。
2. 信号量上的P、V操作原语
1. 信号量 (Semaphore)

信号量是一个由两个元素组成的结构型变量:

  • 整型变量:表示该信号量的值。
  • 信号量等待队列指针:指向该信号量等待队列中进程的PCB(进程控制块)。

整型变量的取值含义
设信号量整型变量为S:

  • S > 0,表示可用资源的实体个数。
  • S < 0,其绝对值表示等待该资源的进程个数。

在这里插入图片描述

图片说明:图中展示了一个信号量,其值为-3,表示有3个进程正在等待该资源。指针指向这三个进程的PCB,形成一个等待队列。信号量的指针项可初始化为0,表示队列为空。

2. P、V操作的定义

P,V原语用于改变信号量的值,以达到系统资源的安全访问的目的。

  • P(S):表示有进程请求资源。
  • V(S):表示有进程释放资源。
  • 原子性:P,V操作必须是“原语”,在单CPU系统中,通常在封锁中断的条件下执行P,V操作,确保其不可分割。
3. P(S) 操作

顺序执行下述两个动作:

  1. 信号量的值减1,即 S = S - 1
  2. 如果 S >= 0,则该进程继续执行;
    如果 S < 0,则:
    • 把该进程状态置为阻塞态。
    • 将其PCB连入该信号量队列的末尾,进行等待。

在这里插入图片描述

图片说明:流程图展示了P操作的逻辑。入口后,s.value减1。然后判断s.value是否大于等于0,如果是,则继续执行;如果小于0,则调度进程进入等待队列,并转进程调度。

4. V(S) 操作

顺序执行下述两个动作:

  1. S值加1,即 S = S + 1
  2. 如果 S > 0,则该进程继续运行;
    如果 S <= 0,则唤醒信号量队列上的第一个PCB,然后该进程继续运行。
    (注意:S<=0 时表示的是 block 的进程个数,而不是资源个数)

在这里插入图片描述

图片说明:流程图展示了V操作的逻辑。入口后,s.value加1。然后判断s.value是否小于等于0,如果否,则继续执行;如果是,则唤醒等待队列中的一个进程,然后返回或转进程调度。

http://www.dtcms.com/a/494351.html

相关文章:

  • 基于Session和Redis实现短信验证码登录
  • 视觉Slam14讲笔记第6讲非线性优化
  • 仓库管理系统:定义、需求和​​类型
  • 项目管理进阶——解读 软件质量体系白皮书【附全文阅读】
  • ARQC生成模拟
  • 网站架构演变过程ui和网页设计
  • ASR+LLM:B站学习视屏下载并生成学习笔记
  • C++中的引用
  • Linux 系统下 ZONE 区域的划分
  • 网站内部链接优化方法cpanel伪静态wordpress
  • LangChain 表达式语言核心组合:Prompt + LLM + OutputParser
  • 【管理多版本Python环境】Anaconda安装及使用
  • AI修图革命:IOPaint+cpolar让废片拯救触手可及
  • 读书笔记整理--网络学习与概念整合
  • 老铁推荐个2021网站好吗wordpress 入口文件
  • 前端自动化部署全流程(Jenkins + Nginx)
  • 音视频处理(一):什么决定了你的音色?声音的三要素
  • python+uniapp基于微信小程序的助眠小程序
  • ELK运维之路(Filebeat第二章-7.17.24)
  • (未成功)Chrome调试避免跳入第三方源码(设置Blackbox Scripts、将目录添加到忽略列表、向忽略列表添加脚本)
  • 网站建设毕业答辩问题学建设网站首页
  • 大模型在企业云计算领域的核心应用能力要求
  • CloudDM:一站式数据库开发管理工具
  • 适合用struts2做的网站批量发布网站
  • Azure OpenAI 错误码处理完整指南
  • NuxtJS从0到1开发SSR项目-添加Nuxt UI
  • 如何检查本地是否存在 Docker 镜像 ?
  • 查询工程建设项目的网站泉州网站制作平台
  • 单序列和双序列问题——动态规划
  • 【建模与仿真】基于TPE-SVM的乳腺癌诊断可解释人工智能方法