第4章 进程同步与通信ppt课件.ppt





《第4章 进程同步与通信ppt课件.ppt》由会员分享,可在线阅读,更多相关《第4章 进程同步与通信ppt课件.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4章 进程同步与通信第第4 4章章 进程同步与通信进程同步与通信操作系统(第四版)操作系统(第四版)第4章 进程同步与通信4.1 4.1 进程间的相互作用进程间的相互作用4.2 4.2 进程通信进程通信4.3 4.3 死锁死锁4.4 Linux4.4 Linux进程间通信进程间通信4.1 进程间的相互作用q进程间的联系进程间的联系 资源共享关系资源共享关系 相互合作关系相互合作关系 临界资源临界资源 - - 一种多个进程访问的资源。一种多个进程访问的资源。 - - 属性:访问临界资源的进程必须互斥得访问它,也就属性:访问临界资源的进程必须互斥得访问它,也就是说,同一时刻只允许一个进程访问的资
2、源叫临界资源是说,同一时刻只允许一个进程访问的资源叫临界资源 思考思考: :下面两个进程并发是否能正确执行下面两个进程并发是否能正确执行? ?4.1 进程间的相互作用void Producer() while (1) produce an item in nextp; while (counter=n)no-op; bufferin=nextp; in=(in+1)mod n; counter+; register1=counter;resister1+;counter=register1;void Consumer() while(1) while (counter=0)no-op; nex
3、tc=bufferout; out=(out+1)mod n; counter-; consume the item in nextc; register2=counter;resister1-;counter=register2;4.1 进程间的相互作用 临界区临界区 不论是硬件临界资源,还是软件临界资源,多个进程必须不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。我们把在每个进程中访问临界资源的互斥地对它进行访问。我们把在每个进程中访问临界资源的那段代码称为那段代码称为临界区临界区(critical sectioncritical section) 同步机制应遵循的准
4、则同步机制应遵循的准则 - - 空闲让进空闲让进 - - 忙则等待忙则等待 - - 有限等待有限等待 - - 让权等待让权等待4.1 进程间的相互作用q利用软件方法解决进程互斥问题利用软件方法解决进程互斥问题q 算法算法1 1 设置一个公用整型变量设置一个公用整型变量turnturn,用于指示被允许进入临界区,用于指示被允许进入临界区的进程的编号的进程的编号. . 算法描述如下:算法描述如下: P1 while (1) while (turn!=1)no-op; critical section turn=2; 不能保证实现不能保证实现“空闲让进空闲让进”的准则的准则P2while (1) w
5、hile (turn!=2) no-op; critical section turn=1; 算法算法2 2 设置一个数组,使其中每个元素的初值为设置一个数组,使其中每个元素的初值为0 0,表示所有进,表示所有进程都未进入临界区,在每一个进程访问临界资源之前,先去程都未进入临界区,在每一个进程访问临界资源之前,先去查看一下临界资源是否正被访问。若正被访问,该进程需等查看一下临界资源是否正被访问。若正被访问,该进程需等待;否则进入自己的临界区待;否则进入自己的临界区 算法描述如下:算法描述如下:int flag2=0,0; P0: while (1) while (flag1) no-op; f
6、lag0=1; critical section flag0=0; 4.1 进程间的相互作用违背了违背了“忙则等待忙则等待”的准则的准则和和“有限等待有限等待”P1: while (1) while (flag0) no-op; flag1=1; critical section flag1=0; 算法算法3 3 使要进入临界区的进程先设置其要求进入的标志,然后,使要进入临界区的进程先设置其要求进入的标志,然后,再去查看其他进程的标志再去查看其他进程的标志, ,算法描述如下:算法描述如下:int flag2=0,0; P0: while (1) flag0=1; while (flag1)no
7、-op; critical section flag0=0; 4.1 进程间的相互作用违背了违背了“空闲让进空闲让进”P1: while (1) flag1=1; while (flag0) no-op; critical section flag1=0; 算法算法4 4 为每个进程设置了相应的标志为为每个进程设置了相应的标志为flagflag;还设置了一个;还设置了一个turnturn变量,变量,用于指示允许进入临界区的进程编号用于指示允许进入临界区的进程编号, , 算法描述如下:算法描述如下: int flag2=0,0; P0: while (1) flag0=1; turn=2; wh
8、ile (flag1&turn=2) no-op; critical section flag0=0; 4.1 进程间的相互作用P1: while (1) flag1=1; turn=1; while (flag0&turn=1)no-op; critical section flag1=0; 保证了保证了“忙则等待忙则等待”,又实,又实现了现了“空闲让进空闲让进”4.1 进程间的相互作用q利用硬件方法解决进程互斥问题利用硬件方法解决进程互斥问题 利用利用Test-and-SetTest-and-Set指令实现互斥指令实现互斥 Test-and-Set指令为:指令为: int TS(stati
9、c int lock) int TS=lock; lock=1; return(TS); 4.1 进程间的相互作用用用TSTS指令实现进程互斥的循环描述为:指令实现进程互斥的循环描述为: while (1) while (TS(lock) do no-op; critical section lock=0; 思考思考:如何保证临界区管理的四个原则如何保证临界区管理的四个原则? 4.1 进程间的相互作用利用利用SwapSwap指令实现进程互斥指令实现进程互斥 SwapSwap指令称为交换指令指令称为交换指令, ,描述为:描述为: void Swap(static int a,b) int tem
10、p; temp=a; a=b; b=temp; 4.1 进程间的相互作用利用利用SwapSwap指令实现进程互斥的循环可描述为:指令实现进程互斥的循环可描述为: while (1) key=1; do Swap(lock,key); while(key); critical section lock=0; 思考思考:如何保证临界区管理的四个原则如何保证临界区管理的四个原则? 4.1 进程间的相互作用q 信号量机制信号量机制 信号量机制是一种卓有成效的进程同步工具信号量机制是一种卓有成效的进程同步工具 记录型信号量机制记录型信号量机制 在信号量机制中,除了需要一个用于代表资源数目的整在信号量机制
11、中,除了需要一个用于代表资源数目的整型变量型变量valuevalue外,还有一个进程链表外,还有一个进程链表L L,用于链接所有等待该,用于链接所有等待该信号量代表资源的进程信号量代表资源的进程 记录型数据结构描述记录型数据结构描述 typedef struct int value; list of process *L; semaphore; 4.1 进程间的相互作用对信号量的操作对信号量的操作 信号量除初始化外,仅能通过两个标准的原子信号量除初始化外,仅能通过两个标准的原子操作操作wait(s)wait(s)和和signal(s)signal(s)来访问。这两个操作很长来访问。这两个操作很
12、长时间以来被称为时间以来被称为P P、V V操作。操作。 当一个进程在修改某信号量时,没有其他进程当一个进程在修改某信号量时,没有其他进程可以同时对该信号量进行修改。可以同时对该信号量进行修改。4.1 进程间的相互作用 信号量的物理含义信号量的物理含义(假定信号量用(假定信号量用S S表示)如下:表示)如下: - S.value0- S.value0时时 S.valueS.value表示可使用的资源数或表示可使表示可使用的资源数或表示可使用资源的进程数;用资源的进程数; - S.value=0- S.value=0时时 S.valueS.value表示无资源可供使用或表示不允表示无资源可供使用
13、或表示不允许进程得到该资源;许进程得到该资源; - S.value0- S.value0)s.value-; if(s.value=0)s.value-;block(s.L);简练为:简练为: s.value-; if(s.value=0)s.value+; if(s.value0)s.value+;wakeup(s.L);简练为:简练为: s.value+; if(s.value=0)wakeup(s.L);singal原语原语 void signal(static semaphore s) s.value+; if (s.value0)wackup(s.L); 4.1 进程间的相互作用利用
14、信号量实现进程互斥的过程描述利用信号量实现进程互斥的过程描述 为使多个进程互斥地访问某个临界资源,只需为该资源设为使多个进程互斥地访问某个临界资源,只需为该资源设置一个信号量,并设其初始值为置一个信号量,并设其初始值为1 1,此时的信号量可以称为,此时的信号量可以称为“互斥信号量互斥信号量”。semaphore mutex=1;void procedure1() while (1) wait(mutex); critical section signal(mutex); void procedure2() while (1) wait(mutex); critical section sign
15、al(mutex); main() cobegin procedure1(); procedure2(); 4.1 进程间的相互作用 利用信号量来描述程序或语句之间的利用信号量来描述程序或语句之间的前趋关系前趋关系 方法:一条边一个信号量方法:一条边一个信号量( (信号量初值为信号量初值为0)0); waitwait以该以该节点为终点所有边的信号量,执行该节点,节点为终点所有边的信号量,执行该节点,signalsignal以该节点为以该节点为始点所有边的信号量始点所有边的信号量例:有例:有6 6个语句的前驱图个语句的前驱图main()main() semaphore a=b=c=d=e=f=g
16、=0; semaphore a=b=c=d=e=f=g=0; cobegin cobegin T1;signal(a);signal(b); T1;signal(a);signal(b); wait(a);T2;signal(c);signal(d); wait(a);T2;signal(c);signal(d); wait(b);T3;signal(e); wait(b);T3;signal(e); wait(c);T4;signal(f); wait(c);T4;signal(f); wait(d);T5;signal(g); wait(d);T5;signal(g); wait(e);w
17、ait(f);wait(g);T6; wait(e);wait(f);wait(g);T6; 4.1 进程间的相互作用 信号量集机制信号量集机制 ANDAND型信号量集机制型信号量集机制 假定现有两个进程假定现有两个进程P P和和Q Q,它们都要求访问共享数据,它们都要求访问共享数据A A和和B B。共享数据都应作为临界资源,为此,可为这两个数据分别设置共享数据都应作为临界资源,为此,可为这两个数据分别设置用于互斥的信号量用于互斥的信号量AmutexAmutex和和BmutexBmutex,并令它们的初值为,并令它们的初值为1 1,相,相应地,在两进程中都要包含两个对应地,在两进程中都要包含两
18、个对AmutexAmutex和和BmutexBmutex的操作,即的操作,即process P: process Q:process P: process Q: wait(Amutex); wait(Bmutex); wait(Amutex); wait(Bmutex); wait(Bmutex); wait(Amutex); wait(Bmutex); wait(Amutex);4.1 进程间的相互作用 若进程若进程P P和和Q Q按下述次序交替地执行按下述次序交替地执行waitwait操作:操作: process P: wait(Amutex);process P: wait(Amutex
19、);于是于是Amutex=0Amutex=0 process Q: wait(Bmutex); process Q: wait(Bmutex);于是于是Bmutex=0Bmutex=0 process P: wait(Bmutex); process P: wait(Bmutex);于是于是Bmutex=-1Bmutex=-1,P P阻塞。阻塞。 process Q: wait(Amutex);process Q: wait(Amutex);于是于是Amutex=-1Amutex=-1,Q Q阻塞。阻塞。4.1 进程间的相互作用 对若干个临界资源的分配采取原子操作方式,要么全部分对若干个临界资
20、源的分配采取原子操作方式,要么全部分配到进程,要么一个也不分配配到进程,要么一个也不分配 SwaitSwait操作操作 Swait(S1,S2,Sn) if (S11&Sn1) for (i=1;i=n;i+) Si-; else Place the process in the waiting queue associated with the Si found with Si1,and set the program count of this process to the beginning of Swait operation. 4.1 进程间的相互作用 Ssignal操作操作 Ssi
21、gnal(S1,S2,Sn) for (i=1;i=n;i+) Si+; Remove all the process waiting in the queue associated with Si into the ready queue. 一般一般“信号量集信号量集”机制机制 一次分配多个某种资源,且当该资源数量少于一定值时,不一次分配多个某种资源,且当该资源数量少于一定值时,不予分配。因此,在每次分配之前都必须测试该资源的数量是否予分配。因此,在每次分配之前都必须测试该资源的数量是否大于测试值大于测试值t 4.1 进程间的相互作用 SwaitSwait操作操作 Swait(S1,t1,d
22、1,S2,t2,d2,Sn,tn,dn) if (S1t1&Sntn&S1d1&Sndn) for (i=1;i=n;i+) Si=Si-di; else Place the process in the waiting queue associated with the Si found with Siti,and set the program count of this process to the beginning of Swait operation.4.1 进程间的相互作用 Ssignal操作操作 Ssignal(S1,t1,d1,S2,t2,d2,Sn,tn,dn) for (
23、i=1;i0)readcount0)直接读;直接读; - - 读者离开临界区时,若还有读者在读,则直接离开,若是读者离开临界区时,若还有读者在读,则直接离开,若是最后一个读者,则唤醒等在临界区外的一写者最后一个读者,则唤醒等在临界区外的一写者 - - 读者进入临界区和离开临界区的代码本身也是临界区,不读者进入临界区和离开临界区的代码本身也是临界区,不能并发,用信号量能并发,用信号量rmutexrmutex进行管理进行管理 - - 在读者等待进入临界区(在读者等待进入临界区(mutmexmutmex)时,只有第一个读者等)时,只有第一个读者等在在mtumexmtumex信号量上,其余等待在信号量
24、上,其余等待在rmutexrmutex信号量上;信号量上; - - 写者直接判断能否进入临界区(临界区信号量写者直接判断能否进入临界区(临界区信号量wmutexwmutex) - - 写者离开,唤醒一写者或读者;若唤醒的是读者,该读者写者离开,唤醒一写者或读者;若唤醒的是读者,该读者离开离开rmutexrmutex的临界区,相继唤醒等待在的临界区,相继唤醒等待在rumtexrumtex上的读者。上的读者。4.1 进程间的相互作用利用记录型信号量解决读者利用记录型信号量解决读者- -写着问题写着问题semaphore rmutex=wmutex=1;int readcount=0;void re
25、ader(int i)while (1) . wait(rmutex); if (readcount=0)wait(wmutex); readcount+; signal(rmutex); perform read operation; wait(rmutex); readcount-; if(readcount=0)signal(wmutex); signal(rmutex); . void writer(int j)while (1) . wait(wmutex); perform write operation; signal(wmutex); . main() cobegin read
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 进程同步与通信ppt课件 进程 同步 通信 ppt 课件

限制150内