在 *** 作系统中,P *** 作和V *** 作各自的动作是如何定义的?

在 *** 作系统中,P *** 作和V *** 作各自的动作是如何定义的?,第1张

信号量的值减1,即S=S-1

②如果S≥0,则该进程继续执行

如果S<0,则把该进程的状态置为阻塞态,把相应的PCB连入该信号量队列的末尾,并放弃处理机,进行等待(直至其它进程在S上执行V *** 作,把它释放出来为止)。

V *** 作顺序执行下述两个动作:

①S值加1,即S=S+1

②如果S>0,则该进程继续运行

如果S≤0,则释放信号量队列上的第一个PCB(即信号量指量指针项所指向的PCB)所对应的进程(把阻塞态改为就绪态),执行V *** 作的进程继续运行。

1.PV *** 作的含义:PV *** 作由P *** 作原语和V *** 作原语组成(原语是不可中断的过程),对信号量进行 *** 作,具体定义如下:

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

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

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

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

2.PV *** 作的意义:我们用信号量及PV *** 作来实现进程的同步和互斥。PV *** 作属于进程的低级通信。

什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV *** 作来改变。

3,  一般来说,信号量S³0时,S表示可用资源的数量。执行一次P *** 作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V *** 作意味着释放一个单位资源,因此S的值加1;若S£0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。

PV *** 作与信号量的处理相关,P表示通过的意思,V表示释放的意思。PV *** 作是典型的同步机制之一,用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。用P V *** 作实现进程同步时,调用P *** 作测试消息是否到达,调用V *** 作发送消息。对一个信号量变量可以进行两种原语 *** 作:p *** 作和v *** 作,定义如下:procedure p(var s:samephore){s.value=s.value-1if (s.value<0) asleep(s.queue)}procedure v(var s:samephore){s.value=s.value+1if (s.value<=0) wakeup(s.queue)}

这个是涉及 *** 作系统这门课程中的关于 P、V *** 作及其信号量 sem *** 作的内容。你可以参考教材中的 P *** 作及其 V *** 作,编写该程序。内容看着相当地亲切,但是毕竟很长时间没有编写程序了,要编写的话,还得花费相当的时间给你编写和调试呢,不是一下子就能够编写出来的。

你可以看看 LINUX 系统中,应该还有很多对应的 .h 头文件,我记得其中应该有 sem.h ,该头文件包含了信号量的定义等。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7506612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存