关于p操作和v操作的理解
来源:互联网 发布:linux内核完全注释4.0 编辑:程序博客网 时间:2024/04/27 15:01
操作系统之PV操作
今天在做操作系统老师布置的操作系统作业,但是碰到了一个有关pv操作的问题,由于对pv操作的理解不是很透彻,所以我查阅了很多资料,下面来简单的通俗的介绍一下pv操作
1、信号量
公用信号量:实现进程间的互斥,初值=1或资源的数目
私用信号量:实现进程间的同步,初值=0或某个整数
私用信号量:实现进程间的同步,初值=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操作的定义: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操作描述图中任务执行过程。
我写的执行过程是这样的,希望大家多多指教
<span style="font-size:14px;">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(){cobeginp1();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);...}</span>
1 0
- 关于p操作和v操作的理解
- P,V操作理解
- 关于P.V.操作
- 信号量的P操作和V操作
- P操作和V操作
- P-V操作理解析疑
- [操作系统]简单理解P,V操作
- P-V操作(信号量的操作)
- P、V操作
- linux p v 操作
- p.v操作
- P、V操作
- 信号量P/V操作
- P V操作
- P,V操作
- P,V操作的历史背景:信号量机制???
- 一个P,V操作的习题
- 我该如何理解信号量机制中的P.V操作?????
- 指数族分布、广义线性模型、逻辑回归前传
- ButterKnife8 使用说明
- 限速QOS样例
- Android添加图片水印
- HashMap的三种遍历方法
- 关于p操作和v操作的理解
- 基于Angularjs实现分页功能
- AJAX无刷新验证技术
- mysql主从复制windows-》linux
- 第十一周项目1——二叉树算法验证(3) 中序线索化二叉树的算法验证
- Linux查看系统信息
- Java中String字符串类的解析
- 常见对象_String类的转换功能
- 单步调试 step into/step out/step over 区别