欢迎来到天天文库
浏览记录
ID:58052229
大小:864.00 KB
页数:84页
时间:2020-09-04
《中南大学数学院计算机操作系统第四章课件进程通信.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第四章进程通信14.1进程的同步与互斥4.1.1同步与互斥的概念两个或两个以上的进程要协作完成一个任务,它们之间就要互相配合,需要在某些动作之间进行同步。进程间另一种关系是互斥,这种关系一般发生在两个或两个以上的进程竞争某些同时只能被一个进程使用的资源的情况下。24.1.2临界段问题在一段时间内只能允许一个进程访问的资源称为临界资源,如打印机、磁带机、光盘刻写机、绘图仪等进程执行的访问临界资源的程序段称为临界段或互斥段。临界资源与临界段3统计两个进程P1和P2对共享变量count访问计数:P1::P2::R1=count(0)R2=count(1)R1=R1+1R2=R2+1count=R1(
2、1)count=R2(2)::结果:count=2设count初值=04两个进程可能的相对执行次序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的两个程序段就是临界段,诸进程必须互斥地进入临界段。54.2进程间互斥控制方法锁可以用于控制临界段的互斥执行。锁有两个状态,一个是打开状态,另一个是关闭状态,故锁可以用布尔变量表示。在C中,锁变量可以定义为char或
3、int类型变量。设x为锁变量,则定义:x=0锁的打开状态;1锁的关闭状态。4.2.1锁的表示和操作6当进程希望进入临界段时,首先要测试锁的状态,如锁是打开的,表示无进程处于临界段,那么可以关闭该锁,并进入临界段。当该进程处于临界段时,其他试图进入临界段的进程由于在测试锁的状态时发现它处于关闭状态,就只能在临界段外等待。用锁变量控制临界段的执行7用锁操作控制进程对临界段的互斥执行(a)LOCK(x)x=0?x=1临界段+-UNLOCK(x)临界段x=0(b)84.2.2锁的安全控制锁的关闭操作LOCK包括测试和关闭两个操作步骤,这两个操作步骤涉及临界资源x,故这段程序也是临界段。假定锁是打开的,
4、当一个进程P1在测试锁的状态后,还没来得及关闭它的一瞬间,发生了中断;中断返回时,系统可能调度另一个进程P2执行。P2执行时也对该锁的状态进行测试,发觉它处于打开状态,于是关闭该锁,并进入临界段。那么两个进程就同时处于一个临界段之中。91.测试并设置指令test&set有些计算机提供专门的锁操作指令test&set,该指令首先测试锁变量的值,如为1,则重复执行本指令;如为0,则立即将锁变量的值置为1。由于test&set是一条完整的指令,而在一条指令的执行中间是不会被中断的,故保证了锁的测试和关闭操作的连续性。102.交换指令—用8086指令实现锁操作check:MOVAL,1;置测试单元寄存
5、器AL的值为1LOCKXCHGX,AL;在本指令的执行时封锁总线,;交换锁变量X与测试单元的值TESTAL,AL;测试AL的值JNZcheck;如AL非0,即原锁处于关闭状态,:;跳转至check,重复测试过程临界段;锁变量X已置为1113.开、关中断法1)这种方法只能用于单CPU系统。2)如果临界段操作比较复杂,执行时间较长,那么长时间地关闭中断会降低系统对外部中断响应的速度,影响系统处理紧迫事件的能力;3)采用开、关中断的硬件锁方法禁止了其他无关的进程进入不同的临界段,这种做法显然伤害了很多的“无辜者”。关中断临界区开中断124.用硬件锁锁软件锁,用软件锁锁临界段软件锁的LOCK操作包括测
6、试和关闭两个操作步骤,它本身也是一种临界段,故可以用硬件锁——开、关中断保证软件锁操作的完整性。由于软件锁是一种程序长度最短的临界段,故用开、关中断的方法保证锁操作的完整性几乎不会影响到系统响应其他的中断请求。用软件锁保证临界段执行的独占性,不会影响到其他无关进程进入不同的临界段,这是一种安全而高效的锁。LOCK(x)关中断开中断x=0?–+x=1开中断临界段图4-3复合锁的操作流程134.3信号灯和semWait、semSignal操作信号灯定义成具有整型值,并能对其施加以下三种操作的变量,除了这三种操作之外的任何操作都不能测试和处理信号灯的值。(1)初始化操作,信号灯能初始化为非负的值。(
7、2)semWait操作,能减小信号灯的值,如结果值为负,执行semWait操作的进程就被封锁。(3)semSignal操作,能增加信号灯的值,如果结果值非正,那么原先因执行semWait操作而阻塞的进程被解除阻塞。14semWait、semSignal操作两个原语定义typedefstructsemaphore{intvalue;Queuequeue;}Semaphore;Semaphores;1
此文档下载收益归作者所有