操作系统第四章:2.进程同步

并发执行

并发执行,不可避免地产生了多个进程对同一个共享资源访问,造成了资源的争夺。
在这里插入图片描述

进程的同步和互斥
在这里插入图片描述
在这里插入图片描述

同步与互斥的区别与联系

互斥:某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。互斥无法限制访问者对资源的访问顺序,即访问是无序访问。

同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有对资源的写入的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

机制设计上应遵循的原则
空闲让进
忙则等待
有限等待
让权等待

解决并发访问临界资源的问题
在这里插入图片描述
程序常见问题:使用大量while语句,造成忙等待(浪费CPU时间)
优先级反转:低优先级进程先进入临界区,高优先级进程一直忙等

在这里插入图片描述在这里插入图片描述

使用信号量机制实现同步

信号量是Dijkstra1965年提出的一种方法,它使用一个整型变量来累计唤醒次数,供以后使用。在他的建议中引入了一个新的变量类型,称作信号(semaphore)。

Dijkstra建议设立两种操作,P(S)和V(S)操作。P、V分别是荷兰语的test(proberen)和increment(verhogen)。P操作也称为semWait或Down操作,V操作也称为semSignal或Up操作。PV操作属于进程的低级通信。

信号量是一类特殊的变量,程序对其访问都是原子操作,且只允许对它进行P(信号变量)和V(信号变量)操作。

信号量的定义

在这里插入图片描述
在这里插入图片描述

二元信号量的机制

通常使用二元信号量的PV操作实现两个进程的互斥。

应用时应注意:
• 每个进程中用于实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。
• P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。
• 互斥信号量的初值一般为1。
在这里插入图片描述

  • semWait 操作(P操作)使信号量减1。若值为负,则执行semWait的进程被阻塞。否则进程继续执行。

  • semSignal操作(V操作)使信号量加1。若值小于或等于零,则被semWait操作阻塞的进程被解除阻塞。

S.value为正时表示资源的个数
S.value为负时表示等待进程的个数

信号量的应用

在这里插入图片描述
在这里插入图片描述

进程同步/互斥类问题求解方法

在这里插入图片描述
优点:
• 简单,而且表达能力强(用P.V操作可解决任何同步互斥问题)
缺点:• 不够安全;P.V操作使用不当会出现死锁;遇到复
杂同步互斥问题时实现复杂

进程间通信(Inter-Process-Comm)

在这里插入图片描述

共享内存

在这里插入图片描述

经典进程同步问题

 生产者-消费者问题(the producer-consumer problem)
 读者-写者问题(the readers-writers problem)
 哲学家进餐问题(the dining philosophers problem)

(1)生产者-消费者问题
在这里插入图片描述

(2)读者-写者问题
在这里插入图片描述
行为分析

读进程的行为:
• 系统中会有多个读进程同时访问共享数据。
• 可分为三类:第一个进入的读进程(占有资源),最后一个离开的读进程(释放资源)和其他读进程。
• 需要设置一个计数器readcount来记录读进程的数目。
写进程的行为:排他性的使用资源。

确定同步与互斥关系:
• 读者-读者:共享Data, 互斥访问readcount
• 读者-写者:互斥访问Data
• 写者-写者:互斥访问Data

确定临界资源:
• Data, readcount

在这里插入图片描述
在这里插入图片描述
拓展性思考
在这里插入图片描述
写者优先含义解释:只要来了写者,在当前读者进程结束之后立刻执行写者,而不是让读者进程继续进入。

(3)哲学家就餐问题
在这里插入图片描述
解决方案:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值