信号量、PV操作及软考高级试题解析

信号量

在并发系统中,信号量是用于控制公共资源访问权限的变量。信号量用于解决临界区问题,使得多任务环境下,进程能同步运行。此概念是由荷兰计算机科学家Dijkstra在1962年左右提出的。信号量仅仅跟踪还剩多少资源可用,不会跟踪哪些资源是可用的。

信号量机制,处理进程同步和互斥的问题。信号量的一大特征就是它的值不能通过PV操作以外的方式更改,只能被两个标准的原语wait(s)signal(s)访问,也可记为P(s)V(s)。信号量数值为负时,表明有进程在等资源。

信号量提供一种很方便的方法来确保对共享变量的互斥访问。基本思想是将每个共享变量与一个信号量s(初值为1)联系起来,然后用P(s)V(s)操作将相应的临界区包围起来。以这种方式来保护共享变量的信号量叫做二元信号量,因为它的值总是0和1。一个被用作一组可用资源的计数器的信号量被称为计数信号量。

PV操作

计数信号量(Counting Semaphores)通常有两种操作,记做P和V,P操作减少信号量S,V操作增加信号量S:

  • P操作:P(s),wait,申请资源,信号量数值减一并且立即返回,S -= 1。S>=0,此进程执行;S<0,此进程置为阻塞(等待、挂起)状态直到s变为非0,将其插入阻塞队列。进入临界区时执行P操作
  • V操作:V(s),signal,释放资源,信号量数值加一,S += 1。S>0,此进程继续执行;S<=0,从阻塞队列唤醒一个,并插入就绪队列。退出临界区时执行V操作

在这里插入图片描述
P、V都来源自荷兰语,V通常解释为verhogen、increase。P则有多种解释:proberen、to test、to try、passeren、pass、pakken、grab。

在Dijkstra最早的论文中,P表示passering(passing),V表示vrijgave(release)。

应用场景:

  • 生产者-消费者问题
  • 哲学家就餐问题

实战

信号量

假设系统中有n个进程共享3台打印机,任一进程在任一时刻最多只能使用1台打印机。若用PV操作控制n个进程使用打印机,则相应信号量S的取值范围为();若信号量S的值为-3,则系统中有()个进程等待使用打印机。

解析:
假设系统中有n个进程共享3台打印机, 意味着每次只允许3个进程进入互斥段,则信号量的初值应为3,最小值为-(n-3),因此取值范围:3, 2, 1, 0, -1, ..., -(n-3)

信号量S的值为-3,则系统中有3个进程等待使用打印机。

信号量S的物理意义为:当S>0时,表示资源可用数;当S<0时,其绝对值表示等待资源的进程数。

PV操作

进程P1、P2、P3、P4和P5的前趋图如下:
在这里插入图片描述
若用PV操作控制进程P1〜P5并发执行的过程,则需要设置5个信号S1、S2、S3、S4和S5,进程间同步所使用的信号量标注在上图中的边上,且信号量S1〜S5的初值都等于零,初始状态下进程P1开始执行。下图中a、b和c处应分别填写(),d和e处应分别填写(),f和g处应分别填写()。
在这里插入图片描述
解析:

  • 因为P1是P2和P3的前驱,当P1执行完应通知P2和P3,应采用V(S1)V(S2)操作分别通知P2和P3,故a处应填写V(S1)V(S2);
  • 因为P2是P1的后继,当P2执行前应测试P1是否执行完,应采用P(S1)操作测试P1是否执行完,故b处应填写P(S1);
  • P2是P4和P5的前驱,当P2执行完应通知P4和P5,应使用V(S3)V(S4)操作分别通知P4和P5,故c处应填写V(S3)V(S4);
  • P3是P1的后继,当P3执行前应测试P1是否执行完,应采用P(S2)操作测试P1是否执行完,故d应填写P(S2);
  • P3是P5的前驱,当P3执行完应通知P5,应采用V(S5)操作通知P5,故e处应填写V(S5)
  • P4是P2的后继,当P4执行前应测试P2是否执行完,应采用P(S3)操作分别测试P2是否执行完,故f处应填写P(S3);
  • P5是P2和P3的前驱,当P5执行前应测试P2和P3是否执行完,应采用P(S4)P(S5)操作分别测试P2和P3是否执行完,故g处应填写P(S4)P(S5)。

