中南大学数学院计算机操作系统第四章课件进程通信.ppt
《中南大学数学院计算机操作系统第四章课件进程通信.ppt》由会员分享,可在线阅读,更多相关《中南大学数学院计算机操作系统第四章课件进程通信.ppt(85页珍藏版)》请在三一文库上搜索。
1、第四章 进程通信,1,2,4.1 进程的同步与互斥,4.1.1 同步与互斥的概念,两个或两个以上的进程要协作完成一个任务,它们之间就要互相配合,需要在某些动作之间进行同步。 进程间另一种关系是互斥,这种关系一般发生在两个或两个以上的进程竞争某些同时只能被一个进程使用的资源的情况下。,3,4.1.2 临界段问题,在一段时间内只能允许一个进程访问的资源称为临界资源,如打印机、磁带机、光盘刻写机、绘图仪等 进程执行的访问临界资源的程序段称为临界段或互斥段。,临界资源与临界段,4,统计两个进程 P1和P2对共享变量count访问计数:,P1: : P2: : R1=count (0) R2=count
2、(1) R1=R1+1 R2=R2+1 count=R1 (1) count=R2 (2) : : 结果:count2,设count初值0,5,两个进程可能的相对执行次序,P1:R1=count (0) R1=R1+1 (1) P2:R2=count (0) R2=R2+1 (1) count=R2 (1) P1:count=R1 (1) 虽然P1和P2进程各自都执行了对count加1的操作段,但结果count只增加1。 因此,变量count就是临界资源,P1、P2访问count的两个程序段就是临界段,诸进程必须互斥地进入临界段。,6,4.2 进程间互斥控制方法,锁可以用于控制临界段的互斥执行
3、。锁有两个状态,一个是打开状态,另一个是关闭状态,故锁可以用布尔变量表示。在C中,锁变量可以定义为char或int类型变量。设x为锁变量,则定义: x = 0 锁的打开状态; 1 锁的关闭状态。,4.2.1 锁的表示和操作,7,当进程希望进入临界段时,首先要测试锁的状态,如锁是打开的,表示无进程处于临界段,那么可以关闭该锁,并进入临界段。 当该进程处于临界段时,其他试图进入临界段的进程由于在测试锁的状态时发现它处于关闭状态,就只能在临界段外等待。,用锁变量控制临界段的执行,8,用锁操作控制进程对临界段的互斥执行,(a),LOCK (x),x=0 ?,x=1,临界段,+,-,UNLOCK (x)
4、,临界段,x=0,(b),9,4.2.2 锁的安全控制,锁的关闭操作LOCK包括测试和关闭两个操作步骤,这两个操作步骤涉及临界资源x,故这段程序也是临界段。 假定锁是打开的,当一个进程P1在测试锁的状态后,还没来得及关闭它的一瞬间,发生了中断; 中断返回时,系统可能调度另一个进程P2执行。P2执行时也对该锁的状态进行测试,发觉它处于打开状态,于是关闭该锁,并进入临界段。那么两个进程就同时处于一个临界段之中。,10,1. 测试并设置指令test&set,有些计算机提供专门的锁操作指令test&set,该指令首先测试锁变量的值,如为1,则重复执行本指令;如为0,则立即将锁变量的值置为1。 由于te
5、st&set是一条完整的指令,而在一条指令的执行中间是不会被中断的,故保证了锁的测试和关闭操作的连续性。,11,2. 交换指令用8086指令实现锁操作,check:MOV AL, 1 ;置测试单元寄存器AL的值为1 LOCK XCHG X, AL ;在本指令的执行时封锁总线, ;交换锁变量X与测试单元的值 TEST AL, AL ;测试AL的值 JNZ check ;如AL非0,即原锁处于关闭状态, : ;跳转至check,重复测试过程 临界段 ;锁变量X已置为1,12,3. 开、关中断法,1)这种方法只能用于单CPU系统。 2)如果临界段操作比较复杂,执行时间较长,那么长时间地关闭中断会降低
6、系统对外部中断响应的速度,影响系统处理紧迫事件的能力; 3)采用开、关中断的硬件锁方法禁止了其他无关的进程进入不同的临界段,这种做法显然伤害了很多的“无辜者”。,关中断 临界区 开中断,13,4. 用硬件锁锁软件锁,用软件锁锁临界段,软件锁的LOCK操作包括测试和关闭两个操作步骤,它本身也是一种临界段,故可以用硬件锁开、关中断保证软件锁操作的完整性。 由于软件锁是一种程序长度最短的临界段,故用开、关中断的方法保证锁操作的完整性几乎不会影响到系统响应其他的中断请求。 用软件锁保证临界段执行的独占性,不会影响到其他无关进程进入不同的临界段,这是一种安全而高效的锁。,LOCK(x) 关中断 开中断
7、x=0? + x=1 开中断 临界段 图4-3 复合锁的操作流程,14,4.3 信号灯和semWait、semSignal操作,信号灯定义成具有整型值,并能对其施加以下三种操作的变量,除了这三种操作之外的任何操作都不能测试和处理信号灯的值。 (1)初始化操作,信号灯能初始化为非负的值。 (2)semWait操作,能减小信号灯的值,如结果值为负,执行semWait操作的进程就被封锁。 (3)semSignal操作,能增加信号灯的值,如果结果值非正,那么原先因执行semWait操作而阻塞的进程被解除阻塞。,15,semWait、semSignal操作两个原语定义,typedef struct se
8、maphore int value ; Queue queue; Semaphore ; Semaphore s;,16,void semSignal(s) semaphore s; if ( +s.value = 0 ) 从等待队列queue中移出一进程; 将该进程置入就绪队列中; ,void semWait(s) semaphore s ; if ( -s.value 0 ) 将进程置入等待队列queue中; 封锁进程; 转进程调度程序; ,17,4.4 信号灯的应用,4.4.1 利用信号灯实现互斥,18,信号灯的所有可能取值及意义为: s = 1 无进程进入临界段 0 有一进程进入临界段
9、 -1 有一进程进入临界段, 另一进程被阻塞 如有n个并发进程涉及一个临界段,则上式最后一行s的取值为i, -(n-1) i-1,表示当前有|i|个进程被阻塞。,两个并发进程涉及一个临界段,19,4.4.2 阻塞唤醒协议,置信号灯s的初值为0 Pa Pb 计算func1( ) 计算func2( ) L1:semWait(s) 将计算结果存入缓冲区 获得Pb的计算结果 L2:semSignal(s) 计算乘积 : : 图4-5 阻塞唤醒协议的实现,20,从图中可以看出,当进程a执行到L1点时,如进程b还未执行到L2点,也即func2函数的计算还未完成,进程a就要同步等待进程b。 而进程b则不必同
10、步等待进程a,所以说这种同步是非对称的,或可以称为“半同步”。,21,4.4.3 两个进程间的同步,1. 一个全同步的例子,设有两个进程Pa和Pb。进程Pa每次执行一个计算,并将结果存入一个缓冲区; 进程Pb则从缓冲区中取出结果,并将结果打印出来。,22,为了实现计算进程和打印进程之间的相互同步,就需要设置2个信号量S1和S2。 在semWait、semSignal操作之前两个信号量的含义为:S1表示缓冲区中是否已存入进程Pa的计算结果,也即通知进程Pb是否可取出缓冲区中的信息并送往打印机。 S1值为: 0:Pa没存入新的计算结果 1:Pa已存入新的计算结果,23,S2:表示缓冲区中的结果是否
11、已被进程Pb取去,也即通知进程Pa是否可将新的计算结果再存入缓冲区。 S2的值为: 0:Pb没取走缓冲区中的数据, 缓冲区满 1:Pb已取走缓冲区中的数据, 缓冲区空,24,信号灯的初值可设置为: S1为0:缓冲区还未存入数据 S2为1:缓冲空闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semWait(s1),semWait(s2) get (result),put (result),semSignal(s2),semSignal(s1),printing,图,4-6,两个进程之间的全同步,1(-1),25,信号灯的初值可设置为: S1为0:缓冲区还未存
12、入数据 S2为1:缓冲空闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semWait(s1),semWait(s2) get (result),put (result),semSignal(s2),semSignal(s1),printing,图,4-6,两个进程之间的全同步,1(-1),2,26,信号灯的初值可设置为: S1为0:缓冲区还未存入数据 S2为1:缓冲空闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semWait(s1),semWait(s2) get (result),put (result),semS
13、ignal(s2),semSignal(s1),printing,图,4-6,两个进程之间的全同步,1(-1),2,3(0),27,信号灯的初值可设置为: S1为0:缓冲区还未存入数据 S2为1:缓冲空闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semWait(s1),semWait(s2) get (result),put (result),semSignal(s2),semSignal(s1),printing,图,4-6,两个进程之间的全同步,1(-1),2,3(0),4,28,信号灯的初值可设置为: S1为0:缓冲区还未存入数据 S2为1:缓冲空
14、闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semWait(s1),semWait(s2) get (result),put (result),semSignal(s2),semSignal(s1),printing,图,4-6,两个进程之间的全同步,1(-1),2,3(0),4,5(0),29,信号灯的初值可设置为: S1为0:缓冲区还未存入数据 S2为1:缓冲空闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semWait(s1),semWait(s2) get (result),put (result),semS
15、ignal(s2),semSignal(s1),printing,图,4-6,两个进程之间的全同步,1(-1),2, 6,3(0),4,5(0),30,信号灯的初值可设置为: S1为0:缓冲区还未存入数据 S2为1:缓冲空闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semWait(s1),semWait(s2) get (result),put (result),semSignal(s2),semSignal(s1),printing,图,4-6,两个进程之间的全同步,1(-1),2, 6,3(0), 7(-1),4,5(0),31,信号灯的初值可设置为
16、: S1为0:缓冲区还未存入数据 S2为1:缓冲空闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semWait(s1),semWait(s2) get (result),put (result),semSignal(s2),semSignal(s1),printing,图,4-6,两个进程之间的全同步,1(-1),2, 6,3(0), 7(-1),4,5(0),8,32,信号灯的初值可设置为: S1为0:缓冲区还未存入数据 S2为1:缓冲空闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semWait(s1),semWa
17、it(s2) get (result),put (result),semSignal(s2),semSignal(s1),printing,图,4-6,两个进程之间的全同步,1(-1),2, 6,3(0), 7(-1),4,5(0),8,9(0),33,信号灯的初值可设置为: S1为0:缓冲区还未存入数据 S2为1:缓冲空闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semWait(s1),semWait(s2) get (result),put (result),semSignal(s2),semSignal(s1),printing,图,4-6,两个进
18、程之间的全同步,1(-1),2, 6,3(0), 7(-1),4,5(0),8,9(0),10,34,信号灯的初值可设置为: S1为0:缓冲区还未存入数据 S2为1:缓冲空闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semWait(s1),semWait(s2) get (result),put (result),semSignal(s2),semSignal(s1),printing,图,4-6,两个进程之间的全同步,1(-1), 11(-1),2, 6,3(0), 7(-1),4,5(0),8,9(0),10,35,信号灯的初值可设置为: S1为0:
19、缓冲区还未存入数据 S2为1:缓冲空闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semWait(s1),semWait(s2) get (result),put (result),semSignal(s2),semSignal(s1),printing,图,4-6,两个进程之间的全同步,1(-1), 11(-1),2, 6,3(0), 7(-1),4, 12,5(0),8,9(0),10,36,信号灯的初值可设置为: S1为0:缓冲区还未存入数据 S2为1:缓冲空闲(相当于Pb已取走数据),计算进程,P,a,打印进程,P,b,computing,semW
20、ait(s1),semWait(s2) get (result),put (result),semSignal(s2),semSignal(s1),printing,图,4-6,两个进程之间的全同步,1(-1), 11(-1),2, 6,3(0), 7(-1),4, 12,5(0),8,9(0),10,37,2.互斥和同步对信号灯操作方法的差异,互斥和同步都是通过对信号灯的semWait、semSignal操作来实现的,但这两种控制机制对信号灯的操作策略是不同的。 互斥实现是不同的进程对同一信号灯进行semWait、semSignal 操作,一个进程在成功地对信号灯执行了semWait操作后进
21、入临界段,并在退出临界段后,由该进程本身对这信号灯执行semSignal操作,表示没有进程处于临界段,可让其他进程进入。 同步的实现由一个进程Pa对一个信号灯进行semWait操作后,只能由另一个进程Pb对同一个信号灯进行semSignal操作,使Pa能继续前进,在这种情况下,进程Pa要同步等待Pb。 如进程Pb也要同步等待Pa,则要设置另一个信号灯。,38,4.4.4 生产者和消费者问题,生产者和消费者问题是通过有限的缓冲区(仓库)将一群生产者P1, P2Pk和一群消费者C1,C2Cm联系起来。可设信号量 buffers的初值为n,表示空闲的缓冲区数目。 products的初值为0,表示已存
22、入缓冲区的产品数目。 生产者和消费者问题的一般过程为:生产者在执行semWait(buffers)之后,只要buffers0(还有空闲的缓冲区),就可将产品送入。消费者在执行semWait(products)后,只要products0(产品还未取完),就可以从缓冲区中取走产品,并消费之。否则,生产者或消费者进程就被阻塞。,39,producers: customers: while ( ) while ( ) produce next product; semWait (products); semWait (buffers); get product from buffers; Put pr
23、oduct into buffers; semSignal (buffers) semSignal (products); consume product; ,40,producers: customers: while ( ) while ( ) produce next product; semWait (products); semWait (buffers); semWait (mutex); semWait (mutex); get product from buffers; Put product into buffers; semSignal (mutex); semSignal
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中南 大学 学院 计算机 操作系统 第四 课件 进程 通信
链接地址:https://www.31doc.com/p-3419775.html