博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于p操作和v操作的理解
阅读量:2441 次
发布时间:2019-05-10

本文共 1105 字,大约阅读时间需要 3 分钟。

操作系统之PV操作

今天在做操作系统老师布置的操作系统作业,但是碰到了一个有关pv操作的问题,由于对pv操作的理解不是很透彻,所以我查阅了很多资料,下面来简单的通俗的介绍一下pv操作
1、信号量
  公用信号量:实现进程间的互斥,初值=1或资源的数目
  私用信号量:实现进程间的同步,初值=0或某个整数
2、信号量S的物理意义:S>=0时表示某资源的可用数,s<0时其绝对值表示阻塞队列中等待该资源的进程数。P、V操作是实现进程同步与互斥的常用方法。
3、P操作表示申请一个资源,V操作表示释放一个资源。
P操作的定义:S=S-1,若S>=0,则执行P操作的进程继续执行;若S<0,则置该进程为阻塞状态,并将其插入阻塞队列。
Procedure P(Var S:Semaphore);
Begin
S:=S-1;
If S<0 then w(S) {执行P操作的进程插入等待队列}
End;
V操作定义:S=S+1,若S>0则执行V操作的进程继续执行;若S<0,则从阻塞状态唤醒一个进程,并将其插入就绪队列,执行V操作的进程继续执行。
Procedure V(Var S:Semaphore);
Begin
S:=S+1
If S<=0 then R(s) {从阻塞队列中唤醒一个进程}
End;
利用PV操作实现进程的互斥
令信号量mutex的初值为1,当进入临界区时执行P操作,退出临界区时执行V操作。这样利用PV操作实现进程互斥的代码段如下:
P(mutex)
  临界区
V(mutex)
所以,下面我们来看看这道题,如下图,请用并行语句和P、V操作描述图中任务执行过程。
我写的执行过程是这样的,希望大家多多指教
int f1=0;   //表示进程P1是否执行完毕int f2=0;   //表示进程P2是否执行完毕int f3=0;   //表示进程P3是否执行完毕int f4=0;   //表示进程P4是否执行完毕int f5=0;   //表示进程P5是否执行完毕int f6=0;   //表示进程P6是否执行完毕main(){	cobegin	p1();	p2();	p3();	p4();	p5();	p6();	coend}p1(){	...	v(f1);	v(f1);}p2(){	p(f1);	...	v(f2);}p3(){	p(f1);	...	v(f3);}p4(){	p(f2);	...	v(f4);	v(f4);}p5(){	p(f4);	...	v(f5);}p6(){	p(f3);	p(f4);	...	v(f6);}p7(){	p(f5);	p(f6);	...}
你可能感兴趣的文章
轻松搞定Java内存泄漏(转)
查看>>
Java学习之值传递(转)
查看>>
Java 范型攻略篇(转)
查看>>
linux中crontab命令(转)
查看>>
牛人请进 小弟跪求(转)
查看>>
Linux版本凌乱痛失市场(转)
查看>>
大家好,新学生。 请问怎么升级Redhat9.0 kernel 2.4.X-->2.6.18 的详细过程(转)
查看>>
FreeBSD6.1+无线+永中......桌面安装【附笔记】(转)
查看>>
adsl设置(转)
查看>>
Wii将有一个可升级的Linux操作系统(转)
查看>>
Linux机为先锋智能机和PDA06销量大(转)
查看>>
Oracle与SQL Server在企业应用中的比较(转)
查看>>
Unix类操作系统入门(转)
查看>>
让FreeBSD使用ntpd同步时间(转)
查看>>
用cat命令查看文件内的特殊字符(转)
查看>>
debian sid下vmware不能运行一则(转)
查看>>
Linux操作系统套接字编程的5个隐患(转)
查看>>
Ubuntu Linux:定制Ubuntu安装CD(转)
查看>>
调查显示:企业级Linux用户不断攀升(转)
查看>>
Ubuntu/Linux入门介绍-dpkg(转)
查看>>