PV操作。是软考其中一个非常重要的考点,一听到这个名词,顿时赶脚高大上有么有,在软考的历年试题中,也不乏PV操作的身影,老师也对PV操作进行了一次讲课,那时年少。听得稀里糊涂,也不是非常理解,在小编的理解其中,PV操作与信号量的处理相关。P表示通过的意思,V表示释放的意思。做过几套软考试题,看过软考视频,对PV操作有了一点傻傻的理解,PV操作属于操作系统方面的知识,在前面的博文中,小编介绍过进程和存储,这篇博文。小编主要和大家来学习一下PV操作的相关知识,小编会循着以下这张图的脉络,一一介绍,首先,我们来看一下总体的有关PV操作知识点的框架。

接下来。小编就沿着上图的痕迹,对PV操作进行一一解剖,有不允许见的小伙伴欢迎讨论交流。

    概念

同步

关于同步,小编理解的意思是“协同合作。齐心协力”。换句话说就是我们的目标仅仅有一个。大家的目标都一致,就是在大家的努力下共同完毕某一件事情。看以下一张图:

我们来简单分析一下这张图,A仓库有一些货物,然后我们须要把A仓库的货物搬运到B仓库,由搬运工甲和搬运工乙来完毕这个任务;那么他们的目标就仅仅有一个。就是把货物从A仓库搬到B仓库去,共同奔着这个方向去努力,这是一个典型的同步问题。

   相互排斥

古语中有句话,能非常好的表达出相互排斥的概念--千军万马过独木桥。非常easy的一句话,把相互排斥的概念表达的淋漓尽致,就好比有一个大部队来到独木桥边,想要走过独木桥。首先要做的工作就是排好队。一个一个来。挨个走过独木桥。另一个非常好的样例能够说明相互排斥的概念,比方打印机,打印机这个工具就非常好的体现了相互排斥的概念,比方,前阵日子,大家自考。各种打印真题。打印知识点。假设你去打印的时候,已经有人正在使用打印机,那么你须要做的就是静静的等待,这也是生活中一个能非常好说明相互排斥概念的样例。在相互排斥中,还有两个重要的概念,临界资源和临界区,临界资源就是我们上文提到过的相互排斥,各个进程间须要相互排斥方式对其进行共享资源,如打印机。临界区就是进程訪问临界资源的那段代码。

       P?

V? PV?

P操作:使S=S-1。若S>=0,则该进程继续运行,否则该进程排入等待队列。

        V操作:使S=S+1,若S>0,唤醒等待队列中的一个进程。

        PV操作:解决相互排斥和同步的问题。这样理解起来,非常费解。也不知道是怎么个意思。我们还是从生活着手,看看PV是怎样操作。

        生活中的PV操作

   生产者--消费者问题

首先我们来看以下一张图

这是一个著名的同步问题。尽管生产者进程和消费者进程都是异步方式执行的,但它们之间必须保持同步,即不同意消费者进程到一个空缓冲区去取产品。也不同意生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。这是一个单缓冲区情况。那么这个单缓冲区的PV操作,应该是如何的呢?我们来看看:

我们来分析一下这个流程,前提是S1初值为1,S2初值为0。我们须要明确P操作减1,V操作加1,然后这个分析就变得没有那么困难了,我们先对初值进行一下说明:

a、我们把S1的初值设为1:是说明缓冲区另一个空间能够使用,对于生产者而言。每个缓冲区的一个空间就是一个资源,也就是说,一開始执行的时候,就同意生产者投放一个产品到缓冲区。

b、然后投放到缓冲区之后,我们来看消费者进程。P(S2):首先我们要进程一个推断。推断缓冲区中是否有产品,对消费者而言,缓冲区中有产品,就代表有一个资源能够使用。可是最初状态那个缓冲区中是没有资源的。所以S2的初值应该是为0。我们刚才都提到了资源的问题,就是信号量的一个值应该是表示资源的数量,可是就消费者和生产者而言,对于他们的资源是不同的,概念是不同的,生产者:缓冲区有多少个空格,就有多少个资源。而对消费者来说。缓冲区有多少个满的格。就有多少个资源。是刚好是相反,所以当消费者从缓冲区取出一个产品之后。对于生产者而已。就多了一个资源。

