最经典的关于PV操作的解释说明

  不知道各位有没有感觉,计算机方面的考试,操作系统那块似乎PV操作经常考,这一方面说明它的重要,另一方面也说明它不容易理解,出错的人很多,下面就举几个经典的例子来帮助大家学习,也与诸位同进步。

一,PV操作简介

  PV两个字母是荷兰文 P asseren(通过),V rijgeven(释放)的简称。

   PV操作与信号灯的处理相关,P表示通过的意思,V表示释放的意思。所谓信号灯,实际上就是用来控制进程状态的一个代表某一资源的存储单元。例如,P1和P2是分别将数据送入缓冲B和从缓冲B读出数据的两个进程,为了防止这两个进程并发时产生错误,狄克斯特拉设计了一种同步机制叫“PV操作”,P操作和V操作是执行时不被打断的两个操作系统原语。执行P操作P(S)时信号量S的值减1,若结果不为负则P(S)执行完毕,否则执行P操作的进程暂停以等待释放。执行V 操作V(S)时,S的值加1,若结果不大于0则释放一个因执行P(S)而等待的进程。对P1和P2可定义两个信号量S1和S2,初值分别为1和0。进程 P1在向缓冲B送入数据前执行P操作P(S1),在送入数据后执行V操作V(S2)。进程P2在从缓冲B读取数据前先执行P操作P(S2),在读出数据后执行V操作V(S1)。当P1往缓冲B送入一数据后信号量S1之值变为0,在该数据读出后S1之值才又变为1,因此在前一数未读出前后一数不会送入,从而保证了P1和P2之间的同步。PV操作属于进程的低级通信。

具体定义如下:

    P(S):①将信号量S的值减1,即S=S-1;

           ②如果S30,则该进程继续执行;否则该进程置为等待状态,排入等待队列。

    V(S):①将信号量S的值加1,即S=S+1;

           ②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。

二,几个关于PV操作比较经典的例子

1.大学操作系统 中的经典例子

  P就是请求资源,V就是释放资源。
  例如一个司机与售票员的例子
  在公共汽车上,为保证乘客的安全,司机和售票员应协调工作:
  停车后才能开门,关车门后才能行车。用PV操作来实现他们之间的协调。
  S1:是否允许司机启动汽车的变量
  S2:是否允许售票员开门的变量
  driver()//司机进程
  {
  while (1)//不停地循环
  {
  P(S1);//请求启动汽车
  启动汽车;
  正常行车;
  到站停车;
  V(S2); //释放开门变量,相当于通知售票员可以开门
  }
  }
  busman()//售票员进程
  {
  while(1)
  {
  关车门;
  V(S1);//释放开车变量,相当于通知司机可以开车
  售票
  P(S2);//请求开门
  开车门;
  上下乘客;
  }
  }
  注意:busman() driver() 两个不停循环的函数

2.仓库保管员的例子

   某工厂仓库有一名保管员,该仓库可存放n箱零件。该工厂生产车间有m名工人,只要仓库空闲,工人将生产好的整箱零件放入仓库,并由保管员登记入库数量;该 工厂销售部有k名销售员,只要仓库库存数能满足客户要求,便可提货,并由保管员登记出库数量。规定工人和销售员不能同时进入仓库,但是工人和工人,销售员 和销售员可以同时进入仓库,其工作流程如下图所示。

 

这是一道2005年的系统分析师德考题,答案有兴趣搜搜看。

 

3.其他可参考《操作系统pv操作(pv金典)》

  • 32
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
操作系统中的PV操作是指进程之间通过信号量来实现同步和互斥的一种机制。PV操作主要包括信号量的P操作和V操作。 P操作又称为申请操作。当进程需要使用一个资源时,它需要执行P操作。P操作会检查该资源的信号量值,若值大于0,则表示资源可用,进程可以继续执行,并将信号量值减1;若值等于0,则表示资源不可用,进程需要等待。 V操作又称为释放操作。当进程释放一个资源时,它需要执行V操作。V操作会将该资源的信号量值加1。如果有其他进程正在等待该资源,V操作会唤醒其中一个进程,使其继续执行。 下面通过一个简单的例子来说明PV操作的使用: 假设有两个进程P1和P2,它们都需要访问一个临界资源,同时只能有一个进程访问该资源。 1. 初始化一个二进制信号量sem,初始值为1,表示资源可用。 2. P1进程执行时,先执行P操作,检查sem的值。由于sem的值为1,P1可以继续执行,sem的值变为0,表示资源已被占用。 3. P1进程访问资源进行操作。 4. P1进程操作完成后,执行V操作,将sem的值加1。由于没有其他进程等待该资源,操作结束。 5. P2进程执行时,先执行P操作,检查sem的值。由于sem的值为1,P2可以继续执行,sem的值变为0,表示资源已被占用。 6. P2进程访问资源进行操作。 7. P2进程操作完成后,执行V操作,将sem的值加1。由于没有其他进程等待该资源,操作结束。 通过PV操作的使用,可以实现进程之间的同步和互斥。只有当资源可用时,进程才能访问该资源,否则需要等待。这样可以有效避免进程之间的冲突和竞争。对于并发程序的正确执行具有重要意义。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值