进程同步互斥中的的PV操作

一、基本概念
1、前言
PV操作是计算机科学的难点也是重点,也许你搞应用软件开发中涉及不到,但是如果搞深层次的系统软件开发或者 搞嵌入式系统方面的操作系统开发肯定会用到。作者通过读取和整理多方面资料尽量给大家一个通俗易懂的梳理 。
2、同步和互斥中的一些概念
这些概念包括什么是同步和互斥?什么是信号量?什么是临界区?什么是临界资源,什么是PV操作等概念。
(1)同步
多个进程的并发执行,每个进程都以各自的,不可预知的速度向前运行,但是需要在某些确定点上进行协调的工作,如下图所示:
在这里插入图片描述
进程A向缓冲区送数据,进程B从缓冲区取数据,当进程B取数据加工时候,必须是进程A完成了向缓冲区送数据的操作,否则进程B必须停下来等待进程A的操作结束。
  可见,进程间的同步是指在系统中一些需要合作,协同工作的进程,这样的相互联系称为进程的同步。
(2)互斥
  进程的互斥是指多个进程因争用临界资源而互斥执行。
  临界资源:在多道程序系统环境中,各个进程可以共享资源,但是有些资源一次只能供一个进程使用,称为临界资源,例如打印机、共享变量和表格等。
  临界区:是进程中对临界资源实施操作的那段程序。
(3)信号量和PV操作
在操作系统中,进程之间经常会存在互斥和同步两种关系,为了有效的处理这两种情况,Dijkstra在1965年提出信号量和PV操作

信号量:是一种特殊的变量,表现形式是一个整数S和一个队列。
P操作: S = S – 1 ,若S < 0 ,进程暂停执行,进入等待队列。
V操作: S = S + 1,若S <= 0,唤醒等待队列中的一个进程。
在这里插入图片描述
信号量的有2中不同的实现方式:
方式一:S>=0,若等于0表示当前没有可用资源,若大于0表示当 前可用的空闲资源个数
方式二:S < 0 ,其绝对值表示正在等待进入临界区的任务个数

二、PV操作原理
1、PV操作原理图
P操作: S = S – 1 ,若S < 0 ,进程暂停执行,进入等待队列。
V操作: S = S + 1,若S <= 0,唤醒等待队列中的一个进程。
在这里插入图片描述
2、单缓冲区的生产者消费者问题
在这里插入图片描述
如果没有PV操作,CPU在执行2个进程的顺序是随机的,那么生产者消费者问题的几种假设情况:

在这里插入图片描述
(1)假设首先执行生产者进程
先执行生产者进程,生产者生产1个产品将其放入缓冲区,缓冲区满了,这时候是没有问题的,但是如果下次CPU再次执行生产者进程并生产了1个产品,并想将其放入缓冲区,由于缓冲区满了,这时候会出现缓冲区溢出的异常。
(2)假设消费者进程先执行
消费者进程先执行,想从缓冲区中取出1个产品进行消费,由于缓冲区没有产品可取,那么将会发生空指针异常。
使用PV操作协调生产者和消费者产生的问题:
(1)先执行生产者进程
在这里插入图片描述
步骤1:生产一个产品
步骤2:S1 = S1 – 1 =0
步骤3:S1 < 0 ? ,
S1=0,继续
步骤4:送产品到缓冲区
步骤5: S2 = S2 + 1
如果再次执行生产者进程,那么S1 = S1 – 1 = 0 – 1 = -1 < 0,进程暂时执行,不会再像缓冲区送产品,进程被挂起放入到等待队列。
如果这时候执行消费者进程,则S2 = 1 – 1 = 0 ,从缓冲区取产品,S1 = -1 + 1 = 0 ,将从队列中唤醒生产者进程送产品到缓冲区,继续消费产品
在这里插入图片描述
(2)先执行消费者进程
先执行消费者进程 S2 = S2 – 1 = 0 – 1 = -1,不能从缓冲区消费产品。
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值