PV操作
学习PV操作之前,我们首先来了解两个很基础的概念:
同步、互斥:
同步:其实说同步还不如说”协作“,就是我们的目标只有一个,我们奔着同一个目标去的,都是在大家的努力下共同完成这么一件事情。还是比较容易理解的吧。不见得太难。
互斥:借用别人的一句话“千军万马过独木桥”,很通俗的一句话,就把咱们这个概念表达的淋漓尽致,就好比有一个大部队来到独木桥这,但是必须排好队,一个一个来;其实现实生活中,还有一个很好的例子可以说明这个互斥的概念,比如打印机,打印机这个工具就非常好的体现了互斥的概念,打印机一旦被别人占用了,那无论你有多着急,都只能等着,对吧。
我们接下来还继续看一下一张同步的图:
这张图也特别的形象具体,我们具体来看看这张图,A仓库有货物,然后我们需要把货物搬运到B仓库,由搬运工甲和搬运工乙来完成这个过程;那么他们的目标就只有一个,就是把货物从A搬到B去,共同奔着这个方向去发展,所以我们说这是一个同步的问题。
临界资源:就是咱们刚刚说的互斥,诸进程间需要互斥方式对其进行共享资源,如打印机、光驱等。
临界区:就是进程访问临界资源的那段代码。
讲了那么久,我们才引入了PV操作,看来这个PV操作还是挺有意思的。
信号量:信号量是一个整形变量,根据控制对象的不同被赋予不同的值。
① 公用信号量。实现进程间的互斥,初始值为1或资源的数目。
② 私用信号量。实现进程间的同步,初始值为0或某个正整数。
信号量S的物理意义:S>=0表示某资源的可用数,若S<0,则其绝对值表示阻塞队列中等待该资源的进程数。
PV操作:解决互斥和同步的问题。PV操作是分开来看的:
P操作:使S=S-1,若S>=0,则该进程继续执行,否则该进程排入等待队列。P操作表示申请一个资源。
V操作:使S=S+1,若S>0,唤醒等待队列中的一个进程。V操作表示释放一个资源。
这样理解不太好理解,咱们还是来看例子吧:
接下来,我们来看一个与咱们生活很贴切的问题:生产者——消费者问题:
我们还是一样,通过图片来分析问题:
这是一个著名的同步问题,虽然生产者进程和消费者进程都是异步方式运行的,但它们之间必须保持同步,即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。这是一个单缓冲区情况。那么这个单缓冲区的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),那么消费者就能取出一个产品。
4、消费产品:消费产品之前,还有一个V(S1),就激活了P(S1),让生产者继续投放产品到缓冲区。
特别简单吧,这是单缓冲区分析。
我们接下来看一个相对来说,有点复杂一点点的,多缓冲区的,其实也一样一样的,继续:
我们还是分析一样的问题,生产者、消费者问题:
对应的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操作简单理解
原文链接:http://blog.csdn.net/liushuijinger/article/details/7586656 进程通常分为就绪.运行和阻塞三个工作状态.三种状态在某些条件下可以转 ...
- 实验四 简单的PV操作
实验四 简单的PV操作 专业 网络工程 姓名 方俊晖 学号 201406114309 一. 实验目的 1.掌握临界区的概念及临界区的设计原则: 2.掌握信号量的概念.PV操作的含义以 ...
- 信号量与PV操作
在计算机操作系统中,PV操作是进程管理中的难点.首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号量S的 ...
- 软考之PV操作(同步)
这几天,陆续有那么三两个同学跟我讨论了一下关于软考上的PV操作的题,吾虽不才,但还是把同学们讲通了,在此,特分享一下自己的思路和想法,愿对大家有点帮助! 下面,我们就通过自己做过的试卷上两道题来分析: ...
- 多线程同步内功心法——PV操作上(未完待续。。。)
阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...
- Pintos修改优先级捐赠、嵌套捐赠、锁的获得与释放、信号量及PV操作
Pintos修改优先级捐赠.嵌套捐赠.锁的获得与释放.信号量及PV操作 原有的优先级更改的情况下面没有考虑到捐赠的情况,仅仅只是改变更改了当前线程的优先级,更别说恢复原本优先级了,所以不能通过任何有关 ...
- Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步
Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步 一.概述 PV操作是对信号量进行的操作. 进程同步是指在并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消 ...
- 信号量和PV操作写出Bakery算法的同步程序
面包店烹制面包及蛋糕,由n个销售员卖出.当有顾客进店购买面包或蛋糕时,应先在取号机上取号,然后等待叫号,若有销售员空闲时便叫下一号,试用信号量和PV操作写出Bakery算法的同步程序. 设计要求 1) ...
- clients(PV操作共享内核内存进行输入输出分屏) - server(进程间通信)模型实现
1.拓扑结构 2.PV操作共享内核内存进行输入输出分屏 (1) int semop(int semid,struct sembuf *sops,size_t nsops): 功能描述 操作一个或一组信 ...
随机推荐
- Zabbix监控nginx-rtmp status(html版)
nginx-rtmp开启stats # nginx(--add-module=nginx-rtmp-module-master) nginx.conf: server { listen ; locat ...
- NGUI 滑动与点击事件冲突处理
弄一个既能滑动,又能点击的Scroll View.发现弄完后不能拖动了~ 因为点击事件需要Box Collider覆盖掉了Drag Scroll View的Box Collider.注意是Drag S ...
- Linux下因为系统编码问题造成乱码的解决办法
2016年12月13日18:34:32 -------------------------------- 最近一段时间遇到一些润乾报表的应用在linux系统下面乱码的问题,最后检查后都发现是客户的li ...
- windows下使用pip安装python的第三方lxml库
lxml是Python语言里和XML以及HTML工作的功能最丰富和最容易使用的库.lxml库的安装和python其他第三方库的安装方法是一样的,只是可能由于一些细节上的失误导致安装失败. 工具 Pyt ...
- 【Phylab2.0】Alpha版本项目展示
团队成员 冯炜韬(PM)http://www.cnblogs.com/toka 岳桐宇(后端)http://www.cnblogs.com/mycraftmw 杨子琛(测试&LaTeX)htt ...
- apache 多网站日志配置禁止ip访问
#禁止IP访问服务器AcceptFilter http noneAcceptFilter https none<VirtualHost 192.168.1.220>ServerName 1 ...
- Fedora 24 Gnome Boxes 无法ping通网络
安装Fedora 24在试用虚拟机时发现无法ping通外网. 我傻傻地以为是软件问题. 问题描述: 尝试ping程序来测试网络连通性: (我之前也是ping百度,后来在为了少打字百度了一些比较短的域名 ...
- 与或左移右移操作在ARM寄存器配置中的作用
逻辑运算: 与运算&:与0清零 清零用与运算 或运算 |:或1置一 置一用或运算 异或 ^:不同为1 /*****单个寄存器清零置一*************************** ...
- [Linux] Linux指令汇总(持续更新中...)
写在前面: 以前真心没有玩过Linux系统,总感觉整天摆弄Linux的同学都是大牛.如今,在公司里实习需要远程登录Linux服务器,所有的代码都要在开发板上完成,所以被逼无奈也不得不定下心来好好学学L ...
- XHTML的规则
以正确的DOCTYPE和命名空间开始文档 使用meta内容元素声明你的字符编码 用小写字母写所有元素和属性名称 给所有属性值加引号 给所有属性赋一个值 关闭所有标签 用空格和斜杠关闭“空”标签 不要在 ...