文章目录
静态分配:
系统在调度作业时,根据作业所需资源进行分配;并在作业运行完毕时,收回所分配的全部资源。可能造成资源浪费。
动态分配:
系统对进程一级采用资源动态分配方法。
系统在进程运行中,根据进程提出的资源需求,进行资源的动态分配和回收。
计算机中物理资源与虚拟资源分析
1)资源描述器
定义:描述各类资源的最小分配单位的数据结构称为资源描述器 rd(resource descriptor)
内容:资源名、资源类型、最小分配单位的大小、地址、分配标志、描述器链接信息、存取权限、密级、存取时间 。
2)资源信息块RIB(resource information block)
定义: 描述某类资源的请求者、可用资源和该类资源分配程序等 必要信息的数据结构。
内容:
资源分配策略
1)分配原则:
2)常用资源分配策略:
三、死锁 死锁的定义
一组并发进程彼此等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源,从而造成无休止的等待而不能继续向前推进的状态,称为进程死锁,这一组进程就称为死锁进程。
死锁的起因条件
起因:
上述四个条件只要有一个不满足,就可排除死锁。但必要条件成立,系统未必一定发生死锁。
解决死锁的方法有两类:
1)不让死锁发生:
2)允许死锁发生:
即发生后在解决死锁
预防死锁
在系统设计时,采用某种策略,限制并发进程对资源的请求,从而使得死锁的必要条件在系统执行的任何时间都不满足:打破死锁发生的四个必要条件之一。
1)打破互斥条件
互斥条件是由于设备本身特性决定的,不能简单地将其打破,只有通过改造设备特性来实现。
2)破坏“不可剥夺”条件
这意味着进程已经占有的资源,在运行过程中可能会暂时释放,从而打破了不剥夺条件,适用于状态易于保存和恢复的资源。
此方法实现比较复杂,延长进程的周转时间,增加系统开销,降低系统吞吐量。
3)破坏“请求和保持”条件
采用设备的预先静态分配法:即在进程开始运行前,预先分配给其所需的全部资源,若系统不能满足,则进程阻塞,直到系统满足其要求。打破了“请求和保持”条件。
4)破坏“循环等待”条件
采用资源有序使用法,系统将所有资源按类型进行线性排队,并赋予不同的序号,并且要求每个进程均应严格按照递增的次序请求资源,否则操作系统不予分配。
安全状态: 在现有的资源请求和使用状态下,如能使得系统内所有进程都能找到一种资源分配方式,使所需资源能满足,从而能正常运行。此时由系统中所有进程构成的序列P1,…,Pn,称为安全序列。
安全序列: 如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和,系统处于安全状态。
不安全状态: 不存在一个安全序列;只是可能会发生死锁,但不安全状态不一定就是死锁。
系统允许进程动态地申请资源,如果措施得当,可以使系统获得较为满意的系统性能。
具体作法是:系统在分配资源过程中,根据资源的使用情况提前作出预测,若分配资源后系统处于安全态,就把资源分配给该进程,否则不分配,从而避免死锁的发生。
死锁的避免与死锁的预防的区别在于:死锁的预防是严格地至少破坏死锁必要条件之一,使之不在系统中出现,而死锁的避免是不那么严格地限制必要条件的存在,目的是提高系统的资源利用率。
死锁的检测与解除
系统为进程分配资源时不采取任何措施,但提供了检测和解除死锁的手段。
死锁的预防策略是非常保守的,通过限制访问资源和在进程上强加约束来解决死锁问题。死锁检测(deadlock detection)策略则完全相反,不限制资源访问或约束进程行为,OS周期性地执行一个算法检测死锁发生的四个必要条件。
死锁检测:
允许死锁发生,操作系统不断监视系统进展情况,判断死锁是否发生,一旦死锁发生则采取专门的措施,解除死锁并以最小的代价恢复操作系统运行。
检测的时机:
每当进程请求资源时,就修改资源图,并检查是否构成环路条件,若有,则通过清除回路中的进程,使回路断开,破坏死锁。开销大,不常用;周期性检测 (类似于银行家算法) :其策略是查找一个进程,使得可用资源可以满足该进程的资源请求,然后假设同意分配这些资源,让进程运行直到完成,再释放它的所有资源,然后寻找另一个可以满足资源请求的进程;系统资源利用率下降时检测死锁。
死锁的检测机制:
死锁的解除: