【软考学习10】一文解决谜一样的 PV 操作

简介: 【软考学习10】一文解决谜一样的 PV 操作


本文讲解计算机的 PV 操作、 PV 操作在生产消费者模型中的应用、PV 操作在前趋图中的应用。

一、PV 操作基本概念

首先了解三个基本概念,分别是临界资源、临界区和信号量

  • 临界资源:多个进程需要共享使用的资源,如打印机。
  • 临界区:各个进程访问临界资源的那一段代码。
  • 信号量:在 PV 操作中的一种变量。

PV 操作是由 P 操作和 V 操作组成的操作原语这不废话 ),原语是不能中断的流程,可以理解为 Java 的事务,要么都执行,要么都不执行,不存在执行一半的情况。

信号量就是被 P 操作或 V 操作所操控的变量,信号量通常用 S 标识,P 操作用 P(S)标识,V 操作用 V(S) 表示。

P(S)操作(P 操作)可以将信号量 S 减一,即执行 S = S - 1。如果 S >= 0,则进程继续执行;若 S < 0,进程进入等待队列,变为等待状态。

V(S)操作(V 操作)可以将信号量 S 加一,即执行 S = S + 1。如果 S > 0,则进程继续执行;若 S <= 0,从等待队列释放一个等待进程。

PV 操作存在的意义,就是实现不同进程之间的同步和互斥,简单流程如下图所示。


二、生产消费者模型

还是回到之前说的生产消费模型,如下图所示。

生产消费者的运行流程如下图所示。

在公司食堂,员工排队取菜是再也正常不过的事情了。食堂阿姨在窗口放菜,员工取餐。

如果用进程 A 代表食堂阿姨放菜的工作进程,进程 B 代表员工取菜的工作进程,那么进程 A 就被看做生产者,进程 B 就被看做消费者。


没有使用 PV 操作的进程

生产者的进程 A:生产一个产品(饭菜,下同)⇒ 将产品放到缓冲区(食堂窗口,下同)。

消费者的进程 B:消费一个产品 ⇒ 从缓冲区中取出产品。


正常来说系统可以运行,但会出现两种特殊情况。

  • 生产者生产出产品,但缓冲区不够放。
  • 消费者尝试消费产品,但缓冲区产品为空。

这就会导致整套系统出现异常,造成不可估计的后果,所以,我们要引入 PV 操作,当缓冲区不够放时,要及时把进程阻塞起来,等待消费者消费后再放上去。


使用 PV 操作的进程

生产者的进程 A:生产一个产品 ⇒ 执行 P(S1) 操作 ⇒ 将产品放到缓冲区 ⇒ 执行 V(S2) 操作。

消费者的进程 B:消费一个产品 ⇒ 执行 P(S2) 操作 ⇒从缓冲区中取出产品 ⇒ 执行 V(S1) 操作。

其中 S1 的初始值为 1,代表缓冲区的剩余客房容量。

其中 S2 的初始值为 0,代表缓冲区剩余的产品容量。


三、PV 操作例题

某家书店因疫情管控,最多允许 N 位顾客进入,你可认为顾客都会进入购书结算。

将收银员和购书者看做不同的进程,并利用 PV 操作模拟进程的同步互斥,如下图所示。

设置信号量 S1 = 0、S2 = 0、SN = N,PV 流程图的操作 A、B、C、D 的结果为?

首先分析购书者的进程,信号量 Sn 代表着书店剩余可进入的购书者,当购书者进入书店,执行 P(Sn)操作,将信号量 Sn 减一。等到购书者离开书店后,执行 V(Sn)操作,将信号量 Sn 加一,这个没有问题。

重点是当购书者选好书之后,要进行付款的流程,信号量 S1 和 S2 就是用来控制收银员收款的变量。

我们设 S1 信号量代表收银员收费窗口服务的人数,初始人是空的,所以 S1 信号量为 0。

购书者申请付款,收银员开始接待,那么就需要执行 V(S1) 操作,将 S1 加一。

所以操作 A 应填写 V(S1)

接下来分析收银员进程,收银员开始收款时,首先要开始对购书者进行服务,即服务一个【收银员收费窗口服务的人数】,即信号量 S1,需要在操作 C 的位置需要将信号量 S1 减一,将这位购书者置为己有,不让其他收银员对其服务,所以操作 C 应填写 P(S1)

