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.xdnf.cn/news/1551596.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

新手必知的录屏工具及其使用方法详解

你平常会录屏吗?录屏已经成为了一项非常实用的技能。无论是制作教学视频还是记录游戏精彩瞬间,录屏都可以帮我们记录我们在电脑上看到的精彩瞬间。今天我们就一同来探索在电脑上如何录屏吧。 1.福昕录屏工具 链接:www.foxitsoftware.cn/REC…

太速科技-FMCJ457-基于JESD204B的2路2Gsps AD 2路2Gsps DA FMC子卡

FMCJ457-基于JESD204B的2路2Gsps AD 2路2Gsps DA FMC子卡 一、板卡概述 该子卡是高速AD9172 DAC和AD9689 ADC的FMC板。为客户提供高达2 GHz 的可用模拟带宽以及 JESD204B 接口,以快速地对各种宽带 RF 应用进行原型制作。 AD芯片AD9689,AD9689-2…

Ceph RocksDB 深度调优

介绍 调优 Ceph 可能是一项艰巨的挑战。在 Ceph、RocksDB 和 Linux 内核之间,实际上有数以千计的选项可以进行调整以提高存储性能和效率。由于涉及的复杂性,比较优的配置通常分散在博客文章或邮件列表中,但是往往都没有说明这些设置的实际作…

论文翻译 | LLaMA-Adapter :具有零初始化注意的语言模型的有效微调

摘要 我们提出了一种轻量级的自适应方法,可以有效地将LLaMA微调为指令遵循模型。lama - adapter采用52K自指导演示,在冻结的LLaMA 7B模型上只引入1.2M可学习参数,在8个A100 gpu上进行微调花费不到一个小时。具体来说,我们采用了一…

armbian安装docker

最近又搞了台瑞莎Radxa 3E ,从零开始部署unbuntu环境,发现是真曲折啊,虽然有点前车之鉴了 在Armbian上安装Docker,可以按照以下步骤操作: 1、更新软件包列表: sudo apt-get update 2、安装必要的软件包…

【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧

文章目录 C模板进阶编程前言第一章: 非类型模板参数1.1 什么是非类型模板参数?1.1.1 非类型模板参数的定义 1.2 非类型模板参数的注意事项1.3 非类型模板参数的使用场景示例:静态数组的实现 第二章: 模板的特化2.1 什么是模板特化?2.1.1 模板…

安防监控/智慧安防EasyCVR视频汇聚监控平台无法启动并报错“no space left on service”是什么原因?

视频汇聚/安防监控/智慧安防EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。平台可以引入AI智能分析能力,能够实现对视频中的特…

DRF实操——支付宝的介绍与对接支付宝

DRF实操——支付宝的介绍与对接支付宝 1. 支付宝的介绍实际上线环境:开发环境: 2. DRF对接支付宝1. 创建配置文件2. 在setting文件中,做支付宝配置3. 安装支付宝第三方库4. 在setting文件中实例化支付宝对象5.创建模型,保存订单的…

【以图搜图代码实现2】--faiss工具实现犬类以图搜图

第一篇:【以图搜图代码实现】–犬类以图搜图示例 使用保存成h5文件,使用向量积来度量相似性,实现了以图搜图,说明了可以优化的点。 第二篇:【使用resnet18训练自己的数据集】 准对模型问题进行了优化,取得了…

【完-网络安全】Windows用户

文章目录 内置账号用户组通过命令行管理用户 内置账号 通过注销切换用户账号 Administrator用户 该帐号为系统默认的管理员帐号,该帐户具有Windows的最高管理权限,默认禁用。 Guest用户,来宾账户 可运行部分抵权限程序,查看部分文…

【STM32单片机_(HAL库)】4-0【定时器TIM】定时器中断配置步骤

定时器工作原理 定时器计数模式 定时器溢出时间计算 定时器中断实验配置步骤 msp 函数是对 MCU 相关的硬件进行初始化设置,通常被设计用于处理特定硬件外设或功能的底层初始化工作。

redis的数据结构,内存处理,缓存问题

redisObject redis任意数据的key和value都会被封装为一个RedisObject,也叫redis对象: 这就redis的头信息,占有16个字节 redis中有两个热门数据结构 1.SkipList,跳表,首先是链表,和普通链表有以下差异&am…

前端工程规范-2:JS代码规范(Prettier + ESLint)

Prettier 和 ESLint 是两个在现代 JavaScript 开发中广泛使用的工具,它们结合起来可以提供以下作用和优势: 代码格式化和风格统一: Prettier 是一个代码格式化工具,能够自动化地处理代码的缩进、空格、换行等格式问题,…

【STM32单片机_(HAL库)】4-2【定时器TIM】定时器输出PWM配置步骤

PWM介绍 PWM波形(Pulse Width Modulation,脉冲宽度调制波形)是一种占空比可变的脉冲波形。 频率 1/Ts 占空比 Ton / Ts 分辨率 占空比变化步距 定时器输出PWM配置

2024年十大热门人力资源管理系统对比与推荐

本文介绍了ZohoPeople、金蝶云、用友、北森等10款热门HRMS系统,包括各自特点如ZohoPeople的全球化管理、北森的全面人才管理等。建议企业先试用再决定购买,以找到最适合的系统。 一、Zoho People Zoho People 是一个基于云的全球化人力资源管理系统 (HR…

啤酒在文学中的浪漫形象:精酿啤酒的诗意之旅

在文学的浩瀚星空中,啤酒并非仅仅是醉人的琼浆,它更是一种情感的载体,一种浪漫的符号。尤其是当提及Fendi Club精酿啤酒时,我们仿佛能闻到那从古老酒窖中飘出的馥郁香气,感受到它在文字间流淌的诗意与温情。 一、啤酒…

鸿蒙开发(NEXT/API 12)【请求用户授权】手机侧应用开发

为保护用户隐私,Wear Engine的API需要用户授权才可以正常访问。建议开发者在用户首次调用Wear Engine开放能力的时候执行本章节操作。 申请用户穿戴设备权限 应用拉起华为账号登录和授权界面,由用户授权相应的数据访问权限。用户可以自主选择授权的数据…

建筑中的文化表达与地方特色:演绎地域之魂

在浩瀚的城市风貌中,每一座建筑都是文化的载体,无声地讲述着地域的故事与精神。建筑不仅需要满足功能需求,更应成为文化传承与创新的舞台。本文旨在深度剖析建筑设计如何在尊重与弘扬地方文化的基础上,巧妙融合现代元素&#xff0…

【含文档】基于Springboot+Vue的公园管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

前端css样式设置元素的绝对定位和相对定位,要注意宽度和高度的设置

vue3子div position absolute,父div positon relative 。如果不设置子div的 width 和height,那么子div中如果数据变长,子div相对父div位置会变化。子div数据超过&#xff0c;显示... 如何实现 <template><div class"parent"><div class"child&q…