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

并发执行

并发执行,不可避免地产生了多个进程对同一个共享资源访问,造成了资源的争夺。
操作系统第四章:2.进程同步

进程的同步和互斥
操作系统第四章:2.进程同步
操作系统第四章:2.进程同步

同步与互斥的区别与联系

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

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

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

解决并发访问临界资源的问题
操作系统第四章:2.进程同步
程序常见问题:使用大量while语句,造成忙等待(浪费CPU时间)
优先级反转:低优先级进程先进入临界区,高优先级进程一直忙等

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

使用信号量机制实现同步

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

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

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

信号量的定义

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

二元信号量的机制

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

应用时应注意:
• 每个进程中用于实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。
• P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。
• 互斥信号量的初值一般为1。
操作系统第四章:2.进程同步

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

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

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

信号量的应用

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

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

操作系统第四章:2.进程同步
优点:
• 简单,而且表达能力强(用P.V操作可解决任何同步互斥问题)
缺点:• 不够安全;P.V操作使用不当会出现死锁;遇到复
杂同步互斥问题时实现复杂

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

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

共享内存

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

经典进程同步问题

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

(1)生产者-消费者问题
操作系统第四章:2.进程同步

(2)读者-写者问题
操作系统第四章:2.进程同步
行为分析

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

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

确定临界资源:
• Data, readcount

操作系统第四章:2.进程同步
操作系统第四章:2.进程同步
拓展性思考
操作系统第四章:2.进程同步
写者优先含义解释:只要来了写者,在当前读者进程结束之后立刻执行写者,而不是让读者进程继续进入。

(3)哲学家就餐问题
操作系统第四章:2.进程同步
解决方案:
操作系统第四章:2.进程同步