《进程通信》PPT课件.ppt
《《进程通信》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《进程通信》PPT课件.ppt(85页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四第四章章 进程通信进程通信操作系统操作系统 陆松年陆松年 14.1 进程的同步与互斥进程的同步与互斥4.1.1 同步与互斥的概念同步与互斥的概念 两个或两个以上的进程要协作完成一个任两个或两个以上的进程要协作完成一个任务,它们之间就要互相配合,需要在某些务,它们之间就要互相配合,需要在某些动作之间进行同步。动作之间进行同步。进程间另一种关系是互斥,这种关系一进程间另一种关系是互斥,这种关系一般发生在两个或两个以上的进程竞争某些般发生在两个或两个以上的进程竞争某些同时只能被一个进程使用的资源的情况下。同时只能被一个进程使用的资源的情况下。24.1.2 临界段问题临界段问题n在一段时间内只能允
2、许一个进程访问的在一段时间内只能允许一个进程访问的资源称为资源称为临界资源临界资源,如打印机、磁带机、,如打印机、磁带机、光盘刻写机、绘图仪等光盘刻写机、绘图仪等n进程执行的访问临界资源的程序段称为进程执行的访问临界资源的程序段称为临界段临界段或或互斥段互斥段。临界资源与临界段临界资源与临界段3 统计两个进程统计两个进程 P1P1和和P2P2对共享变量对共享变量countcount访问计数:访问计数:P1P1::P2P2::R1=count R1=count(0 0)R2=countR2=count(1 1)R1=R1+1 R1=R1+1 R2=R2+1R2=R2+1 count=R1 cou
3、nt=R1(1 1)count=R2count=R2 (2 2):结果:结果:count2设设count初值初值04两个进程可能的相对执行次序两个进程可能的相对执行次序 P1:R1=count(0 0)R1=R1+1(1 1)P2:R2=count(0 0)R2=R2+1(1 1)count=R2(1 1)P1:count=R1 (1 1)n虽然虽然P1和和P2进程各自都执行了对进程各自都执行了对count加加1的的操作段,但操作段,但结果结果count只增加只增加1。n因此,变量因此,变量count就是临界资源,就是临界资源,P1、P2访问访问count的两个程序段就是临界段,诸进程必须的两
4、个程序段就是临界段,诸进程必须互斥地进入临界段。互斥地进入临界段。54.2 进程间互斥控制方法进程间互斥控制方法 锁可以用于控制临界段的互斥执行。锁有两锁可以用于控制临界段的互斥执行。锁有两个状态,一个是打开状态,另一个是关闭状态,个状态,一个是打开状态,另一个是关闭状态,故锁可以用布尔变量表示。在故锁可以用布尔变量表示。在C中,锁变量可中,锁变量可以定义为以定义为char或或int类型变量。设类型变量。设x为锁变量,为锁变量,则定义:则定义:x=0 锁的打开状态;锁的打开状态;1 锁的关闭状态。锁的关闭状态。4.2.1 锁的表示和操作锁的表示和操作6v当进程希望进入临界段时,首先要测试当进程
5、希望进入临界段时,首先要测试锁的状态,如锁是打开的,表示无进程锁的状态,如锁是打开的,表示无进程处于临界段,那么可以关闭该锁,并进处于临界段,那么可以关闭该锁,并进入临界段。入临界段。v当该进程处于临界段时,其他试图进入当该进程处于临界段时,其他试图进入临界段的进程由于在测试锁的状态时发临界段的进程由于在测试锁的状态时发现它处于关闭状态,就只能在临界段外现它处于关闭状态,就只能在临界段外等待。等待。用锁变量控制临界段的执行用锁变量控制临界段的执行7用锁操作控制进程对临界段的互斥执行用锁操作控制进程对临界段的互斥执行(a)LOCK(x)x=0?x=1临界段临界段+-UNLOCK(x)临界段临界段
6、x=0(b)84.2.2 锁的安全控制锁的安全控制n锁的关闭操作锁的关闭操作LOCK包括测试和关闭两个包括测试和关闭两个操作步骤,这两个操作步骤涉及临界资源操作步骤,这两个操作步骤涉及临界资源x,故这段程序也是临界段。故这段程序也是临界段。n假定锁是打开的,当一个进程假定锁是打开的,当一个进程P1在测试锁在测试锁的状态后,还没来得及关闭它的一瞬间,的状态后,还没来得及关闭它的一瞬间,发生了中断;发生了中断;n中断返回时,系统可能调度另一个进程中断返回时,系统可能调度另一个进程P2执行。执行。P2执行时也对该锁的状态进行测试,执行时也对该锁的状态进行测试,发觉它处于打开状态,于是关闭该锁,并发觉
7、它处于打开状态,于是关闭该锁,并进入临界段。那么两个进程就同时处于一进入临界段。那么两个进程就同时处于一个临界段之中。个临界段之中。91.测试并设置指令测试并设置指令test&setn有些计算机提供专门的锁操作指令有些计算机提供专门的锁操作指令test&set,该指令首先测试锁变量的值,该指令首先测试锁变量的值,如为如为1,则重复执行本指令;如为,则重复执行本指令;如为0,则,则立即将锁变量的值置为立即将锁变量的值置为1。n由于由于test&set是一条完整的指令,而在是一条完整的指令,而在一条指令的执行中间是不会被中断的,一条指令的执行中间是不会被中断的,故保证了锁的测试和关闭操作的连续性。
8、故保证了锁的测试和关闭操作的连续性。102.交换指令交换指令用用8086指令实现锁操作指令实现锁操作check:MOV AL,1 ;置测试单元寄存器置测试单元寄存器AL的值为的值为1LOCK XCHG X,AL;在本指令的执行时封锁总线,在本指令的执行时封锁总线,;交换锁变量交换锁变量X与测试单元的值与测试单元的值TEST AL,AL ;测试测试AL的值的值JNZ check ;如如AL非非0,即原锁处于关闭状态,即原锁处于关闭状态,:;跳转至;跳转至check,重复测试过程重复测试过程临界段临界段 ;锁变量;锁变量X已置为已置为1113.开、关中断法开、关中断法 1)这种方法只能用于单这种方
9、法只能用于单CPU系系统。统。2)如果临界段操作比较复杂,如果临界段操作比较复杂,执行时间较长,那么长时间地关执行时间较长,那么长时间地关闭中断会降低系统对外部中断响闭中断会降低系统对外部中断响应的速度,影响系统处理紧迫事应的速度,影响系统处理紧迫事件的能力;件的能力;3)采用开、关中断的硬件锁方法采用开、关中断的硬件锁方法禁止了其他无关的进程进入不同禁止了其他无关的进程进入不同的临界段,这种做法显然伤害了的临界段,这种做法显然伤害了很多的很多的“无辜者无辜者”。关中断关中断 临界临界区区 开开中断中断124.用硬件锁锁软件锁,用软件锁锁临界段用硬件锁锁软件锁,用软件锁锁临界段n 软件锁的软件
10、锁的LOCK操作包括测试操作包括测试和关闭两个操作步骤,它本身和关闭两个操作步骤,它本身也是一种临界段,故可以用硬也是一种临界段,故可以用硬件锁件锁开、关中断保证软件开、关中断保证软件锁操作的完整性。锁操作的完整性。n 由于软件锁是一种程序长度最由于软件锁是一种程序长度最短的临界段,故用开、关中断短的临界段,故用开、关中断的方法保证锁操作的完整性几的方法保证锁操作的完整性几乎不会影响到系统响应其他的乎不会影响到系统响应其他的中断请求。中断请求。n用软件锁保证临界段执行的独用软件锁保证临界段执行的独占性,不会影响到其他无关进占性,不会影响到其他无关进程进入不同的临界段,这是一程进入不同的临界段,
11、这是一种安全而高效的锁。种安全而高效的锁。LOCK(x)关中断关中断 开中断开中断 x=0?+x=1 开中断开中断 临界段临界段图图4-3 复合锁的操作流程复合锁的操作流程134.3 信号灯和信号灯和semWait、semSignal操作操作 信号灯定义成具有整型值,并能对其施加以下三信号灯定义成具有整型值,并能对其施加以下三种操作的变量,除了这三种操作之外的任何操作都种操作的变量,除了这三种操作之外的任何操作都不能测试和处理信号灯的值。不能测试和处理信号灯的值。(1)初始化操作,信号灯能初始化为非负的值。)初始化操作,信号灯能初始化为非负的值。(2)semWait操作操作,能减小信号灯的值,
12、如结能减小信号灯的值,如结果值为负,执行果值为负,执行semWait操作的进程就被封锁。操作的进程就被封锁。(3)semSignal操作操作,能增加信号灯的值,如能增加信号灯的值,如果结果值非正,那么原先因执行果结果值非正,那么原先因执行semWait操作而阻操作而阻塞的进程被解除阻塞。塞的进程被解除阻塞。14semWait、semSignal操作两个原语定义操作两个原语定义typedef struct semaphore int value ;Queue queue;Semaphore;Semaphores;15voidsemSignal(s)semaphores;if (+s.value=
13、0)从等待队列从等待队列queue中移出一进程;中移出一进程;将该进程置入就绪队列中;将该进程置入就绪队列中;voidsemWait(s)semaphores;if (-s.value 0)将进程置入等待队列将进程置入等待队列queue中;中;封锁进程;封锁进程;转进程调度程序;转进程调度程序;164.4 信号灯的应用信号灯的应用4.4.1 利用信号灯实现互斥利用信号灯实现互斥置信号灯置信号灯s的初值为的初值为1 P1 Pi PnsemWait(s)semWait(s)semWait(s)临界段临界段临界段临界段 临界段临界段 semSignal(s)semSignal(s)semSignal
14、(s)图图4-4 信号灯用于进程间互斥信号灯用于进程间互斥17信号灯的所有可能取值及意义为:信号灯的所有可能取值及意义为:s=1 无进程进入临界段无进程进入临界段 0 有一进程进入临界段有一进程进入临界段 -1 有一进程进入临界段,有一进程进入临界段,另一进程被阻塞另一进程被阻塞如有如有n个并发进程涉及一个临界段,则上个并发进程涉及一个临界段,则上式最后一行式最后一行s的取值为的取值为i,-(n-1)-(n-1)i-1i-1,表示当前有表示当前有|i|i|个进程被阻塞。个进程被阻塞。两个并发进程涉及一个临界段两个并发进程涉及一个临界段184.4.2 4.4.2 阻塞阻塞唤醒协议唤醒协议置信号灯
15、置信号灯s的初值为的初值为0 Pa Pb 计算计算func1()计算计算func2()L1:semWait(s)将计算结果存入缓冲区将计算结果存入缓冲区获得获得Pb的计算结果的计算结果 L2:semSignal(s)计算乘积计算乘积 :图图4-5 阻塞阻塞唤醒协议的实现唤醒协议的实现19从图中可以看出,当进程从图中可以看出,当进程a a执行到执行到L1L1点时,如进程点时,如进程b b还未执行到还未执行到L2L2点,也即点,也即func2func2函数的计算还未完成,进程函数的计算还未完成,进程a a就就要同步等待进程要同步等待进程b b。而进程而进程b b则不必同步等待进程则不必同步等待进程
16、a a,所所以说这种同步是非对称的,或可以称以说这种同步是非对称的,或可以称为为“半同步半同步”。204.4.3 两个进程间的同步两个进程间的同步 1.一个全同步的例子一个全同步的例子 设有两个进程设有两个进程Pa和和Pb。进程进程Pa每次执行每次执行一个计算,并将结果存入一个缓冲区;一个计算,并将结果存入一个缓冲区;进程进程Pb则从缓冲区中取出结果,并将结则从缓冲区中取出结果,并将结果打印出来。果打印出来。21 为了为了实现计算进程和打印进程之间的实现计算进程和打印进程之间的相互同步,就需要设置相互同步,就需要设置2个信号量个信号量S1和和S2。在在semWait、semSignal操作之前
17、操作之前两个信号量的含义为:两个信号量的含义为:S1表示缓冲区中表示缓冲区中是否已存入进程是否已存入进程Pa的计算结果,也即通的计算结果,也即通知进程知进程Pb是否可取出缓冲区中的信息并是否可取出缓冲区中的信息并送往打印机。送往打印机。S1值为:值为:0:Pa没存入新的计算结果没存入新的计算结果 1:Pa已存入新的计算结果已存入新的计算结果22 S2:表示缓冲区中的结果是否已被表示缓冲区中的结果是否已被进程进程Pb取去,也即通知进程取去,也即通知进程Pa是否是否可将新的计算结果再存入缓冲区。可将新的计算结果再存入缓冲区。S2的值为:的值为:0:Pb没取走缓冲区中的数据,没取走缓冲区中的数据,缓
18、冲区满缓冲区满 1:Pb已取走缓冲区中的数据,已取走缓冲区中的数据,缓冲区空缓冲区空23信号灯的初值可设置为:信号灯的初值可设置为:S1为为0:缓冲区还未存入数据缓冲区还未存入数据 S2为为1:缓冲空闲(相当于缓冲空闲(相当于Pb已取走数据)已取走数据)计算进程计算进程Pa打印进程打印进程Pb computing semWait(s1)semWait(s2)get(result)put(result)semSignal(s2)semSignal(s1)printing图图 4-64-6 两个进程之间的全同步两个进程之间的全同步1(-1)24信号灯的初值可设置为:信号灯的初值可设置为:S1为为0
19、:缓冲区还未存入数据缓冲区还未存入数据 S2为为1:缓冲空闲(相当于缓冲空闲(相当于Pb已取走数据)已取走数据)计算进程计算进程Pa打印进程打印进程Pb computing semWait(s1)semWait(s2)get(result)put(result)semSignal(s2)semSignal(s1)printing图图 4-64-6 两个进程之间的全同步两个进程之间的全同步1(-1)225信号灯的初值可设置为:信号灯的初值可设置为:S1为为0:缓冲区还未存入数据缓冲区还未存入数据 S2为为1:缓冲空闲(相当于缓冲空闲(相当于Pb已取走数据)已取走数据)计算进程计算进程Pa打印进程
20、打印进程Pb computing semWait(s1)semWait(s2)get(result)put(result)semSignal(s2)semSignal(s1)printing图图 4-64-6 两个进程之间的全同步两个进程之间的全同步1(-1)23(0)26信号灯的初值可设置为:信号灯的初值可设置为:S1为为0:缓冲区还未存入数据缓冲区还未存入数据 S2为为1:缓冲空闲(相当于缓冲空闲(相当于Pb已取走数据)已取走数据)计算进程计算进程Pa打印进程打印进程Pb computing semWait(s1)semWait(s2)get(result)put(result)semSi
21、gnal(s2)semSignal(s1)printing图图 4-64-6 两个进程之间的全同步两个进程之间的全同步1(-1)23(0)427信号灯的初值可设置为:信号灯的初值可设置为:S1为为0:缓冲区还未存入数据缓冲区还未存入数据 S2为为1:缓冲空闲(相当于缓冲空闲(相当于Pb已取走数据)已取走数据)计算进程计算进程Pa打印进程打印进程Pb computing semWait(s1)semWait(s2)get(result)put(result)semSignal(s2)semSignal(s1)printing图图 4-64-6 两个进程之间的全同步两个进程之间的全同步1(-1)2
22、3(0)45(0)28信号灯的初值可设置为:信号灯的初值可设置为:S1为为0:缓冲区还未存入数据缓冲区还未存入数据 S2为为1:缓冲空闲(相当于缓冲空闲(相当于Pb已取走数据)已取走数据)计算进程计算进程Pa打印进程打印进程Pb computing semWait(s1)semWait(s2)get(result)put(result)semSignal(s2)semSignal(s1)printing图图 4-64-6 两个进程之间的全同步两个进程之间的全同步1(-1)2,63(0)45(0)29信号灯的初值可设置为:信号灯的初值可设置为:S1为为0:缓冲区还未存入数据缓冲区还未存入数据 S
23、2为为1:缓冲空闲(相当于缓冲空闲(相当于Pb已取走数据)已取走数据)计算进程计算进程Pa打印进程打印进程Pb computing semWait(s1)semWait(s2)get(result)put(result)semSignal(s2)semSignal(s1)printing图图 4-64-6 两个进程之间的全同步两个进程之间的全同步1(-1)2,63(0),7(-1)45(0)30信号灯的初值可设置为:信号灯的初值可设置为:S1为为0:缓冲区还未存入数据缓冲区还未存入数据 S2为为1:缓冲空闲(相当于缓冲空闲(相当于Pb已取走数据)已取走数据)计算进程计算进程Pa打印进程打印进程
24、Pb computing semWait(s1)semWait(s2)get(result)put(result)semSignal(s2)semSignal(s1)printing图图 4-64-6 两个进程之间的全同步两个进程之间的全同步1(-1)2,63(0),7(-1)45(0)831信号灯的初值可设置为:信号灯的初值可设置为:S1为为0:缓冲区还未存入数据缓冲区还未存入数据 S2为为1:缓冲空闲(相当于缓冲空闲(相当于Pb已取走数据)已取走数据)计算进程计算进程Pa打印进程打印进程Pb computing semWait(s1)semWait(s2)get(result)put(re
25、sult)semSignal(s2)semSignal(s1)printing图图 4-64-6 两个进程之间的全同步两个进程之间的全同步1(-1)2,63(0),7(-1)45(0)89(0)32信号灯的初值可设置为:信号灯的初值可设置为:S1为为0:缓冲区还未存入数据缓冲区还未存入数据 S2为为1:缓冲空闲(相当于缓冲空闲(相当于Pb已取走数据)已取走数据)计算进程计算进程Pa打印进程打印进程Pb computing semWait(s1)semWait(s2)get(result)put(result)semSignal(s2)semSignal(s1)printing图图 4-64-6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程通信 进程 通信 PPT 课件
限制150内