美文网首页
操作系统的pv操作

操作系统的pv操作

作者: 尘埃里的玄 | 来源:发表于2022-07-27 16:09 被阅读0次

1.什么是PV操作
  PV操作是由P操作原语和V操作原语组成(原语是不可[中断的过程),操作对象是信号量。具体的:
  P(S):① 将信号量S的值减1,即S=S-1;② 如果S>=0,则该进程继续执行;否则进程进入等待队列,置为等待状态。
  V(S):① 将信号量S的值加1,即S=S+1;② 如果S>0,则该进程继续执行;否则释放等待队列中第一个等待信号量的进程。(因为将信号量加1后仍然不大于0,则表示等待队列中有阻塞的进程。)

2.PV操作的意义
  使用PV操作和信号量可以实现进程间的同步和互斥。

3.什么是信号量
  信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号的下一个进程。信号量的值与相应资源的使用情况有关。当信号量的值大于0时,表示当前可用资源的数量;当信号量的值小于0时,其绝对值表示当前阻塞等待使用该资源的进程个数。(信号量值只能用PV操作来改变。)
  一般的,当信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须阻塞等待别的进程释放该类资源才能继续运行。而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S<=0,表示此刻有进程正在阻塞等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。

4.PV操作实例—生产者消费者问题
4.1 一个生产者,一个消费者,公用一个缓冲区
(1)定义两个同步信号量
  emtpy表示缓冲区是否为空,初始值为1;full表示缓冲区是否为满,初始值为0。
(2)生产者-消费者进程伪代码

while(TRUE)
{
    生产一个产品;
    P(empty);
    将一个产品送入缓冲区;
    V(full);
}
//消费者进程
while(TRUE)
{
    P(full);
    从缓冲区取出一个产品;
    V(empty);
    消费取出的产品;
}

4.2 一个生产者,一个消费者,公用n个环形缓冲区
(1)定义两个同步信息量
  empty表示缓冲区是否为空,初始值为n;full表示缓冲区是否为满,初始值为0。
  设缓冲区的编号为1~n-1,定义两个指针in和out,分别是生产者和消费者使用的指针,指向下一个可用缓冲区。
(2)生产者-消费者进程伪代码

//生产者进程
while(TRUE)
{
    生产一个产品;
    P(empty);
    将一个产品送入缓冲区in;
    in = (in+1) mod n;
    V(full);
}
//消费者进程
while(TRUE)
{
    P(full);
    从缓冲区(out)取出一个产品;
    out = (out+1) mod n;
    V(empty);
    消费取出的产品;
}

4.3 多个生产者,多个消费者,公用n个环形缓冲区
(1)定义两个同步信息量
  empty表示缓冲区是否为空,初始值为n;
  full表示缓冲区是否为满,初始值为0;
  mutex1表示生产者进程之间的互斥信号量;
  mutex2表示消费者进程之间的互斥信号量;
  设缓冲区的编号为1~n-1,定义两个指针in和out,分别是生产者和消费者使用的指针,指向下一个可用缓冲区。

//生产者进程
while(TRUE)
{
    生产一个产品;
    P(empty);
    P(mutex1);
    将一个产品送入缓冲区in;
    in = (in+1) mod n;
    V(mutex1);
    V(full);
}
//消费者进程
while(TRUE)
{
    P(full);
    P(mutex2);
    从缓冲区(out)取出一个产品;
    out = (out+1) mod n;
    V(empty);
    V(mutex2);
    消费取出的产品;
}

相关文章

  • java多线程实现生产者消费者问题

    思想可以参考操作系统里的pv操作实现生产者消费者问题

  • 多线程打印abc问题

    这道题让我想到了操作系统中学的pv操作,下面我先写出这道题pv操作的伪代码。 下面是java写的代码,可以看到两者...

  • 分享两个用PV操作(signal,wait原语)实现的操作系统综

    PV操作是操作系统设计中一个核心的概念,PV操作同时与信号量紧密相连。很多经典的问题讨论,由引入了信号量机制而得到...

  • 操作系统|前驱图中的PV操作

    操作系统的进程管理内容 PV操作是实现进程同步与互斥的常用方法。 P操作的定义:S=S-1,如S>=0,则执行P操...

  • PV操作经典问题

    PV(wait/singal)在考操作系统的时候经常被问到,这篇小文就整理一下几个常见的PV问题。 1. 生产者-...

  • 操作系统基础知识--01 计算机操作系统概述

    主要考点: 操作系统的作用 进程管理及PV 死锁 存储系统 磁盘管理 文件系统

  • PV原语

    概念 PV原语通过操作信号量来完成进程间的同步和互斥。信号量由操作系统来维护 原语 P原语 为阻塞原语,负责把当前...

  • PV操作

    备考系统分析师,学习到PV操作,简单记录一下:

  • PV操作

    PV操作是利用信号量机制来实现的一种有效的进程同步与互斥工具,可以实现资源的互斥使用。PV操作属于低级通信原语,使...

  • Linux实用工具-lvm(2)

    基本操作-pv 创建pv 查看pv 基本操作-vg 两种创建vg方式 创建vg,默认PE大小为4M 设置PE大小为...

网友评论

      本文标题:操作系统的pv操作

      本文链接:https://www.haomeiwen.com/subject/ddsxwrtx.html