操作系统-进程同步笔记(二)

信号量
P操作,V操作
解决临界问题的原方法,实现对共享变量操作的原子性
1、整型信号量
表示资源数目的整形量S

wait(s){
while(s<=0);
s=s-1;
}
signal(s){
s=s+1;
}

未遵循“让权等待”
使进程处于“忙等”状态
2、记录型信号量
不存在·“忙等”现象
代表资源数目的整型变量valuedai
进程链表L
wait操作
S.value<0,该资源已分配完毕
调用block原语,进行自我阻塞
遵循了“让权等待”的准则
signal操作,表示进程释放一个资源,若加1后仍然是S.value<=0,表示在S.L中仍有等待该资源的进程被阻塞,因此还需要调用wakeup原语

3、利用信号量实现同步
S为实现进程P1,P2同步的·公共信号量
P2要用P1的结果
所以,只有x执行完,y语句才能执行
当进程P1中X先执行完
执行v操作,把p2从阻塞队列放回就绪队列
当P2得到处理机时,就继续执行操作

4、利用信号量实现进程同步
S为实现进程P1P2互斥的信号量,
每次只允许一个进程进入临界区,S的初值为1
把临界区至于P(S)和V(S)之间
可实现两个进程对临界资源的访问

互斥是不同进程对同一信号量的PV操作
要用 前面P一下这个资源
提供 后面V一下这个资源
紧夹使用互斥的那个资源,中间不能有其他冗余代码

5、使用信号量实现前驱关系

semaphore a1=a2=b1=b2=c=d=e=0;//初始化信号量
S1(){
...;
v(a1);v(a2);//S1已经运行完成
}
S2(){
P(a1);//检查S1是否运行完成
...;
v(b1);v(b2);//S2已经运行完成

}
S3(){
P(a2);//检查S1是否运行完成
...;
v(c);//S3已经运行完成

}
S4(){
P(b1);//检查S1是否运行完成
...;
v(d);//S4已经运行完成

}
S5(){
P(b2);//检查S2是否运行完成
...;
v(e);//S5已经运行完成

}
S6(){
P(c);//检查S3是否运行完成
P(d);//检查S3是否运行完成
P(e);//检查S5是否运行完成
...

}

6.分析进程同步和互斥问题的方法步骤
(1)关系分析
找出进程数,分析他们之间的同步和互斥关系
(2)整理思路
根据进程的操作流程确P操作和V操作的大致顺序
(3)设置信号量
设置信号量,确定初值,完善整理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值