投机取巧:
如果实在是不懂不会不明白,则记住:
上面的填P,下面的填V。

机票

某航空公司机票销售系统有n个售票点,该系统为每个售票点创建一个进程 P i ( i = 1 , 2 , … , n ) P_i(i=1,2,…,n) Pi(i=1,2,,n)管理机票销售。假设 T j ( j = 1 , 2 , … , m ) T_j(j=1,2,…,m) Tj(j=1,2,,m)单元存放某日某航班的机票剩余票数,Temp为 P i P_i Pi进程的临时工作单元,x为某用户的订票张数。初始化时系统应将信号量S赋值为()。 P i P_i Pi进程的工作流程如下图所示,若用P操作和V操作实现进程间的同步与互斥,则图中空(a),(b),(c)处应分别填入()。
在这里插入图片描述
解析:
公共数据单元是一个临界资源,最多允许1个终端进程使用,因此需要设置一个互斥信号量S,初值等于1。

进入临界区时执行P操作,退出临界区时执行V操作。答案应该是:P(S),V(S)和V(S)。

参考

  • 软考高级

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cloudera简介和安装部署

ChatGPT Cloudera 是一个基于 Apache Hadoop 的数据管理和分析平台。它是由 Hadoop 的几位创始人及早期贡献者于 2008 年创立的公司&#xff0c;并随着公司的不断发展&#xff0c;Cloudera 开始提供企业级的解决方案&#xff0c;帮助企业更好地利用 Hadoop 生态系统进行大数据…

2024.05.10作业

TCP服务器 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QMessageBox> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class Widget; …

mp4压缩怎么压缩?知道压缩原理和工具就会了!

在数字化时代&#xff0c;视频已成为我们生活中不可或缺的一部分。然而&#xff0c;随着视频质量的提升&#xff0c;文件大小也随之增加&#xff0c;给存储和传输带来了不小的挑战。因此&#xff0c;掌握MP4视频压缩技巧变得尤为重要。本文将为你详细介绍MP4压缩的多种方法&…

dev c++调试录入数字后回车直接关闭

1、我的dev c版本是5.11 2、输入7后&#xff0c;回车就没有了&#xff0c;原因是1013,1.cpp未包含在项目中 3、新建项目&#xff0c;并将test_debug.cpp包含在项目内&#xff0c;就可以下断点调试了

G.AB路线【蓝桥杯】/bfs+可重复走

AB路线 bfs可重复走 思路&#xff1a;本题和传统的bfs题目不同&#xff0c;本题为了满足题目先走K个A再走K个B&#xff0c;可能需要重复走某个格子才能继续走下去&#xff0c;故vis数组可以多开一维&#xff0c;vis[x][y][z]表示第z次走到x行y列这种情况是否出现过 A A A B B …

汇编语言——输入两个字数据(16位的数)X,Y,计算Z=X+Y,并把Z的结果显示出来

文章目录 以2进制输入&#xff0c;2进制输出&#xff08;无符号&#xff09;以2进制输入&#xff0c;2进制输出&#xff08;带符号&#xff09;以8进制输入&#xff0c;8进制输出以10进制输入&#xff0c;10进制输出以16进制输入&#xff0c;16进制输出 仅供参考 X、Y的输入可…

IATF16949认证是什么?

IATF16949认证是一项国际质量管理体系的认证标准&#xff0c;由国际汽车行业联合会&#xff08;IATF&#xff09;开发&#xff0c;旨在提高汽车行业的质量管理水平&#xff0c;满足客户对汽车部件和零部件的要求。该标准是在ISO/TS 16949标准的基础上&#xff0c;专门为汽车行业…

解决参考文献自动生成标号,换行时自动缩进

问题如下图所示&#xff0c;红色方框部分应该填充内容&#xff0c;但自动生成标号时不会填充&#xff1a; 解决方案&#xff1a; 1. 选中内容&#xff1a; 2. 找到布局-段落&#xff1a; 3. 选择“无”&#xff0c;即可。

【Linux操作系统】:文件操作

