操作系统复习----第五章(资源分配与调度)

一、资源管理概述

资源管理功能

  • 资源数据结构的描述
  • 确定资源的分配原则
  • 实施资源分配与回收
  • 存取控制与安全保护

资源分配方式

静态分配:
系统对作业一级采用资源静态分配方法。
系统在调度作业时,根据作业所需资源进行分配;并在作业运行完毕时,收回所分配的全部资源。可能造成资源浪费。

动态分配:
系统对进程一级采用资源动态分配方法。
系统在进程运行中,根据进程提出的资源需求,进行资源的动态分配和回收。

计算机中物理资源与虚拟资源分析

在这里插入图片描述

二、资源管理机制与策略

资源分配机制—数据结构

1)资源描述器
定义:描述各类资源的最小分配单位的数据结构称为资源描述器 rd(resource descriptor)
内容:资源名、资源类型、最小分配单位的大小、地址、分配标志、描述器链接信息、存取权限、密级、存取时间 。
2)资源信息块RIB(resource information block)
定义: 描述某类资源的请求者、可用资源和该类资源分配程序等 必要信息的数据结构。
内容:
在这里插入图片描述

资源分配策略

1)分配原则:

  • 提高资源利用率;
  • 在合理的时间内使用所有用户都可以得到所需资源(不要出现饿死的情况)——公平;
  • 对独占资源实施互斥使用;
  • 防止因资源分配不当而引起的死锁;这些目标相互牵制,需要权衡。

2)常用资源分配策略:

  • 先请求先服务 FCFS/FIFO: 每一个新产生的请求均排在队尾;当资源可用时,取队首元素,并满足其需要。
  • 优先调度: 对每一个进程指定一个优先级;每一个新产生的请求,按其优先级的高低插到相应的位置;
  • 针对设备特性的调度策略: 确定调度目标–>移臂调度–>旋转调度

三、死锁

死锁的定义

一组并发进程彼此等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源,从而造成无休止的等待而不能继续向前推进的状态,称为进程死锁,这一组进程就称为死锁进程。

死锁的起因条件

起因:

  • 系统资源不足
  • 进程推进顺序、速度不合理

关于死锁的一些结论:

  • 参与死锁的进程最少是两个,即两个以上进程才会出现死锁;
  • 参与死锁的进程至少有两个已经占有资源;
  • 参与死锁的所有进程都在等待资源;
  • 参与死锁的进程是当前系统中所有进程的子集。

注:如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。

死锁产生的四个必要条件:

  • 互斥使用(资源独占): 一个资源每次只能给一个进程使用;
  • 不可强占(不可剥夺): 资源申请者不能强行从资源占有者手中夺取资源,资源只能由占有者自愿释放;
  • 请求和保持(部分分配,占有申请): 一个进程在申请新的资源的同时保持对原有资源的占有,是动态申请,动态分配。
  • 循环等待: 存在一个进程等待队列 {P1 , P2 , … , Pn}, 其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路。

上述四个条件只要有一个不满足,就可排除死锁。但必要条件成立,系统未必一定发生死锁。

解决死锁问题的策略

解决死锁的方法有两类:
1)不让死锁发生:

  • 静态策略:设计合适的资源分配算法,不让死锁发生
  • 动态策略:控制性分配资源-----死锁避免

2)允许死锁发生:
即发生后在解决死锁

预防死锁

在系统设计时,采用某种策略,限制并发进程对资源的请求,从而使得死锁的必要条件在系统执行的任何时间都不满足:打破死锁发生的四个必要条件之一。

1)打破互斥条件
互斥条件是由于设备本身特性决定的,不能简单地将其打破,只有通过改造设备特性来实现。
2)破坏“不可剥夺”条件

  • 方案一:在允许进程动态申请资源(需要资源时才提出请求)前提下规定,一个进程在申请新的资源不能立即得到满足而变为等待状态之前,必须释放已占有的全部资源,若需要再重新申请。
  • 方案二:当一个进程申请的资源被其他进程占用时,可以通过OS抢占这一资源。

这意味着进程已经占有的资源,在运行过程中可能会暂时释放,从而打破了不剥夺条件,适用于状态易于保存和恢复的资源。
此方法实现比较复杂,延长进程的周转时间,增加系统开销,降低系统吞吐量。

3)破坏“请求和保持”条件
采用设备的预先静态分配法:即在进程开始运行前,预先分配给其所需的全部资源,若系统不能满足,则进程阻塞,直到系统满足其要求。打破了“请求和保持”条件。
4)破坏“循环等待”条件
采用资源有序使用法,系统将所有资源按类型进行线性排队,并赋予不同的序号,并且要求每个进程均应严格按照递增的次序请求资源,否则操作系统不予分配。

避免死锁

安全状态: 在现有的资源请求和使用状态下,如能使得系统内所有进程都能找到一种资源分配方式,使所需资源能满足,从而能正常运行。此时由系统中所有进程构成的序列P1,…,Pn,称为安全序列。
安全序列: 如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和,系统处于安全状态。

注:安全状态一定是没有死锁发生的。

不安全状态: 不存在一个安全序列;只是可能会发生死锁,但不安全状态不一定就是死锁。

银行家算法避免死锁:
系统允许进程动态地申请资源,如果措施得当,可以使系统获得较为满意的系统性能。
具体作法是:系统在分配资源过程中,根据资源的使用情况提前作出预测,若分配资源后系统处于安全态,就把资源分配给该进程,否则不分配,从而避免死锁的发生。
死锁的避免与死锁的预防的区别在于:死锁的预防是严格地至少破坏死锁必要条件之一,使之不在系统中出现,而死锁的避免是不那么严格地限制必要条件的存在,目的是提高系统的资源利用率。

死锁的检测与解除

系统为进程分配资源时不采取任何措施,但提供了检测和解除死锁的手段。
死锁的预防策略是非常保守的,通过限制访问资源和在进程上强加约束来解决死锁问题。死锁检测(deadlock detection)策略则完全相反,不限制资源访问或约束进程行为,OS周期性地执行一个算法检测死锁发生的四个必要条件。
死锁检测:
允许死锁发生,操作系统不断监视系统进展情况,判断死锁是否发生,一旦死锁发生则采取专门的措施,解除死锁并以最小的代价恢复操作系统运行。
检测的时机:

  1. 每当进程请求资源时,就修改资源图,并检查是否构成环路条件,若有,则通过清除回路中的进程,使回路断开,破坏死锁。开销大,不常用;
  2. 周期性检测 (类似于银行家算法) :其策略是查找一个进程,使得可用资源可以满足该进程的资源请求,然后假设同意分配这些资源,让进程运行直到完成,再释放它的所有资源,然后寻找另一个可以满足资源请求的进程;
  3. 系统资源利用率下降时检测死锁。

死锁的检测机制:

  • 每个进程和资源分配唯一编号
  • 设置资源分配表,记录进程与其占有资源的关系
  • 设置进程等待表,记录进程与要申请的资源之间的关系

死锁的解除:

  • 重新启动
  • 进程退回:将死锁进程退回到前一个检查点,并重新从该检查点启动这些进程(需系统提供检查点和重新启动机制)。
  • 撤销进程::撤销死锁进程,将它们占有的资源分配给另一些死锁进程,直到死锁解除。
  • 剥夺资源:使用挂起/激活机制挂起一些进程,剥夺他们占有的资源给死锁进程,以解除死锁,待以后条件满足时再激活被挂起的进程。

死锁相关知识小结:

在这里插入图片描述

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值