(1.25)--第2章2操作系统原理.ppt
《(1.25)--第2章2操作系统原理.ppt》由会员分享,可在线阅读,更多相关《(1.25)--第2章2操作系统原理.ppt(119页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1经典经典IPC问题问题 Inter-Process-Communication生产者消费者问题生产者消费者问题有界缓冲区问题有界缓冲区问题 哲学家进餐问题哲学家进餐问题多进程同步问题多进程同步问题读者写者问题读者写者问题数据库互斥访问问题数据库互斥访问问题2经典问题:生产者经典问题:生产者-消费者问题消费者问题 生产者与消费者问题生产者与消费者问题 DijkstraDijkstra把广义同步问题抽象成一种把广义同步问题抽象成一种“生产者与消费者问生产者与消费者问题题”(The producer-consumer-The producer-consumer-problemproblem)的抽象
2、模型)的抽象模型.事实上事实上,计算机系统中的许多问题都可计算机系统中的许多问题都可归结为生产者与消费者问题归结为生产者与消费者问题.(1)(1)计算进程和打印进程计算进程和打印进程 计算进程不断产生数据计算进程不断产生数据,是生产者;是生产者;打印进程不断打印数据打印进程不断打印数据,是消费者。是消费者。(2)(2)通信问题通信问题 发消息进程发消息进程 sendsend不断产生消息,是生产者;不断产生消息,是生产者;收消息进程收消息进程 receivereceive不断接收消息,是消费者不断接收消息,是消费者.3经典问题:生产者经典问题:生产者-消费者问题消费者问题同步问题:同步问题:生产
3、者进程不能往满的缓冲区中放东西生产者进程不能往满的缓冲区中放东西消费者进程不能从空的缓冲区中取东西消费者进程不能从空的缓冲区中取东西4经典问题:生产者经典问题:生产者-消费者问题消费者问题情况情况1:1:一个一个bufferbuffer,一个生产者,一个消费者,生产者只生产一,一个生产者,一个消费者,生产者只生产一个东西,消费者只进行一次消费,即:生产者只进行一次个东西,消费者只进行一次消费,即:生产者只进行一次putdataputdata操作,消费者只进行一次操作,消费者只进行一次getdatagetdata操作。操作。情况情况2:2:一个一个bufferbuffer,一个生产者,一个消费者
4、,生产者不断地进,一个生产者,一个消费者,生产者不断地进行行putdataputdata操作,消费者不断地进行操作,消费者不断地进行getdatagetdata操作,即:生操作,即:生产者不断地生产,消费者不断地消费产者不断地生产,消费者不断地消费情况情况3:3:一个一个bufferbuffer,多个生产者,多个消费者,多个生产者和消,多个生产者,多个消费者,多个生产者和消费者都在不断地存取费者都在不断地存取bufferbuffer,即生产者不断地进行,即生产者不断地进行putdatputdata a操作,消费者不断地进行操作,消费者不断地进行getdatagetdata操作。操作。情况情况4
5、:4:多个生产者,多个消费者,多个生产者,多个消费者,n n个个bufferbuffer,多次循环存取,多次循环存取bufbufferfer,即,即多个生产者不断地进行,即,即多个生产者不断地进行putdataputdata操作,多个消操作,多个消费者不断地进行费者不断地进行getdatagetdata操作。操作。5(情况(情况1)P、V操作实现操作实现semaphore full=0;producer:putdata;V(full);customer:P(full);getdata;经典问题:生产者经典问题:生产者-消费者问题消费者问题6经典问题:生产者经典问题:生产者-消费者问题消费者问题
6、情况情况2:2:一个一个bufferbuffer,一个生产者,一个消费者,生产者,一个生产者,一个消费者,生产者不断地进行不断地进行putdataputdata操作,消费者不断地进行操作,消费者不断地进行getdgetdataata操作,即:生产者不断地生产,消费者不断地操作,即:生产者不断地生产,消费者不断地消费消费7(情况情况2)P、V操作实现操作实现 semaphore full=0,empty=1;producer:while(1)P(empty);putdata;V(full);consumer:while(1)P(full);getdata;V(empty);经典问题:生产者经典问
7、题:生产者-消费者问题消费者问题8经典问题:生产者经典问题:生产者-消费者问题消费者问题情况情况3:3:一个一个bufferbuffer,多个生产者,多个消费者,多个生,多个生产者,多个消费者,多个生产者和消费者都在不断地存取产者和消费者都在不断地存取bufferbuffer,即生产者,即生产者不断地进行不断地进行putdataputdata操作,消费者不断地进行操作,消费者不断地进行getdgetdataata操作。操作。9(情况情况3)P、V操作实现操作实现 semaphore full=0,empty=1,mutex=1;producer:while(1)P(empty);P(mutex
8、);putdata;v(mutex);V(full);consumer:while(1)P(full);P(mutex);getdata;v(mutex);V(empty);经典问题:生产者经典问题:生产者-消费者问题消费者问题信号量信号量mutex可以省略吗?可以省略吗?10经典问题:生产者经典问题:生产者-消费者问题消费者问题情况情况4:多个生产者,多个消费者,多个生产者,多个消费者,n个个buffer,多次循环,多次循环存取存取buffer,即,即多个生产者不断地进行,即,即多个生产者不断地进行putdata操作,多个消费者不断地进行操作,多个消费者不断地进行getdata操作。操作。生
9、产者进程生产者进程消费者进程消费者进程11经典问题:生产者经典问题:生产者-消费者问题消费者问题(1)操作规则操作规则 假设缓冲池中有假设缓冲池中有n n个缓冲区,每个缓冲区存放一个个缓冲区,每个缓冲区存放一个消息消息(一个数据);(一个数据);又假定又假定这些生产者和消费者互相等效,只要缓冲这些生产者和消费者互相等效,只要缓冲池池未满未满,生产者可将消息送入缓冲池;只要缓冲,生产者可将消息送入缓冲池;只要缓冲池池未空未空,消费者可从缓冲池取走一个消息。,消费者可从缓冲池取走一个消息。这时这时BufferPoolBufferPool变成了临界资源变成了临界资源,不允许多个进,不允许多个进程同时
10、对其操作。程同时对其操作。(任意时刻,只允许任意时刻,只允许1 1个生产者或个生产者或1 1个消费者进入的个消费者进入的算法算法)12(2)操作流程操作流程 repeat 判断缓冲池是否有空缓冲判断缓冲池是否有空缓冲区,没有则等待;区,没有则等待;是否可操作缓冲池;是否可操作缓冲池;putdata;设置缓冲池可操作标志;设置缓冲池可操作标志;增加满缓冲区的数量;增加满缓冲区的数量;until false repeat 判断缓冲池是否有满缓冲判断缓冲池是否有满缓冲区,没有则等待;区,没有则等待;是否可操作缓冲池;是否可操作缓冲池;getdata;设置缓冲池可操作标志;设置缓冲池可操作标志;增加空
11、缓冲区的数量;增加空缓冲区的数量;until false 经典问题:生产者经典问题:生产者-消费者问题消费者问题13经典问题:生产者经典问题:生产者-消费者问题消费者问题(3)信号量)信号量 可可利利用用互互斥斥信信号号量量mutex使使诸诸进进程程对对缓缓冲冲池池实实现现互互斥斥访访问问;利利用用empty和和full计数信号量分别表示空缓冲及满缓冲的数量。计数信号量分别表示空缓冲及满缓冲的数量。互斥信号量互斥信号量 mutex:防止多个进程同时进入临界区:防止多个进程同时进入临界区,初值为,初值为1.同步信号量同步信号量 empty和和full:保证事件发生的顺序:保证事件发生的顺序,初值
12、分别为,初值分别为n和和0.full=n,缓冲区缓冲区都都满时,满时,Producer停止运行停止运行 empty=n,缓冲区缓冲区都都空时,空时,Consumer停止运行停止运行14(4)P、V操作实现操作实现 semaphore full=0,empty=n,mutex=1;producer:while(1)P(empty);P(mutex);putdata;v(mutex);V(full);consumer:while(1)P(full);P(mutex);getdata;v(mutex);V(empty);经典问题:生产者经典问题:生产者-消费者问题消费者问题15(4)P、V操作实现操
13、作实现 semaphore full=0,empty=n,mutex=1;producer:while(1)P(empty);P(mutex);putdata;v(mutex);V(full);consumer:while(1)P(full);P(mutex);getdata;v(mutex);V(empty);经典问题:生产者经典问题:生产者-消费者问题消费者问题16semaphore full=0,empty=n,mutex=1;int in=out=0;producerproducer:while(1)while(1)produce an item in nextp;produce an
14、 item in nextp;P(empty)P(empty);P(mutex)P(mutex);buffer(in)=nextp;buffer(in)=nextp;in=(in+1)mod n;in=(in+1)mod n;v(mutex)v(mutex);V(full);V(full);consumerconsumer:while(1)while(1)P(full)P(full);P(mutex)P(mutex);nextc=buffer(out);nextc=buffer(out);out=(out+1)mod n;out=(out+1)mod n;v(mutex)v(mutex);V(
15、empty)V(empty);consumconsum the item in nextc;the item in nextc;生产者生产者-消费者问题消费者问题P61的的P,V操作实现操作实现17P:Wait(empty);Wait(mutex);Buffer(in)=nextp;in:=(in+1)mod n;Signal(mutex);signal(full);empty=nfull=0mutex=1in,out=0临界区。临界区。生产者在生产时,防止生产者在生产时,防止其他其他进程同时进入临界进程同时进入临界区区生产者生产者-消费者问题消费者问题18P:Wait(empty);Wait
16、(mutex);Buffer(in)=nextp;in:=(in+1)mod n;Signal(mutex);signal(full);empty=nfull=0mutex=1in,out=0控制:控制:缓冲区满时不能继续缓冲区满时不能继续生产,制约生产者进生产,制约生产者进程程P。生产者生产者-消费者问题消费者问题19C:Wait(full);Wait(mutex);netxc=buffer(out);out:=(out+1)mod n;Signal(mutex);signal(empty);empty=nfull=0mutex=1in,out=0临界区。临界区。消费者消费者在在消费消费时,
17、防止时,防止其他其他进程同时进入临界进程同时进入临界区区生产者生产者-消费者问题消费者问题20C:Wait(full);Wait(mutex);netxc=buffer(out);out:=(out+1)mod n;Signal(mutex);signal(empty);empty=nfull=0mutex=1in,out=0控制:控制:缓冲区空时不能继续缓冲区空时不能继续消费,制约消费者进消费,制约消费者进程程C。生产者生产者-消费者问题消费者问题21说明说明waitwait和和signalsignal操作成对出现;操作成对出现;对对资源信号量资源信号量的的waitwait操作在前操作在前对
18、对互斥信号量互斥信号量的的waitwait操作在后操作在后P:Wait(empty);Wait(mutex);Buffer(in)=nextp;in:=(in+1)mod n;Signal(mutex);signal(full);C:Wait(full);Wait(mutex);netxc=buffer(out);out:=(out+1)mod n;Signal(mutex);signal(empty);生产者生产者-消费者问题消费者问题思考:思考:互换两个互换两个P P操作会操作会产生什么结果?产生什么结果?互换两个互换两个V V操作对操作对结果有影响么?结果有影响么?互换两个互换两个p(w
19、ait)p(wait)操作可能会导致死锁,但互换操作可能会导致死锁,但互换两个两个v(signal)v(signal)操作从逻辑上讲应该是一样的。操作从逻辑上讲应该是一样的。2223课堂练习课堂练习修改下面生产者修改下面生产者-消费者问题解法中的错误消费者问题解法中的错误 Producer:begin;repeat;produce an item in nextp;wait(mutex);wait(full);buffer(in):=nextp;signal(mutex);until false;end;consumer:begin;repeat;wait(mutex);wait(empty)
20、;nextc:=buffer(out);out:=out+1;signal(mutex);consume item in nextc;until false;end;24课堂练习答案课堂练习答案Producer:begin;repeat;produce an item in nextp;wait(mutex);wait(full);/*应为应为wait(empty),而且还应该在而且还应该在wait(mutex)的前面的前面*/buffer(in):=nextp;/*缓冲池数组游标应前移缓冲池数组游标应前移:in:=(in+1)mod n;*/signal(mutex);/*signal(fu
21、ll);*/until false;end;25课堂练习答案课堂练习答案consumer:begin;repeat;wait(mutex);wait(empty);/*应为应为wait(full),而且还应该在而且还应该在wait(mutex)的前面的前面*/nextc:=buffer(out);out:=out+1;/*考虑循环,应改为考虑循环,应改为:out:=(out+1)mod n;*/signal(mutex);/*signal(empty);*/consume item in nextc;until false;end;26P:Wait(empty);Wait(mutex);Buf
22、fer(in)=nextp;in:=(in+1)mod n;Signal(mutex);signal(full);P:Wait(empty,mutex);Buffer(in)=nextp;in:=(in+1)mod n;Signal(mutex,full);2.4.1 2.4.1 生产者生产者-消费者问题消费者问题用用AND型信号量解决同一问题型信号量解决同一问题27C:SWait(full,mutex);netxc=buffer(out);out:=(out+1)mod n;SSignal(mutex,empty);2.4.1 2.4.1 生产者生产者-消费者问题消费者问题用用AND型信号量
23、解决同一问题型信号量解决同一问题C:Wait(full);Wait(mutex);netxc=buffer(out);out:=(out+1)mod n;Signal(mutex);signal(empty);2829分析分析设设A、B为两个并发进程,它们共享一个临界资为两个并发进程,它们共享一个临界资源,其执行临界区的算法框图如下图所示。试判源,其执行临界区的算法框图如下图所示。试判断该算法是否有错?请说明理由。如果有错,请断该算法是否有错?请说明理由。如果有错,请改正。改正。S1、S2的初值为的初值为0,CSA、CSB为临界区。为临界区。CSAV(S1)P(S2)P(S1)CSBV(S2)
24、A A进程程B B进程程31semaphore mutex=1;begin cobegin A进程:进程:Begin repeat P(mutex);CSA;V(mutex);until falseEndB进程:进程:Begin repeat P(mutex);CSB;V(mutex);until false;End coend end分析分析32经典问题:哲学家就餐问题经典问题:哲学家就餐问题问题描述问题描述有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子,每人面前有一只空盘子,每两人之间放一只筷子每个哲
25、学家的行为是思考,感到饥饿,然后吃通心粉每个哲学家的行为是思考,感到饥饿,然后吃通心粉为了吃通心粉,每个哲学家必须拿到两只筷子,并且为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子每个人只能直接从自己的左边或右边去取筷子1 10 01 12 23 34 40 02 23 34 433 假设这假设这5 5只筷子与椅子相应也按逆时针方向从只筷子与椅子相应也按逆时针方向从0 0开始连续编开始连续编号,即第号,即第i i号哲学家左边摆着第号哲学家左边摆着第i i号筷子,右边摆着第号筷子,右边摆着第(i+1(i+1)mod 5)mod 5)号筷子,这里的号筷子,这里
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 1.25 操作系统 原理
限制150内