(3)--第3章 同步与通信操作系统原理.ppt
《(3)--第3章 同步与通信操作系统原理.ppt》由会员分享,可在线阅读,更多相关《(3)--第3章 同步与通信操作系统原理.ppt(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本章目录3.1进程的同步与互斥3.2经典进程同步问题3.3管程3.4进程通信3.1 进程的同步与互斥3.1.1基本概念3.1.2硬件同步机制3.1.3信号量机制3.1.1 基本概念 1.临界资源凡是以互斥方式使用的共享资源都称为临界资源(Critical Resource)。临界资源具有一次只允许一个进程使用的属性。例如,计算机的许多硬件资源都被处理成临界资源,如打印机、磁带机等。如果打印机允许若干用户同时打印,那么打印结果会混淆在一起,不易分辨,给用户带来许多不便。系统中还有许多软资源,如内存中的公共数据结构、共享变量、表格、队列、栈等也被处理成临界资源,以避免多个进程对其访问时出现问题。3
2、.1.1 基本概念 2.临界区每个进程中,访问临界资源的那段代码称为临界区(Critical Section),简称CS。如果能保证各进程互斥地进入自己的临界区,便可实现各进程对临界资源的互斥访问。把申请进入临界区的那段代码称为进入区,如果可以进入,则设置“正在访问”标志。相应地,在临界区之后,用于退出对临界区访问的那段代码称为退出区,此时将临界区的标志恢复为“未被访问”。进程中,除上述进入区、临界区及退出区之外的那部分代码称为剩余区。3.1.1 基本概念 3.互斥准则(1)空闲让进。当没有进程在临界区时,任何需要进入临界区的进程都允许立即进入。(2)忙则等待。在共享同一对象的所有进程中,一次
3、只能有一个进程进入临界区。其它要求进入临界区的进程只能等待。(3)有限等待。任何一个进程经有限时间等待后都能进入临界区,以免陷入“死等”状态。(4)让权等待。当一个进程不能进入临界区时要立即阻塞自己,释放处理机让其它进程使用,避免“忙等”。3.1.2 硬件同步机制1.测试与设置指令booleanTest_and_Set(inti)if(i=0)i=1;returntrue;elsereturnfalse;3.1.2 硬件同步机制设lock为全局变量,初始值为0,表示无人进入。利用Test_and_Set指令,即可实现对临界区的加锁与解锁。dowhile(!Test_and_Set(lock)d
4、oskip;/循环等待;entrysectioncriticalsection;lock=false;/exitsectionremaindersection;while(true);3.1.2 硬件同步机制2.交换指令voidExchange(intregister,intmemory)inttemp;temp=memory;memory=register;register=temp;3.1.2 硬件同步机制设lock为全局变量(初值为0,表示无人进入),每个进程设一个局部变量key。利用Exchange指令,可实现对临界区的加锁与解锁。dointkey=1;while(key=1)Exch
5、ange(key,lock);criticalsection;Exchange(key,lock)remainersection;while(true);3.1.2 硬件同步机制3.机器指令方法的优缺点使用专门的机器指令实施互斥有以下优点:(1)适用于在单处理机或共享内存的多处理机上的任何数目的进程。(2)非常简单且易于证明。(3)可用于支持多临界区,每个临界区可以用其自己的变量定义。同样也存在一些严重的缺点:(1)使用了忙等待。(2)可能饥饿。(3)可能死锁。3.1.3 信号量机制著名的荷兰计算机学者Dijkstra经过长期的操作系统研究与设计,于1965年提出了一种同步机制信号量机制。该机
6、制由一个称为信号量(Semaphore,也译为“信号灯”)的特殊变量和两个被命名为P、V操作的原语(分别对应wait()和signal()组成。1.整型信号量最初由Dijkstra把信号量定义为一个整型量,代表资源数目或可同时使用该资源的进程个数。信号量的初值为非负数,除初始化外,仅能通过两个标准的原子操作wait(S)和signal(S)来访问和修改。wait(S)和signal(S)操作可描述为:semaphoreS;wait(S):whileS0donoopS=S1;signal(S):S=S+1;在该信号量机制的wait操作中,只要信号量S0,就会不断地测试,直到S0。因此,该机制并未
7、遵循“让权等待”的准则,而是使进程一直处于“忙等”状态。2.记录型信号量该信号量机制,是一种不存在“忙等”现象的进程同步机制。但在采取了“让权等待”的策略后,又会出现多个进程等待访问同一临界资源的情况。为此,在信号量机制中,除了需要一个用于代表资源数目的整型变量count外,还应增加一个进程链表指针queue,用于链接上述所有等待进程。此信号量定义如下:typedefstructintcount;queueType*queue;semaphore;2.记录型信号量wait(S)操作可描述为:semaphoreS;voidwait(S)S.count;if(S.count0)block(S.qu
8、eue);/阻塞该进程链接到S.queue队列;signal(S)操作可描述为:voidsignal(S)S.count+;if(S.count=0)wakeup(S.queue);3.信号量的使用(1)用于实现互斥:例如,用于n个进程的临界区之间互斥,设n个进程共享一个信号量mutex,初值为1。为了实现进程互斥地进入临界区,只需把临界区CS置于wait(mutex)和signal(mutex)之间。任一进程Pi的框架为:voidPi()semaphoremutex=1;/信号量初值为1;dowait(mutex);criticalsection;signal(mutex);remainde
9、rsection;while(true);3.信号量的使用(2)用于实现同步:例如,有两个并发进程P1、P2,共享一个公共信号量s,初值为0。P1执行的程序中有一条S1语句,P2执行的程序中有一条S2语句。而且,只有当P1执行完S1语句后,P2才能开始执行S2语句。对这种简单的同步问题,可以很容易地用信号量机制解决。进程间的同步控制描述如下:semaphoreS=0;/信号量初值为0;进程P1程序框架如下:voidP1()S1;signal(S);voidmain()parbegin(P1(),P2());进程P2程序框架如下:voidP2()wait(S);S2;3.2 经典进程同步问题3.
10、2.1生产者消费者问题3.2.2读者写者问题3.2.3哲学家就餐问题3.2.1 生产者-消费者问题生产者消费者(producerconsumer)问题是一个著名的进程同步问题。它描述的是:有若干生产者进程,假设k(k0)个,在生产产品,并将这些产品提供给m(m0)个消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池(假设组织成环形),生产者进程将它所生产的产品放入缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步。假定它们的约束条件是:(1)当缓冲池中有空缓冲区时,允许
11、任一生产者进程把它的产品放入。(2)当缓冲池中无空缓冲区时,则试图将产品放入缓冲池的任何生产者进程必须等待。(3)当缓冲池中有产品时,允许任一个消费者进程把其中的一个产品取走消费。(4)当缓冲池中没有产品时,试图从该池内取出产品的任何消费者进程必须等待。3.2.1 生产者-消费者问题对所有生产者和消费者进程来说,把缓冲池看成一个整体,因此缓冲池是临界资源,即任何一个进程在对池中某个缓冲区进行“放”或“取”操作时须和其他进程互斥执行。首先定义信号量如下:(1)信号量mutex,初值为1,用于控制互斥地访问缓冲池。(2)信号量full,初值为0,用于资源计数。full值表示当前缓冲池中“满”缓冲区
12、的个数。(3)信号量empty,初值为n,用于资源计数。empty值表示当前缓冲池中“空”缓冲区的个数。3.2.1 生产者-消费者问题/*programproducerconsumer*/constintn;/buffersizeintin,out=0/缓冲区首空、首满指针semaphoreempty=n;full=0;mutex=1;voidproducer()while(true)生产一个产品;wait(empty);wait(mutex);将产品放入缓冲区;in=(in+1)%n;signal(mutex);signal(full);3.2.1 生产者-消费者问题voidconsumer
13、()while(ture)wait(full);wait(mutex);从缓冲区中取产品;out=(out+1)%n;signal(mutex);signal(empty);消费该产品;voidmain()parbegin(producer(),consumer();3.2.2 读者-写者问题读者写者问题描述如下:有一个数据区(数据区可以是一个文件、一块内存空间或一组寄存器)被多个用户共享,其中一部分用户是读者,另一部分是写者。我们规定:读者对数据区是只读的,而且允许多个读者同时读;写者对数据区是只写的,当一个写者正在向数据区写信息的时候,不允许其他用户使用,无论是读者还是写者。即保证一个写者
14、进程必须与其他进程互斥地访问共享对象。也就是说,解决该问题必须满足的条件如下:(1)任意多个读者可以同时读;(2)任一时刻只能有一个写者可以写;(3)如果写者正在写,那么读者就不能读。3.2.2 读者-写者问题读者优先的解决方案:首先,使用一个互斥信号量wmutex,实现读者与写者、写者与写者之间的互斥。由于读者可以同时访问数据区,因此我们让第一个准备进入临界区的读者,通过wait(wmutex)强占临界资源,以便排斥写者访问。当最后一个读者离开临界区时,通过signal(wmutex)将临界资源释放,以便其它用户使用。其次,设计一个专为读者共享的变量readcounter,用来记录读数据区的
15、人数。readcounter应视为临界资源,故应有一个互斥信号量,定义为rmutex。3.2.2 读者-写者问题读者优先/*programreadersandwriters*/intreadcounter;semaphorewmutex=1;semaphorermutex=1;/对readcounter的互斥访问voidreader()while(true)wait(rmutex);readcounter+;if(readcounter=1)wait(wmutex);signal(rmutex);readunit();wait(rmutex);readcounter;if(readcount=
16、0)signal(wmutex);signal(rmutex);3.2.2 读者-写者问题读者优先voidwriter()while(true)wait(wmutex);writeunit();signal(wmutex);voidmain()readcounter=0;parbegin(reader(),writer();3.2.2 读者-写者问题写者优先/*programreadersandwriters*/intreadcount,writecount;semaphorex=1,y=1,z=1,wsem=1,rsem=1;voidreader()while(true)wait(z);wa
17、it(rsem);wait(x);readcount+;if(readcount=1)wait(wsem);signal(x);signal(rsem);signal(z);readunit();wait(x);readcount;if(readcount=0)signal(wsem);signal(x);3.2.2 读者-写者问题写者优先voidwriter()while(true)wait(y);writecount+;if(writecount=1)wait(rsem);signal(y);wait(wsem);writeunit();signal(wsem);wait(y);write
18、count;if(writecount=0)signal(rsem);signal(y);voidmain()readcount=writecount=0;parbegin(reader(),writer();3.2.3 哲学家就餐问题Dijkstra于1965年首先提出并解决了哲学家就餐问题,该问题也是大量并发控制问题中的一个典型例子。有5位哲学家,他们倾注毕生精力用于思考问题和吃饭。设想他们共同坐在一张放有5把椅子的餐桌前用餐,用餐过后开始思考问题。他们的生活方式可描述为一个单调的循环:思考饥饿用餐再思考。已知餐桌上摆的是面条,桌上放着五根筷子,任意两个哲学家之间有一根,如图32所示。哲学
19、家在思考问题时,并不影响他人。只有当哲学家饥饿的时候,他才试图拿起左、右筷子(一根一根地拿起)。如果筷子已在他人手中,则需等待。饥饿的哲学家只有左右手各拿到一根筷子才可以开始进餐。而且,也只有当他吃完饭后才放下筷子,重新开始思考问题。3.2.3 哲学家就餐问题显然,筷子是一种临界资源。设i号筷子的互斥信号量为chopsticki(i=0,1,2,3,4),初值均为1。3.2.3 哲学家就餐问题semaphorechopstick5=1,1,1,1,1;inti;voidPhilosophers(inti)while(true)think();wait(chopsticki);wait(chop
20、stick(i+1)mod5);eat();signal(chopsticki);signal(chopstick(i+1)mod5);voidmain()parbegin(Philosophers(0),Philosophers(1),Philosopher(2),Philosopher(3),Philosopher(4);3.2.3 哲学家就餐问题显然,上述解决方案可保证不会有两个相邻的哲学家同时进餐,但有可能引起死锁。假如五位哲学家同时饥饿而各自拿起左边的筷子时,就会使五个信号量chopstick均为0;当他们再试图去拿右边的筷子时,都将因无筷子可拿而无限期地等待。对于这样的死锁问题,可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 3-第3章 同步与通信操作系统原理 同步 通信 操作系统 原理
限制150内