第六章 进程间的制约关系
1) 在多道程序设计环境下,进程程序的执行具有并发性,在相同的前提条件下,两次
执行的结果有可能不相同,使得一个进程对另一个进程的影响无法预测,在操作系统里把这种由于时间因素的影响而产生的错误称为:“与时间有关的错误” 2) 进程间具有两种制约关系:互斥和同步
a. 由于对共享资源的争夺,导致进程之间出现互斥关系 b. 由于对任务的协调工作,导致进城之间出现同步关系
3) 把那些可以共享的资源(文件、队列、缓冲区、表格、变量······)统称为
共享变量或临界资源
与一个共享变量(或共享资源)交往的多个进程,为了保证它们各自运行结果的正确性,当其中的一个进程正在对该变量(临界资源)进行操作时,就不允许其他进程同时对它操作。进程的这种制约关系被称为“互斥” 4) 注意(互斥进程)
a. 作为具有互斥关系的进程,它的一部分程序可能用于内部的计算以及内部的数
据处理等,那么只有设计共享变量的那一部分程序,才真正需要保证互斥地执行,把进程程序中“真正需要保证互斥执行”的那一段程序(或在每个进程中访问临界资源的那段代码)称为该进程的临界区(临界段)
b. 具有互斥关系的进程,并不关心对方的存在,即使对方不存在,自己也能够正
确地运行 c.
具有互斥关系的那些进程程序中的临界区,虽然都是针对同一个共享变量的程序,但在其上执行的操作可以相同也可以不同
d. 进程的临界区是相对于某个共享变量而言的,不同共享变量的临界区之间,不
存在互斥关系
信号量及其定义在信号量上的P、V操作:
1) 如何来保证进程在临界区执行的互斥性,由信号量及其定义在信号量上的P、V操
作具体完成,但遵循如下规则
a. 如果有若干个进程希望进入临界区时,至少应该允许一个进入,而不能谁也进
不去
b. 每次只允许一个进程进入临界区 c.
进入临界区的进程不能无限期地把持临界区
2) 同步
a. 需要在某些点上协调相互的动作,谁先到达谁后到达是有顺序要求的 b. 这些进程都应该了解对方的工作,对方如果不存在,或任何一方单独运行,就
会出现差错 c.
一方或双方的运行会直接地依赖于对方所产生的的信息,或发出的消息
3) 一个进程运行到某一点时,除非合作进程已经完成了某种操作或发来了信息,否则
就必须暂时等待那些操作的完成或信息的到来。
进程间的这种关系被称为“同步”,暂停以取得同步的那一点称为“同步点”,需要等待一个进程完成的操作或发送的信息,称为“同步条件”
4) 一个信号量的建立必须经过说明,即应该准确说明S的意义和初值(不能为负)
每个信号量都有相应的队列,在建立信号量时,队列为空 可进行原子操作 P(wait)、V(signal)操作 5) 信号量S上的P操作
① Vs = Vs-1,把当前信号量S的取值减1
② 若Vs >= 0,则调用进程继续运行,若Vs < 0,则调用进程由运行状态变为阻塞状态,到与该信号量有关的队列Vq上排队等待,直到其他进程在S上执行V操作将其释放为止
6) 信号量S上的V操作
① Vs = Vs + 1,把当前信号量S的取值加1
② 若Vs > 0,则调用进程继续执行,若Vs <= 0,则先从与该信号量有关的队列Vq上摘下一个等待进程,让它从阻塞状态变为就绪状态,到就绪队列里排队,然后调用进程继续执行 注意:
a. 设置的信号量初值一定是一个非负的整数。而运行过程中,信号量的取值就不
再受“非负”所限了
b. 只要进入了P(S)或V(S),这两个动作就必须顺序地做完,中间不能被打断,为
保证执行时的不可分割性,常采用关、开中断的方法来具体实现信号量上的P、V操作 c.
如果一个进程在做P操作后被阻塞,到关于信号量的队列上去排队等待,其含义是让进程的PCB到此队列上排队
7) 用P、V操作实现资源分配
做P操作即是申请一个资源,做V操作即是释放一个用完的资源 P操作后,若Vs > 0时,Vs的值就是这种资源的剩余数
若Vs < 0时,表示现在已经没有资源可以分配,申请资源的进程只能被阻塞到申请队列Vq上去排队等待,Vs的绝对值表示提出资源请求,但没有分配到资源的进程个数
V操作后,若Vs <= 0,表示申请资源的等待队列上有进程在等待该资源(表示V操作之前Vs <= -1,即至少有一个进程在队列上等待使用该资源),所以将该队列上的一个进程摘下,让它到就绪队列中排队
若Vs > 0,表示V操作之前Vs >= 0,即资源等待队列上没有进程在等待,只是收回了一个资源
1) 死锁:多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程将无法向前推
进
2) 定义:即指系统中若存在一组(至少两个或以上)进程,它们中的每一个都占用了某种
资源而又都在等待其中另一个所占用的资源,这种等待永远不会结束,这就是死锁 3) 产生死锁的4个必要条件
a. 互斥条件:进程对所分配的资源进行排它性使用,即在一段时间内,某资源只能被
一个进程占用
b. 部分分配条件(占用并等待):进程由于申请不到所需要的资源而等待时,仍然占
据着已经分配到的资源 c.
非剥夺条件:已经分配给进程的资源,别的进程不能强行夺取资源,只能被占用它的进程自己释放
d. 循环等待条件:在多个进程之间,由于资源的占有和请求关系,从而形成了一个循
环等待的态势
4) 处理死锁的方法:
a. 预防死锁:破坏产生死锁的4个必要条件之一,使系统不具备产生思索的条件 b. 忽略死锁:任凭死锁出现,当系统中出现死锁时,就将系统重新启动 c.
避免死锁:在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而可以避免死锁
d. 检测死锁并恢复:在死锁发生后,采取相应措施加以恢复。如:撤销一些进程,回
收它们的资源,将它们分配给已处于阻塞状态的进程,使其继续执行
5) 预防死锁:
a. 互斥条件是非共享设备所必须的,不仅不能改变,还应加以保证
b. 破坏占用并等待条件:所有进程在开始运行之前,必须一次性地申请其在整个过程
中所需要的全部资源,一次性分配 c.
破坏“分剥夺条件”:当进程提出新的资源请求得不到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请
d. 破坏循环等待条件:将系统中的所有资源进行统一编号,进程按编号的顺序,由小
到大提出对资源使用的申请
6) 在信号量上的P、V操作,可以看作是进程间的一种通信方式,这种通信并不在进程间
真正交换信息,而只是双方事先的一种约定。因此,用P、V操作实现的通信,称为进程间的一种低级通信
为了使进程间能够真正交换数据,操作系统备有高级通信命令,提供给用户在程序一级使用
高级进程通信分为直接通信和间接通信两种方式 间接通信是指通过信箱来传递消息