操作系统——PV操作

  操作系统这本书里有一章是讲进程的,其中一节讲的进程同步,一开始看的有点懵,尤其里边那几行代码。后来看到个视频里讲解P–V操作,说的就是这个,豁然开朗。
  P–V操作(也称同步操作):
  
  同步机制应该遵循的准则:
  1. 空闲让进
  2. 忙则等待
  3. 有限等待
  4. 让权等待
  
一些概念:
  

  临界资源:诸进程需要互斥方式对其进行共享资源,如打印机、磁带机。
  临界区:每个进程访问临界资源的那段代码。

  P操作(申请资源):也称为down()、wait()操作 使S=S-1,若S<0,进程暂停执行,放入信号量的等待队列。
  V操作(释放资源):也称为up()、signal()操作,使S=S+1,若S<=0,唤醒等待队列的一个进程。

下面以一张仓库搬运工的图来看一下P–V操作是怎么进行的:

这里写图片描述

这整个的工作流程是把A仓库的货物搬到B仓库。
搬运工甲在中转站空闲的时候可以把A仓库的货物搬到中转站,也就是执行P操作。
搬到中转站之后换搬运工乙来执行V操作,把货物搬到B仓库。

这个是单缓冲区,也就是一个缓冲区的,下面来看一下书上的一个经典的进程同步问题:读者—写者问题:

首先这个问题的条件是:

  • 允许多个读者同时执行读操作;
  • 不允许读者、写者同时操作;
  • 不允许多个写者同时操作。

读者优先:

读者来:
   1. 无读者、写者,新读者可以读
   2. 有写者等,但有其他读者正在读,则新读者也可以读
   3. 有写者写,新读者等
写者来:

  1. 无读者,新写者可以写
  2. 有读者,新写者等
  3. 有其他写者,新写者等

它的PV原语可以写成如下:

生产者: 消费者:
生产一个产品; P(s2);
P(s1); P(mute);
P(mute); 从缓冲区取产品;
送产品到缓冲区; V(mute);
V(mute); V(s1);
V(s2); 消费产品;

s1初值为n,s2初值为0,mute(缓冲区资源)初值为1.

先说到这里,理解不深,如果大家有不准确或不清楚的地方可以和小编交流交流。

猜你喜欢

转载自blog.csdn.net/syx8821/article/details/79603958