PV大题--专题突破

写在前面:

PV大题考查使用伪代码控制进程之间的同步互斥关系,它需要我们一定的代码分析能力,算法设计能力,有时候会给你一段伪代码让你补全使用信号量控制的操作,请一定不要相信某些人告诉你只要背一个什么模板,记住什么套路就能拿下这个大题,这是不切实际的!!

在真题的考查中,题目是较为灵活的,需要我们临场分析,如果只要背一背就能拿满分没有区分度,那出题老头也没必要年年都考PV了对吧?因此在正式进入大题讲解之前,必须对一些 前置知识理解透彻,比如什么是同步与互斥,信号量的分类,以及考纲上的三个模型(生产者消费者、读者写者、哲学家进餐)尤其需要彻底搞懂!!

这里我会大家学习考查的最多的模型—消费者生产者模型,从真题来看,至少有三分之三以上的PV问题都是基于此模型进行拓展(比如加一些资源,多一些同步关系等)。并且大家在分析其他模型 的时候,也要达到一个标准:

  1. 能够理解清楚每一行PV的意义是什么,为什么这里需要同步,这里要互斥。
  2. 能够熟练手写考纲上三个模型的代码,不允许出错。
  3. 真题考查的问题,一定要想一下它和我们已经学过的模型的区别与联系,只有多思考才能在下一次考查到相同类型问题的时候能够熟练写出来。

前置知识🌟

  1. 临界资源:一次只允许一个进程去访问,比如打印机。
  2. 临界区:进程对于临界资源访问的程序成为临界区,一般需要加上"互斥信号量"(下面会讲)。
  3. 互斥关系:由于进程的并发性同时去访问同一个临界资源会出现问题,需要互斥地去访问。比如两个进程同时访问一个打印机,数据会错乱。
  4. 同步关系:进程之间的操作事件存在时序关系,比如先后关系,我们在真题会遇到这种说法"操作C必须在操作A、B之后完成",也就是在告诉你这里有一个同步关系,需要你用信号量去定义。
  5. 信号量:对于信号量,我们不要去研究其复杂的概念,它的核心就是:阻塞—唤醒,我们在程序设计的时候也只要思考:我这个信号量是为了阻塞什么操作,什么时候会被唤醒,因此PV总是成对出现,这是本质。
    1. 互斥信号量:初始值为1,取值只能为0或1,当有进程进入临界区时就要上锁,也就是P一下互斥信号量,离开的时候就V一下互斥信号量,千万不要忘记释放。
    2. 同步信号量:这个名字是我自己编的,仅仅是更利于我们做题。它的初始值需要根据题目去分析,本质是用来实现进程之间的同步操作,也就是阻塞—唤醒功能,当它的值≤0时,说明资源已经被分配完,此时进程就不能获取该资源,需要等待其他进程去唤醒。比如我们的盒子里能放三块巧克力了,杰尼龟投放巧克力,小火龙吃巧克力;当盒子里没有巧克力但是小红还想要吃,就会 被阻塞住,直到杰尼龟投放了一块巧克力去唤醒小火龙告诉她:“嘿小火龙,巧克力来了,可以享用了!”。
  6. 注意:初学的时候,我们可能会困惑与同步与互斥的区别,千万不要陷入进去,因为在黑书中明确定义了同步与互斥关系在一些复杂的问题中往往是交叉的,不用区分,只要能定义出信号量会做题即可。且这类题型的答案往往也不是 唯一的,大家设计的算法当然有所不同,合理即给分。

解题技巧

在大题中,我们只会用到者两种信号量,不要害怕,非此即彼。互斥信号量初始值恒为1,而同步信号量,需要我们去设计。

  • 有一些题会初始化为资源的个数,比如缓冲区有10个空位,empty信号量就定为10。
  • 有一些题会初始化为0,比如我们要实现一些**“强同步”**关系的时候,像等待叫号与叫号服务。
  • 有一些题我们画出一个前驱图即可快速解决(类似于数据结构的拓扑排序)。
  • 程序中PV数量必须相同(PV成对),请仔细检查。
  • 对于单个进程,往往进需要定义一个同步互斥量,而对于两个进程需要一对,三个进行就用三个,如生产者消费者模型,等会用例题和真题带大家感受。(不想思考的时候直接用,无敌!)
  • 同步信号量一定要写在互斥信号量外侧(否则会死锁)。
  • 尽可能的少拿资源,比如一个题他的逻辑是水缸里有水,才能用水桶打水,那么我们在写伪代码的时候,就可以去提前判断一下水缸里是否有水(P一下),如果没有那我们就不去拿水桶了。也就是说当出现多同步关系的时候,我们要去思考一下顺序。
  • 一个进程中,如果想实现“同步”关系,往往采用互斥信号量实现,这也是我为什么在前面就说在操作系统中同步和互斥有些情况是不做区分的,互斥就是特殊的同步。因此一个题中互斥信号量不一定只需要一个,不要教条。

