学习笔记——操作系统_PV操作与Linux内核信号量

这篇文章参考了如下内容:

http://wenku.baidu.com/view/42a5704ccf84b9d528ea7ac0.html

http://wenku.baidu.com/view/71d778fafab069dc502201bc.html

http://zhwen.org/xlog/?p=165

http://blog.chinaunix.net/uid-21273878-id-1828718.html

http://blog.csdn.net/leves1989/article/details/3305609(详细介绍了PV操作)

PV操作

首先应弄清PV操作的含义

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

①将信号量S的值减1,即S=S-1;// 系统获得资源后的资源数目
②如果S>=0,表示系统中有资源存在,则该进程继续执行;否则该进程置为等待状态,排入等待队列。注意这儿是大于等于0,因为先进行了减1操作;
    V(S):

①将信号量S的值加1,即S=S+1;// 当前进程释放了一个资源
②如果S>0,则该进程继续执行;否则表示有其他进程在等待该资源,需要释放等待队列中等待信号量的进程,同时该进程继续执行。

【说明】这儿是大于0,说明现在系统中起码有一个资源,这儿为什么不执行一下调度程序,而是在资源S小于等于0调度呢?

因为在资源释放后大于0,说明系统中没有其他进程在等待该资源,则进程是没有权利进行调度的。

如果进程释放资源后,仍然是小于等于0,说明有多个进程在等待资源,这个时候就执行调度。

PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥。

PV操作属于进程的低级通信。

  • 对于互斥操作——M个进程访问N个资源,且M>N,则需要进行互斥操作,即让有些进程进入等待队列,解决死锁问题;互斥的时候,只要设置一个信号量,赋于初值;
  • 对于同步操作——A进程生产出东西给B进程用,A和B进程之间就要同步一下;同步的时候需要设置两个信号量在A和B之间同步处理

信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。

当它的值大于0时,表示当前可用资源的数量;

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

利用信号量和PV操作实现进程互斥的一般模型是:
进程P1              进程P2           ……          进程Pn
……                  ……                           ……
P(S);              P(S);                         P(S);
临界区;             临界区;                        临界区;
V(S);              V(

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值