正在加载图片...
(3)破坏部分分配条件 为了破坏部分分配条件,就要求所有进程一次性申请它所需要的全部资源。若系统有足够 的资源分配给进程,便一次把所有的资源分配给该进程。但在分配时只要有一种资源要求不能 满足,则资源全不分配,进程等待。显然这种资源分配方法造成了严重的资源浪费,以打印机为 例,一个作业可能只在最后完成时才需要打印计算结果,但在它运行前就把打印机分配给了它, 那么在作业的整个执行过程中打印机完全处于闲置状态。 (4)破坏环路条件 为了破坏环路条件,可以采用有序资源分配法。即将系统中的所有资源都按类型赋予一个 编号,如打印机为1,磁带机为2,等等。并且要求每一个进程均严格地按照编号递增的次序请 求资源。也就是说,只要进程提出请求资源Ri,则在以后的请求中,只能请求排在Ri后面的那 些资源。为资源编号〉,不能再要求编号低于Ri的那些资源。对资源请求作了这样的限制后, 系统中就不会再出现几个进程对资源的请求成为环路的情况。这种方法存在的主要问题是各 种资源编号后不宜修改,从而限制了新设备的增加:尽管在为资源编号时己考虑到大多数作业 实际使用这些资源的顺序,但也经常会发生作业使用资源的顺序与系统规定顺序不同的情况, 从而造成资源的浪费。 4死锁的避免 在预防死锁的方法中所采取的几种策略,总的说来都施加了较强的限制条件,虽然实现起 来较为简单,但却严重地损害了系统性能。在避免死锁的方法中,所施加的限制条件较弱,有可 能获得较好的系统性能。在该方法中,把系统的状态分为安全状态和不安全状态,只要能使系 统始终处于安全状态,便可避免死锁的发生。 (1)安全与不安全状态 在避免死锁的方法中,允许进程动态地申请资源,系统在进行资源分配之前,先计算资源 分配的安全性。若此次分配不会导致系统进入不安全状态,便将资源分配给进程,否则进程等 若在某一时刻,系统能按某种顺序如(P1、P2、 n)来为每个进程分配其所需的资 源,直至最大需求,使每个进程都可顺利地完成,则称此时的系统状态为安全状态,称序列(P1、 P2、…、pn>为安全序列。若某一时刻系统中不存在这样一个安全序列,则称此时的系统状态 为不安全状态。 虽然并非所有不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状 态:反之,只要系统处于安全状态,系统便可避免进入死锁状态。 (2)利用银行家算法避免死锁 Dijkstra给出的银行家算法是具有代表性的避免死锁算法。为实现银行家算法,系统中必 须设置若干数据结构。 银行家算法的数据结构如下 (1)可利用资源向量 Available,它是一个含有m个元素的数组,其中的每一个元素代表一 类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源数目。其数值随该类资源 的分配和回收而动态地改变。如果 Available(j)=K,表示系统中现有Rj类资源k个。 (2)最大需求矩阵Max,这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程 对m类资源的最大需求。如果Max(i,j)=k,表示进程i需要Rj类资源的最大数目为k (3)分配矩阵 Allocation,这是一个n×m的矩阵,它定义了系统中每一类资源当前己分配 给每一个进程的资源数。如果 Allocation(i,j)=k,表示进程i当前已分到Rj类资源的数目 为k。 Allocations表示进程i的分配向量,由矩阵 Allocation的第i行构成。 (4)需求矩阵Need,它是一个n×m的矩阵,用以表示每一个进程还需要的各类资源数 如果 Need G,j)哇,表示进程i还需要R类资源k个,才能完成其任务。 Needi表示进程(3)破坏部分分配条件 为了破坏部分分配条件,就要求所有进程一次性申请它所需要的全部资源。若系统有足够 的资源分配给进程,便一次把所有的资源分配给该进程。但在分配时只要有一种资源要求不能 满足,则资源全不分配,进程等待。显然这种资源分配方法造成了严重的资源浪费,以打印机为 例,一个作业可能只在最后完成时才需要打印计算结果,但在它运行前就把打印机分配给了它, 那么在作业的整个执行过程中打印机完全处于闲置状态。 (4)破坏环路条件 为了破坏环路条件,可以采用有序资源分配法。即将系统中的所有资源都按类型赋予一个 编号,如打印机为 1,磁带机为 2,等等。并且要求每一个进程均严格地按照编号递增的次序请 求资源。也就是说,只要进程提出请求资源 Ri,则在以后的请求中,只能请求排在 Ri 后面的那 些资源。为资源编号〉,不能再要求编号低于 Ri 的那些资源。对资源请求作了这样的限制后, 系统中就不会再出现几个进程对资源的请求成为环路的情况。这种方法存在的主要问题是各 种资源编号后不宜修改,从而限制了新设备的增加:尽管在为资源编号时己考虑到大多数作业 实际使用这些资源的顺序,但也经常会发生作业使用资源的顺序与系统规定顺序不同的情况, 从而造成资源的浪费。 4 死锁的避免 在预防死锁的方法中所采取的几种策略,总的说来都施加了较强的限制条件,虽然实现起 来较为简单,但却严重地损害了系统性能。在避免死锁的方法中,所施加的限制条件较弱,有可 能获得较好的系统性能。在该方法中,把系统的状态分为安全状态和不安全状态,只要能使系 统始终处于安全状态,便可避免死锁的发生。 (1)安全与不安全状态 在避免死锁的方法中,允许进程动态地申请资源,系统在进行资源分配之前,先计算资源 分配的安全性。若此次分配不会导致系统进入不安全状态,便将资源分配给进程,否则进程等 待。 若在某一时刻,系统能按某种顺序如〈P1、P2、…、Pn〉来为每个进程分配其所需的资 源,直至最大需求,使每个进程都可顺利地完成,则称此时的系统状态为安全状态,称序列〈P1、 P2、…、pn>为安全序列。若某一时刻系统中不存在这样一个安全序列,则称此时的系统状态 为不安全状态。 虽然并非所有不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状 态:反之,只要系统处于安全状态,系统便可避免进入死锁状态。 (2)利用银行家算法避免死锁 Dijkstra 给出的银行家算法是具有代表性的避免死锁算法。为实现银行家算法,系统中必 须设置若干数据结构。 银行家算法的数据结构如下: (1)可利用资源向量Available,它是一个含有m个元素的数组,其中的每一个元素代表一 类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源数目。其数值随该类资源 的分配和回收而动态地改变。如果 Available (j)=K,表示系统中现有 Rj 类资源 k 个。 (2)最大需求矩阵 Max,这是一个 n ×m 的矩阵,它定义了系统中 n 个进程中的每一个进程 对 m 类资源的最大需求。如果 Max(i,j〉=k,表示进程 i 需要 Rj 类资源的最大数目为 k。 (3)分配矩阵Allocation,这是一个n×m的矩阵,它定义了系统中每一类资源当前己分配 给每一个进程的资源数。如果 Allocation (i,j)=k,表示进程 i 当前已分到 Rj 类资源的数目 为 k。Allocationi 表示进程 i 的分配向量,由矩阵 Allocation 的第 i 行构成。 (4)需求矩阵 Need,它是一个 n×m 的矩阵,用以表示每一个进程还需要的各类资源数。 如果 Need G,j〉哇,表示进程 i 还需要 RJ 类资源 k 个,才能完成其任务。Needi 表示进程 i
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有