关于这个进程。我们能够这样来理解:

       1、生产者:P(S1),那么P(S1)。S1=S1-1。得到P(S1=0)这个进程还能进行,那么生产者把一个产品投放到缓冲区。

2、V(S2)。S2=S2+1,S2初值为0。所以S2=S2+1>0,那么就激活了P(S2)。那么消费者就能取出一个产品。

       3、消费产品:消费产品之前。另一个V(S1),就激活了P(S1),让生产者继续投放产品到缓冲区。这是单缓冲区分析。

      

        我们接下来看一个相对来说,有点复杂一点点的--多缓冲区的PV操作,对照我们的单缓冲区的PV操作,我们还是来分析生产者和消费者的问题:

        

相应的PV操作例如以下图

有一点差别,就是要引用相互排斥的概念,由于缓冲区是一个临界资源。它始终仅仅能有一个进程对其进行操作。所以我们就能够用一个相互排斥信号量来完毕这一点,所以当某一个进程要使用到缓冲区之前。我们就进行下面推断,推断这个缓冲区如今是不是空暇呢?是不是有生产者或者消费者的进程在使用这个这个缓冲区呢?假设有,mute的初值为1,当有人使用这个缓冲区的时候,这个mute的值就由1变为0,这时,第二个进程向再来操作这个缓冲区,就不可能了,就会被堵塞。

公交车司机与售票员的问题:

         

我们来分析这个过程。我们把S1和S2的初值都设为0。我们来分析分析:

        1、P(S1):S1=S1-1=-1,那么司机进程就被暂停。等会售票员进程,售票员关车门。

2、V(S1):S1=S1+1=0,激活了司机进程,那么司机就開始启动车辆、正常行驶、到站停车,当然售票员也 有可能同一时候在售票。

        3、P(S2):S2=S2-1,售票员在售票之后的进程就被暂停。等待司机进程。这样就避免了售票员售票之后就开车门了。

由于这是不同意的。

        4、V(S2):S2=S2+1,司机到站停车之后,就激活了售票员P(S2)的进程,那么售票员就进程 开车门、上下客的操作。那么这个进程就完毕了。

小编寄语:该博文小编主要浅显的讲述了一下PV操作的有关知识,分别三个方面对PV操作进行相关阐述,首先是概念。包含同步和相互排斥的概念,其次是什么是PV操作。最后。从生活入手,解说了两个PV操作的样例,生产者消费者问题和公交车司机和售票员的问题。另一个样例就是上次米老师上课提到的12306售票系统和顾客之间的关系。也是PV操作的一个非常好的样例典型。

这些样例都是我们生活中实实在在存在的。理解起来比較easy。也比較easy接受,软考之路,未完待续......