当然这些都是我的经验之谈只能作为锦上添花,具体的还要在题目中才能分享给你们。

基本设计模板:

// 互斥访问临界区
A(){P(mutex);操作;V(mutex);
}
// 先A后B同步关系
A(){操作;V(同步信号量);
}B(){P (同步信号量);操作;
}

生产者-消费者模型🌟🌟

分析方法:所有的PV大题,都按照以下步骤进行分析,这里用生产者消费者模型来举例。

  1. 找到题目中的进程个数,以及资源的个数
  2. 分析各个进程之间的同步关系,找到需要互斥访问的临界区
  3. 定义出互斥信号量和同步信号量
  4. 根据进程同步关系,写出伪代码
  5. 检查PV是否成对,是否有死锁问题(对mutex操作放在中间)
  6. 模拟一下自己的伪代码,看看是否有遗漏的信号量(如果自信可不做)

在这里插入图片描述

我们来看这个模型,如图所示有一个缓冲区,假设可以容纳n个产品,生产者负责投放产品,而消费者负载消费产品,图中的产品就是食物。请用PV操作,实现同步互斥关系,要求给出伪代码。

分析:

  1. 两类进程:生产者、消费者
  2. 两类资源:大小为n的缓冲区,产品(注意两类 资源不一定只需要两个信号量,需要根据关系而定)
  3. 关系分析:
    1. 互斥访问缓冲区
    2. 缓冲区有空位置才能生产,有产品才能消费
  4. 信号量定义,并写出伪代码(直接看我写的)

在这里插入图片描述

Q:想一想能不能把对于缓冲区上锁的操作与P(同步互斥量)的操作互换?

不行,会死锁。举个例子,小火龙没有判断盒子里有没有巧克力,就直接获取盒子,再去判断有没有巧克力,但是此时盒子里没有巧克力,因此小火龙被阻塞住了,也没有释放盒子;这时杰尼龟来了,准备投放巧克力,想获取盒子的时候发现盒子还没有被释放,因此也被阻塞住了,也就不能生产巧克力去唤醒小火龙,此时进程就死锁了。
Q:有同学可能会问了,判断缓冲区中有没有资源,和减一操作可以分开吗?是不可以的,这是原子性操作,不可分。请看大黑书《深入理解计算机系统》原话:
在这里插入图片描述

至此,我们已经搞懂了 PV大题的本质,学习了最常见的模型,剩下的就是通过真题的训练去摸索出套路,熟能生巧,同时也要多思考模型的设计,以不变应万变。

真题

在这里插入图片描述

在这里插入图片描述