我们设 S2 信号量代表收银员收款完成的购书者人数,初始人是空的,所以 S2 信号量为 0。

付款完成后,对于收银员来说,付款流程结束,要将【收银员收款完成的购书者人数】加一,即执行 V(S2)操作,将S2 加一,所以操作 D 应填写 V(S2)

最后对于购书者来说,付款完成后就可以正常离开书店,即【收银员收费窗口服务的人数】减一,执行 P(S2)操作,所以操作 B 应填写 P(S2)

最终结果如下图所示。


四、前趋图的应用

前趋图这个无循环图的组成包括了有向边和结点。

前趋图通常用于表现进程中事务之间先后顺序的制约关系

前趋图中的各个结点都可以表示为一条程序语句、一个程序段落或者是一个实际进程。

各个结点间的有向边,可以表示两个结点之间存在的前趋关系,即必须先执行什么,再执行什么。

PV 操作在前趋图中也有着广泛应用。

比如有这样的一个前趋图,如下图所示。

我们可以发现,必须先执行 A 和 B,在执行 C,然后再执行 D 和 E

如何在程序中控制该套系统的正常运行,即可用 PV 操作来实现。

使用信号量 S1、S2、S3、S4

在执行 A 操作时,执行 V(S1)。

在执行 B 操作时,执行 V(S2)。

在执行 C 操作时,执行 P(S1)、P(S2)、V(S3)、V(S4)。

在执行 D 操作时,执行 P(S3)。

在执行 E 操作时,执行 P(S4)。

这就是 PV 操作在前趋图中的简单应用。


五、总结

本文讲解了计算机的 PV 操作,还有 PV 操作在生产消费者模型中的应用,和在前趋图中的应用。


相关文章
|
2月前
|
网络协议 网络安全 API
C# 与三菱FX5U PLC通讯交互指南
C# 与三菱FX5U PLC通讯交互指南
1028 121
|
9月前
|
人工智能 运维 资源调度
AI 赋能混合云运维:告别手工操作,迈向智能自愈!
AI 赋能混合云运维:告别手工操作,迈向智能自愈!
474 85
|
5月前
|
人工智能 缓存 前端开发
通义灵码2.5+qwen3——节假日抢票不用愁,基于12306-MCP实现个人火车票智能查询小助手!
本项目作为通义灵码2.5的深度实践案例,充分展现了通义灵码2.5编程智能体调用MCP实现大模型智能化工具的强大优势。
429 10
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
1019 1
|
搜索推荐 算法 SEO
移动端的seo优化要怎么做
在如今移动端优化规则不断完善的时代,现今做网站推广要想获得更多的流量,移动端网站关键词排名自然是不可轻视的优化步骤,但移动端网站排名的规则与PC端网站优化排名算法有很大的差异,那么移动端关键词优化有哪
|
存储 安全 测试技术
如何评估 API 的质量
本文详细介绍了评估API质量的关键指标,包括功能性(功能完整性与准确性)、可靠性(稳定性和错误处理)、性能(响应时间和吞吐量)、易用性(文档质量和接口设计)及安全性(身份验证和数据加密),并提供了具体评估方法与测试建议,帮助开发者全面衡量API质量。通过这些评估,可以确保选择到高质量的API,为软件项目奠定坚实基础。
467 5
|
存储 缓存 Java
02.计算器存储器的原理
计算器存储器的原理
594 9
02.计算器存储器的原理
|
缓存 Java 开发者
SpringBoot自动装配原理
SpringBoot自动装配原理
818 1
|
安全 大数据 数据挖掘
大数据时代,数据安全管理的问题与对策
无论是从企业还是个人的需求出发,考取一个大数据管理相关的证书都是最好的选择,不仅能提升大数据管理能力、意识和素质,还能获得更高的市场信誉与认可。
|
安全 Linux 测试技术
深入探索Linux命令:chcon
`chcon`(Change Context)命令在Linux中用于调整文件或目录的安全上下文,特别是在需要精细安全控制时,如SELinux环境。它定义了主体和客体间的访问权限。示例命令如`setfattr -n security.selinux -v &quot;unconfined_u:object_r:httpd_sys_content_t:s0&quot; /path/to/file`用于修改安全上下文。但需谨慎使用,理解潜在影响,避免破坏系统安全性,并在操作前备份和学习相关知识。不同发行版可能有不同的命令和选项,建议查阅文档。