软考之路--从生活着手,看PV怎样操作的更多相关文章

  1. 软考之路--从生活着手,看PV如何操作

    PV操作,是软考当中一个很重要的考点,一听到这个名词,顿时赶脚高大上有么有,在软考的历年试题中,也不乏PV操作的身影,老师也对PV操作进行了一次讲课,那时年少,听得稀里糊涂,也不是很理解,在小编的理解 ...

  2. 软考之路--J2SE,从HelloWorld到传世代码

    "Hello World"程序指的是只在计算机屏幕上输出"Hello, World!"(意为"世界,你好!")这行字符串的计算机程序.hel ...

  3. 软考之路(四)---软件project一 概念模型,逻辑模型,物理模型

    自从接触到数据库到如今这三个概念大家理解的还有些不清楚,今天来为大家解答疑惑,共同提高,结合生活理解 概念模型        概念模型就是在了解了用户的需求,用户的业务领域工作情况以后,经过分析和总结 ...

  4. 软考历程(5)——extend 与 include

    软考中涉及扩展与包括关系的辨认,先不说考试的事,扩展与包括关系是UML中非经常见.非常基础的一种关系,然而我发现非常多同学都特别easy混淆,甚至软考真题中都存在题目和答案有待商榷的地方.此篇博客实属 ...

  5. 软考之J2SE

    特别感谢软考让我如今就接触了神奇的java.曾经尽管真不知道java是个神马,看完马士兵的视频发现里面的东西并不陌生.有vb,c++,c#做基础加上这次的J2SE发现原来编程语言有非常多同样的特性.也 ...

  6. 软考之PV操作(同步)

    这几天,陆续有那么三两个同学跟我讨论了一下关于软考上的PV操作的题,吾虽不才,但还是把同学们讲通了,在此,特分享一下自己的思路和想法,愿对大家有点帮助! 下面,我们就通过自己做过的试卷上两道题来分析: ...

  7. 备战“软考”之软件project

    说到"软件project"就有一种非常纠结的感觉!为什么呢?由于刚进入软考复习阶段,大家都把它放到了"比較"次要的地位,由于已经学过两遍,再加上它没有非常难理解 ...

  8. 软考下午题详解---uml图

    在上篇博客中,小编主要简单的对软考下午题当中的数据流图设计进行了一系列总结,今天我们继续来看软考下午题当中大题部分,uml图的相关知识,在我们学习的过程中,我们也已经接触过,西安交大刘惠老师讲解过um ...

  9. 软考计算机网络原理之IP计算问题汇总

    转自 http://www.cnblogs.com/jyh317/archive/2013/04/14/3018650.html 1.IP地址 分类: ①A类IP地址 ②B类IP地址 ③C类IP地址 ...

随机推荐

  1. 包及常用模块(time、datetime、random、sys)

    什么是包?‘ #官网解释 Packages are a way of structuring Python’s module namespace by using “dotted module nam ...

  2. UVALive 6486 Skyscrapers 简单动态规划

    题意: 有N个格子排成一排,在每个格子里填上1到N的数(每个只能填一次),分别代表每个格子的高度.现在给你两个数left和right,分别表示从左往右看,和从右往左看,能看到的格子数.问有多少种情况. ...

  3. Spring Cloud学习笔记【五】Hystrix Dashboard监控面板

    ystrix除了隔离依赖服务的调用以外,Hystrix 还提供了准实时的调用监控(Hystrix Dashboard),Hystrix 会持续地记录所有通过 Hystrix 发起的请求的执行信息,并以 ...

  4. vmware启动虚拟机报错VMware Workstation has paused this virtual machine because the disk on which the virtual machine is stored is almost full. To continue, free an additional 1.4 GB of disk space.

    报错VMware Workstation has paused this virtual machine because the disk on which the virtual machine i ...

  5. Java编程手冊-Collection框架(下)

    建议先看Java编程手冊-Collection框架(上) 5.  Set<E>接口与实现 Set<E>接口表示一个数学的集合,它不同意元素的反复,仅仅能包括一个null元素. ...

  6. unix mkdir命令的使用方法

    [语法]:   mkdir [-m 模式] [-p]  文件夹名 [说明]:  本命令用于建立文件夹,文件夹的存取模式由掩码(umask)决定,要求对其父文件夹具有写权限,文件夹的UID和GID为实际 ...

  7. Android入门篇(一)Androidproject的搭建,导入与导出,图标的改动

       先说一些题外话吧.这是小珂同学的处女作.可能写的不好,请各位读者见谅.我先讲讲我为什么要写博文,那应该也是机缘巧合,有一次.我问学长一个问题,学长发了一个连接给我,里面是一篇博客.那时我仅仅是看 ...

  8. Java中Socket上的Read操作堵塞问题

    从Socket上读取对端发过来的数据一般有两种方法: 1)依照字节流读取 BufferedInputStream in = new BufferedInputStream(socket.getInpu ...

  9. 118.类包装器与lambda函数包装器(伪函数实现)

    #include <iostream> #include <list> using namespace std; //函数包装器,左边参数右边函数 template<cl ...

  10. 对Jscript操作注册表接口的一点不解

    作者:朱金灿 来源:http://blog.csdn.net/clever101 要操作注册表需要通过ActiveX控件调用WScript.shell对象,通过该对象的一些方法来操作.Wshshell ...