讲解视频跳转:【操作系统 | PV】40min带你狠狠拿捏PV大题的所有核心知识与解题技巧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/435969.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国庆偷偷卷!小众降维!POD-Transformer多变量回归预测(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现POD-Transformer多变量回归预测,本征正交分解数据降维融合Transformer多变量回归预测,使用SVD进行POD分解(本征正交分解); 2.运行环境Matlab20…

MobaXterm基本使用 -- 服务器状态、批量操作、显示/切换中文字体、修复zsh按键失灵

监控服务器资源 参考网址:https://www.cnblogs.com/144823836yj/p/12126314.html 显示效果 MobaXterm提供有这项功能,在会话窗口底部,显示服务器资源使用情况 如内存、CPU、网速、磁盘使用等: (完整窗口&#xff0…

BEVDet---论文+源码解读

论文链接:https://arxiv.org/pdf/2112.11790.pdf; Github仓库源码:https://github.com/HuangJunJie2017/BEVDet; BEVDet这篇论文主要是提出了一种基于BEV空间下的3D目标检测范式,BEVDet算法模型的整体流程图如下&…

汽车总线之---- LIN总线

Introduction LIN总线的简介,对于传统的这种点对点的连接方式,我们可以看到ECU相关的传感器和执行器是直接连接到ECU的,当传感器和执行器的数量较少时,这样的连接方式是能满足要求的,但是随着汽车电控功能数量的不断增…

基于单片机的指纹打卡系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52RC,采用两个按键替代指纹,一个按键按下,LCD12864显示比对成功,则 采用ULN2003驱动步进电机转动,表示开门,另一个…

RTMP、RTSP直播播放器的低延迟设计探讨

技术背景 没有多少开发者会相信RTMP或RTSP播放器,延迟会做到150-300ms内,除非测试过大牛直播SDK的,以Android平台启动轻量级RTSP服务和推送RTMP,然后Windows分别播放RTSP和RTMP为例,整体延迟如下: 大牛直播…

深度学习后门攻击分析与实现(二)

前言 在本系列的第一部分中,我们已经掌握了深度学习中的后门攻击的特点以及基础的攻击方式,现在我们在第二部分中首先来学习深度学习后门攻击在传统网络空间安全中的应用。然后再来分析与实现一些颇具特点的深度学习后门攻击方式。 深度学习与网络空间…

探索甘肃非遗:Spring Boot网站开发案例

1 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前&#…

SpringBoot框架下体育馆管理系统的构建

1引言 1.1课题背景 当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其…

工具介绍---效率高+实用

Visual Studio Code (VS Code) 功能特点: 智能代码提示:内置的智能代码提示功能可以自动完成函数、变量等的输入,提高代码编写速度。插件丰富:支持成千上万的扩展插件,例如代码片段、主题、Linting等,能够…

通信工程学习:什么是CSMA/CD载波监听多路访问/冲突检测

CSMA/CD:载波监听多路访问/冲突检测 CSMA/CD(Carrier Sense Multiple Access/Collision Detect),即载波监听多路访问/冲突检测,是一种用于数据通信的介质访问控制协议,广泛应用于局域网(特别是以…

vue仿chatGpt的AI聊天功能--大模型通义千问(阿里云)

vue仿chatGpt的AI聊天功能–大模型通义千问(阿里云) 通义千问是由阿里云自主研发的大语言模型,用于理解和分析用户输入的自然语言。 1. 创建API-KEY并配置环境变量 打开通义千问网站进行登录,登陆之后创建api-key,右…

李宏毅机器学习2023-HW10-Adversarial Attack

文章目录 TaskBaselineFGSM (Fast Gradient Sign Method (FGSM)I-FGSM(Iterative Fast Gradient Sign Method)MI-FGSM(Momentum Iterative Fast Gradient Sign Method)M-DI2-FGSM(Diverse Input Momentum Iterative Fast Gradient Sign Method) Reportfgsm attackJepg Compress…

Iceberg 基本操作和快速入门

安装 Iceberg 是一种适用于大型分析表的高性能工具,通过spark启动并运行iceberg,文章是通过docker来进行安装并测试的 新建一个docker-compose.yml文件 文件内容 version: "3" services: spark-iceberg: image: tabulario/spark-iceberg co…

数据结构之链表(2),双向链表

目录 前言 一、链表的分类详细 二、双向链表 三、双向链表的实现 四、List.c文件的完整代码 五、使用演示 总结 前言 接着上一篇单链表来详细说说链表中什么是带头和不带头,“哨兵位”是什么,什么是单向什么是双向,什么是循环和不循环。然后实…

微信小程序map组件自定义气泡真机不显示

最近遇到一个需求需要使用uniapp的map自定义气泡 ,做完之后发现在模拟器上好好的,ios真机不显示,安卓页数时好时不好的 一番查询发现是小程序的老问题了,网上的方法都试了也没能解决 后来看到有人说用nvue可以正常显示&#xff0c…

word2vector训练代码详解

目录 1.代码实现 2.知识点 1.代码实现 #导包 import math import torch from torch import nn import dltools #加载PTB数据集 ,需要把PTB数据集的文件夹放在代码上一级目录的data文件中,不用解压 #批次大小、窗口大小、噪声词大小 batch_size, ma…

《深度学习》卷积神经网络CNN 实现手写数字识别

目录 一、卷积神经网络CNN 1、什么是CNN 2、核心 3、构造 二、案例实现 1、下载训练集、测试集 代码实现如下: 2、展示部分图片 运行结果: 3、图片打包 运行结果: 4、判断当前使用的CPU还是GPU 5、定义卷积神经网络 运行结果&a…

后端-对表格数据进行添加、删除和修改

一、添加 要求: 按下添加按钮出现一个板块输入添加的数据信息,点击板块的添加按钮,添加;点击取消,板块消失。 实现: 1.首先,设计页面输入框格式,表格首行 2.从数据库里调数据 3.添加…

LPDDR4芯片学习(二)——Functional Description

一、LPDDR4寻址表 以每个die容量为4GB为例: Memory density(per channel) 2Gb:每个通道大小为2Gb,一个die有两个通道Configuration 16Mb 16DQ 8 banks 2 channels :16Mb的寻址空间16位每个channels8个bank*每个die两channels。1…