教学课件PPT 同步、通信与死锁.ppt
《教学课件PPT 同步、通信与死锁.ppt》由会员分享,可在线阅读,更多相关《教学课件PPT 同步、通信与死锁.ppt(146页珍藏版)》请在三一办公上搜索。
1、1,第3章 同步、通信与死锁,主要内容并发进程临界区管理信号量与PV操作管程(删)进程通信死锁Linux同步机制和通信机制Windows2003同步机制和通信,2,3.1 并发进程,3.1.1 顺序程序设计 3.1.2 进程的并发性 3.1.3 进程的交互:协作和竞争,3,3.1.1 顺序程序设计,进程的顺序性一个进程在顺序处理器上的执行是严格按序的,一个进程只有当一个操作结束后,才能开始后继操作。顺序程序设计是把一个程序设计成一个顺序执行的程序模块,顺序的含义不但指一个程序模块内部,也指两个程序模块之间。,4,顺序程序设计的特性,程序执行的顺序性程序环境的封闭性程序执行结果的确定性计算过程的
2、可再现性,顺序程序设计的缺点计算机系统效率不高。,5,3.1.2 进程的并发性,1、并发程序设计进程执行的并发性:一组进程的执行在时间上是重叠的。并发性举例:有两个进程A(a1、a2、a3)和B(b1、b2、b3)并发执行。a1、a2、a3、b1、b2、b3 顺序执行 a1、b1、a2、b2、a3、b3 并发执行从宏观上看,一个时间段中几个进程都在同一处理器上,处于运行还未运行结束状态。从微观上看,任一时刻仅有一个进程在处理器上运行。,6,串行工作图示,i1,p1,o1,i2,p2,o2,7,并行工作图示,8,并发的实质,并发的实质是一个处理器在几个进程之间的多路复用,并发是对有限的物理资源强
3、制行使多用户共享,消除计算机部件之间的互等现象,以提高系统资源利用率。,9,2、并发进程的特性,无关的并发进程一组并发进程分别在不同的变量集合上操作,一个进程的执行与其他并发进程的进展无关。并发进程的无关性是进程的执行与时间无关的一个充分条件,又称为Bernstein条件。交互的并发进程一组并发进程共享某些变量,一个进程的执行可能影响其他并发进程的结果。,10,Bernstein条件,R(pi)=a1,a2,an,程序pi在执行期间引用的变量集W(pi)=b1,b2,bm,程序pi在执行期间改变的变量集若两个程序的变量集交集之和为空集:R(p1)W(p2)R(p2)W(p1)W(p1)W(p2
4、)=则并发进程的执行与时间无关。,11,Bernstein条件举例,例如,有如下四条语句:S1:a:=x+y S2:b:=z+1 S3:c:=a b S4:w:=c+1于是有:R(S1)=x,y,R(S2)=z,R(S3)=a,b,R(S4)=c;W(S1)=a,W(S2)=b,W(S3)=c,W(S4)=w。S1和S2可并发执行,满足Bernstein条件。其他语句并发执行可能会产生与时间有关的错误。,12,并发程序设计的优点,对于单处理器系统,可让处理器和各I/O设备同时工作,发挥硬部件的并行能力。对于多处理器系统,可让各进程在不同处理器上物理地并行,加快计算速度。简化了程序设计任务。,1
5、3,采用并发程序设计的目的,充分发挥硬件的并行性,提高系统效率。硬件能并行工作仅有了提高效率的可能性,硬部件并行性的实现需要软件技术去利用和发挥,这种软件技术就是并发程序设计。并发程序设计是多道程序设计的基础,多道程序的实质就是把并发程序设计引入到系统中。,14,3、与时间有关的错误,对于一组交互的并发进程,执行的相对速度无法相互控制,各种与时间有关的错误就可能出现。与时间有关错误的表现形式:结果不唯一永远等待,15,(结果不唯一)机票问题,/飞机票售票问题void T1()void T2()按旅客订票要求找到Aj;按旅客订票要求找到Aj;int X1=Aj;int X2=Aj;if(X1=1
6、)if(X2=1)X1-;X2-;Aj=X1;Aj=X2;输出一张票;输出一张票;else else 输出信息票已售完;输出信息票已售完;,16,T1、T2并发执行,可能出现如下交叉情况:T1:X1=Aj;/X1=mT2:X2=Aj;/X2=mT2:X2-;Aj=X2;输出一张票;/Aj=m-1T1:X1-;Aj=X1;输出一张票;/Aj=m-1同一张票卖给两位旅客(若只有一张余票)或者余票数不正确(若有多张余票)。,17,(永远等待)主存管理问题,申请和归还主存资源问题int X=memory;/memory为初始主存容量void borrow(int B)void return(int B
7、)while(BX)X=X+B;进程进入等待主存资源队列;修改主存分配表;X=X-B;释放等主存资源进程;修改主存分配表,进程获得主存资源;,18,若对borrow和return的并发执行不加限制将会导致错误,例如:Borrow:while(BX);Return:X=X+B;修改主存分配表;释放等待主存资源的进程;此时,因为borrow还没有进入等待队列,因此,return的释放操作是空操作,当borrow进入等待队列时,可能没有进程再来归还,处于永远等待状态。,19,3.1.3 进程的交互:竞争与协作(1)第一种是竞争关系,系统中的多个进程之间彼此无关系统中的多个进程之间彼此相关 资源竞争的
8、两个控制问题:一个是死锁(Deadlock)问题,一个是饥饿(Starvation)问题 既要解决饥饿问题,又要解决死锁问题。进程互斥是指若干个进程因相互争夺独占型资源时所产生的竞争制约关系。,20,进程的交往:竞争与协作(2)第二种是协作关系,某些进程为完成同一任务需要分工协作。进程同步指为完成共同任务的并发进程基于某个条件来协调它们的活动,因为需要在某些位置上排定执行的先后次序而等待、传递信号或消息所产生的协作制约关系。进程同步指两个以上进程基于某个条件来协调它们的活动。一个进程的执行依赖于协作进程的消息或信号,当一个进程没有得到来自于协作进程的消息或信号时需等待,直到消息或信号到达才被唤
9、醒。进程互斥关系是一种特殊的进程同步关系,即逐次使用互斥共享资源,是对进程使用资源次序上的一种协调。,21,3.2 临界区管理,3.2.1 互斥与临界区3.2.2 实现临界区管理的几种尝试3.2.3 实现临界区管理的软件方法3.2.4 实现临界区管理的硬件设施,22,3.2.1 互斥与临界区(1),并发进程中与共享变量有关的程序段叫“临界区”,共享变量代表的资源叫“临界资源”。与同一变量有关的临界区分散在各进程的程序段中,而各进程的执行速度不可预知。如果保证进程在临界区执行时,不让另一个进程进入临界区,即各进程对共享变量的访问是互斥的,就不会造成与时间有关的错误。,23,互斥与临界区(2),临
10、界区调度原则:一次至多一个进程能够进入临界区内执行;如果已有进程在临界区,其他试图进入的进程应等待;进入临界区内的进程应在有限时间内退出,以便让等待进程中的一个进入。临界区调度原则总结:互斥使用,有空让进;忙则等待,有限等待;择一而入,算法可行。,24,3.2.2 临界区管理的尝试(1),bool inside1=false;/P1不在其临界区内bool inside2=false;/P2不在其临界区内cobegin/*cobegin和coend表示括号中的进程是一组并发进程*/process P1()process P2()while(inside2);/等待 while(inside1);
11、/等待 inside1=true;inside2=true;临界区;临界区;inside1=false;inside2=false;coend,可能不满足互斥条件,25,临界区管理的尝试(2),bool inside1=false;/P1不在其临界区内bool inside2=false;/P2不在其临界区内cobeginprocess P1()process P2()inside1=true;inside2=true;while(inside2);/等待 while(inside1);/等待临界区;临界区;inside1=false;inside2=false;coend,可能出现死循环,2
12、6,3.2.3实现临界区的软件算法Peterson算法(1),bool inside2;inside0=false;inside1=false;enum 0,1 turn;,27,Peterson算法(2),cobeginprocess P0()inside0=true;turn=1;while(inside1,28,Peterson算法(3),process P1()inside1=true;turn=0;while(inside0 coend,29,3.2.4 实现临界区管理的硬件设施,关中断测试并建立指令(删)对换指令(删),30,关中断,实现互斥的最简单方法关中断适用场合简单有效,对操
13、作系统自身有用,可在更新共享变量或列表的几条指令期间禁止中断。关中断方法的缺点不适合作为通用的互斥机制,关中断时间过长会影响性能和系统效率;不适应于多处理器计算机系统,因为一个处理器关中断,并不能防止进程在其它处理器上执行相同的临界段代码;若将这项权力赋予用户会存在危险,若用户未开中断,则系统可能因此而终止。,31,3.3 信号量与PV操作,3.3.1 同步与同步机制3.3.2 信号量与PV操作3.3.3 信号量实现互斥3.3.4 五个哲学家吃通心面问题3.3.5 生产者-消费者问题3.3.6 读者-写者问题3.3.7 理发师问题,32,3.3.1 同步和同步机制,著名的生产者-消费者问题是计
14、算机操作系统中并发进程内在关系的一种抽象,是典型的进程同步问题。在操作系统中,生产者进程可以是计算进程、发送进程;而消费者进程可以是打印进程、接收进程等等。解决好生产者-消费者问题就解决好了一类并发进程的同步问题。,33,生产者-消费者问题表述,有界缓冲问题有n个生产者和m个消费者,连接在一个有k个单位缓冲区的有界缓冲上。其中,pi和cj都是并发进程,只要缓冲区未满,生产者pi生产的产品就可投入缓冲区;只要缓冲区不空,消费者进程cj就可从缓冲区取走并消耗产品。,34,生产者-消费者问题算法描述(1),int k;typedef anyitem item;/item类型item bufferk;
15、int in=0,out=0,counter=0;,35,生产者-消费者问题算法描述(2),process producer(void)while(true)/无限循环 produce an item in nextp;/生产一个产品 if(counter=k)/缓冲满时,生产者睡眠 sleep(producer);bufferin=nextp;/将一个产品放入缓冲区 in=(in+1)%k;/指针推进 counter+;/缓冲内产品数加1 if(counter=1)/缓冲为空,加进一件产品 wakeup(consumer);/并唤醒消费者,36,生产者-消费者问题算法描述(3),proces
16、s consumer(void)while(true)/无限循环if(counter=0)/缓冲区空,消费者睡眠 sleep(consumer);nextc=bufferout;/取一个产品到nextc out=(out+1)%k;/指针推进 counter-;/取走一个产品,计数减1if(counter=k-1)/缓冲满了,取走一件产品并唤 wakeup(producer);/醒生产者consume the item in nextc;/消耗产品,37,生产者-消费者问题的算法描述(4),生产者和消费者进程对counter的交替执行会使其结果不唯一。生产者和消费者进程的交替执行会导致进程永远
17、等待。,38,3.3.2 信号量与PV操作(1),前节种种方法解决临界区调度问题的缺点:1)对不能进入临界区的进程,采用忙式等待测试法,浪费CPU时间。2)将测试能否进入临界区的责任推给各个竞争的进程会削弱系统的可靠性,加重了用户编程负担。1965年E.W.Dijkstra提出了新的同步工具-信号量和P、V操作。,39,信号量与PV操作(2),信号量:一种软件资源原语:内核中执行时不可被中断的过程P操作原语和V操作原语一个进程在某一特殊点上被迫停止执行直到接收到一个对应的特殊变量值,这种特殊变量就是信号量(semaphore),复杂的进程合作需求都可以通过适当的信号结构得到满足。,40,信号量
18、与PV操作(3),操作系统中,信号量表示物理资源的实体,它是一个与队列有关的整型变量。实现时,信号量是一种记录型数据结构,有两个分量:一个是信号量的值,另一个是信号量队列的队列指针。,41,信号量分类,信号量按其用途分为公用信号量:用户实现进程互斥,初值为1,相关进程均可在此信号量上执行PV操作;私有信号量:多用于并发进程同步,初值为0或正整数,仅允许此信号量所拥有的进程执行P操作,而其它相关进程可执行V操作。信号量按其取值分为二元信号量:仅允许取值为0或1,主要用于解决互斥问题;一般信号量:允许取大于1的整型值,主要用于解决同步问题。,42,一般信号量(1),设s为一个记录型数据结构,一个分
19、量为整形量value,另一个为信号量队列queue,P和V操作原语定义:P(s);将信号量s减去l,若结果小于0,则调用P(s)的进程被置成等待信号量s的状态。V(s):将信号量s加1,若结果不大于0,则释放一个等待信号量s的进程。,43,一般信号量(2),typedef struct semaphore int value;/信号量值struct pcb*list;/信号量队列指针;void P(semaphore,44,一般信号量(3),推论1:若信号量s为正值,则该值等于在封锁进程之前对信号量s可施行的P操作数、亦等于s所代表的实际还可以使用的物理资源数推论2:若信号量s为负值,则其绝对
20、值等于登记排列在该信号量s队列之中等待的进程个数、亦即恰好等于对信号量s实施P操作而被封锁起来并进入信号量s队列的进程数推论3:通常,P操作意味着请求一个资源,V操作意味着释放一个资源。在一定条件下,P操作代表挂起进程操作,而V操作代表唤醒被挂起进程的操作,45,3.3.3 信号量实现互斥,semaphore mutex;mutex=1;cobegin process Pi()/i=1,n P(mutex);临界区;V(mutex);coend,46,3.3.4 信号量解决五个哲学家吃通心面问题(1),有五个哲学家围坐在一圆桌旁,桌中央有一盘通心面,每人面前有一只空盘子,每两人之间放一把叉子。
21、每个哲学家思考、饥饿、然后吃通心面。为了吃面,每个哲学家必须获得两把叉子,且每人只能直接从自己左边或右边去取叉子。,47,信号量解决五个哲学家吃通心面问题(2),48,哲学家吃通心面问题(3),semaphore fork5;for(int i=0;i5;i+)forki=1;cobeginprocess philosopher_i()/i=0,1,2,3,4while(true)think();P(forki);P(fork(i+1)%5);eat();V(forki);V(fork(i+1)%5);coend,可能死锁!,49,有若干种办法可避免这类死锁,上述解法可能出现永远等待,有若干种
22、办法可避免死锁:至多允许四个哲学家同时吃;奇数号先取左手边的叉子,偶数号先取右手边的叉子;每个哲学家取到手边的两把叉子才吃,否则一把叉子也不取。,50,3.3.5 信号量解决生产者消费者问题,一个生产者、一个消费者共享一个缓冲区一个生产者、一个消费者共享多个缓冲区多个生产者、多个消费者共享多个缓冲区,51,一个生产者、一个消费者共享一个缓冲区的解,int B;semaphore empty;/可以使用的空缓冲区数semaphore full;/缓冲区内可以使用的产品数empty=1;/缓冲区内允许放入一件产品full=0;/缓冲区内没有产品,52,cobeginprocess producer
23、()process consumer()while(true)while(true)produce();P(full);P(empty);take()from B;append()to B;V(empty);V(full);consume();coend,53,多个生产者/消费者、共享多个缓冲区的解,item Bk;semaphore empty;empty=k;/可以使用的空缓冲区数semaphore full;full=0;/缓冲区内可以使用的产品数semaphore mutex;mutex=1;/互斥信号量int in=0;/放入缓冲区指针int out=0;/取出缓冲区指针,54,co
24、beginprocess producer_i()process consumer_j()while(true)while(true)produce();P(full);P(empty);P(mutex);P(mutex);take()from Bout;append to Bin;out=(out+1)%k;in=(in+1)%k;V(mutex);V(mutex);V(empty);V(full);consume();coend,55,3.3.6 信号量解决读者-写者问题(1),有两组并发进程:读者和写者,共享一个文件F,要求:允许多个读者同时执行读操作任一写者在完成写操作之前不允许其它读
25、者或写者工作写者执行写操作前,应让已有的写者和读者全部退出,56,信号量解决读者写者问题(2),int readcount=0;/读进程计数semaphore writeblock,mutex;writeblock=1;mutex=1;,57,信号量解决读者写者问题(3),cobeginprocess reader_i()process writer_j()P(mutex);P(writeblock);readcount+;写文件;if(readcount=1)V(writeblock);P(writeblock);V(mutex);读文件;P(mutex);readcount-;if(rea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件PPT 同步、通信与死锁 教学 课件 PPT 同步 通信 死锁
链接地址:https://www.31ppt.com/p-2393207.html