目录 前言 一、C语言中文件IO操作 1.文件的打开方式 2.fopen&#xff1a;打开文件 3.fread&#xff1a;读文件 4.fwrite:写文件 二、系统文件I/O 1.系统调用open、read、write 2.文件描述符fd 3.文件描述符的分配规则 4.重定向 5.缓冲区 6.理解文件系统 磁盘 磁盘…

富士Apeos 2350 NDA复印机报062 360代码故障

故障描述&#xff1a; 富士Apeos 2350 NDA复印机新机器刚拆箱安装&#xff0c;开机正常&#xff0c;自检扫描头一卡一卡的往前动几下就不动了、扫描灯也不亮扫描头也不能正常复位&#xff1b;按机器的复印键直接报062 360代码&#xff1b; 解答&#xff1a; 此代码为扫描故障&a…

多任务学习的优化算法:实现多个任务的最佳收敛

多任务学习的优化算法 多任务学习的优化算法&#xff1a;实现多个任务的最佳收敛多任务学习的挑战多任务学习的优化算法1. **梯度归一化&#xff08;Gradient Normalization, GradNorm&#xff09;**2. **多任务平衡&#xff08;Multi-Task Balancing, MTB&#xff09;**3. **弹…

Navicat工具连接人大金仓数据库

在使用人大金仓数据库时&#xff0c;可以选择使用人大金仓自带的连接工具&#xff0c;比如KingbaseES V8&#xff08;数据库开发管理工具&#xff09;工具&#xff0c;类似于navicat工具&#xff0c;两个工具都有优缺点&#xff0c;看个人喜好了。 但是在实际过程中&#xff0c…

pdffactory pro8.0虚拟打印机(附注册码)

PdfFactory pro是一款非常受欢迎的PDF虚拟打印机&#xff0c;可以帮助用户将你的其他文档保存为PDF格式。请为用户提供打印/发送/加密等多种实用功能&#xff0c;以及一套完善的PDF打印方案。 使用说明 下载pdfFactory Pro压缩包&#xff0c;解压后&#xff0c;双击exe文件&am…

【go项目01_学习记录10】

操作数据库 1 插入数据2 显示文章2.1 修改 articlesShowHandler() 函数2.2 代码解析 3 编辑文章3.1 添加路由3.2 编辑articlesEditHandler()3.3 新建 edit 模板3.4 代码重构3.5 完善articlesUpdateHandler()3.6 测试更新3.7 封装表单验证 1 插入数据 . . . func articlesStore…

Spark Streaming笔记总结(保姆级)

万字长文警告&#xff01;&#xff01;&#xff01; 目录 一、离线计算与流式计算 1.1 离线计算 1.1.1 离线计算的特点 1.1.2 离线计算的应用场景 1.1.3 离线计算代表技术 1.2 流式计算 1.2.1 流式计算的特点 1.2.2 流式计算的应用场景 1.2.3 流式计算的代表技术 二…

(十)JSP教程——config对象

config对象是脚本程序配置对象&#xff0c;表示当前JSP页面的配置信息。由于JSP页面通常无需配置&#xff0c;因此该对象在JSP页面中比较少见。 config对象可以读取一些初始化参数的值&#xff0c;而这些参数一般在web.xml配置文件中可以看到&#xff0c;并通过config对象的相应…

day5 qt

服务器头文件#ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QMessageBox> #include <QDebug> QT_BEGIN_NAMESPACE namespace Ui { class Mywidget; …

06.线程同步

互斥锁&#xff08;互斥量&#xff09; 描述 一个进程下的线程是共享资源的&#xff0c;通信便利的同时也造成了许多麻烦&#xff0c;线程程和线程之间如果同时访问一块资源就会出错&#xff0c;所以要引入一个互斥变量给它加锁&#xff0c;让它去协同不同线程程之间的访问&am…

C++对象的赋值

同类的对象之间可以互相赋值&#xff0c;即一个对象的值可以赋值给另一个对象。对象之间的赋值通过“”进行。默认就是把一个对象所有非static数据成员的值依次赋值给另一个对象。 对象赋值的一般形式为&#xff1a; 对象名1 对象名2; 注意:对象名1和对象名2必须是属于同一个…

4000字超详解Linux权限

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 在Linux当中权限的体现主要有两种 普通用户 超…