返回顶部

资源分配与调度

作者:@cherish.
课程学习内容为作者从学校的PPT处摘抄,仅供自己学习参考,若需转载请注明出处:https://www.cnblogs.com/cherish-/p/15758210.html


资源管理概述

资源管理的目的和任务

  • 保证资源的高利用率;
  • 在合理时间内使所有顾客有获得所需资源的机会;
  • 对不可共享的资源实施互斥使用;
  • 防止由资源分配不当而引起的死锁。

资源管理功能

  • 资源数据结构的描述:包含资源的物理名、逻辑名、类型、地址、分配状态等信息。
  • 确定资源的分配原则(调度原则):决定资源应分给谁,何时分配,分配多少等问题。
  • 实施资源分配:执行资源分配;资源回收工作。
  • 存取控制和安全保护:对资源的存取进行控制并对资源实施安全保护措施。

资源的静态分配和动态分配

  • 资源的静态分配:系统对作业一级采用资源静态分配方法。系统在调度作业时,根据作业所需资源进行分配;并在作业运行完毕时,收回所分配的全部资源。这种分配通常称为资源的静态分配。
  • 资源的动态分配:资源对程序一级采用资源动态分配方法。系统在进程运行中,根据进程提出的资源需求,进行资源的动态分配和回收。这种分配通常称为资源的动态分配。

虚拟资源

  • 操作系统对资源区分两种不同的概念:1.物理资源(实资源);2.虚拟资源(逻辑资源):某些物理资源有限,采用其它物理资源改造成该类资源使用。

  • 目的:1.方便用户使用;2.资源可动态分配,提高资源利用率。

  • 计算机系统中的物理资源与虚拟资源分析

    资源类别 物理资源 虚拟(逻辑) 映射
    处理机 CPU 进程 进程调度
    存储器 主存 虚存(程序地址空间) 地址映射
    设备 外部设备 逻辑设备 虚拟设备 设备分配 动态映射
    信息 文件物理结构 文件逻辑结构 磁盘空间分配文件目录查找

资源分配机构和策略

资源分配的机构

资源描述器

定义:描述各类资源的最小分配单位的数据结构称为资源描述器 rd。如:主存分区分配方法中,最小分配单位为主存分区。

内容:资源名、资源类型、最小分配单位的大小、地址、分配标志、描述器链接信息、存取权限、密级、存取时间。

资源信息块

定义:描述某类资源的请求者、可用资源和该类资源分配程序等必要信息的数据结构。

内容

资源信息块示例

资源分配策略

常用的资源分配策略

  • 先请求先服务:每一个新产生的请求均排在队尾;当资源可用时,取队首元素,并满足其需要。排序原则:按请求的先后次序排序。
  • 优先调度:对每一个进程指定一个优先级;每一个新产生的请求,按其优先级的高低插到对应的位置;当资源可用时,取队首元素并满足其需要。排序原则:按优先级的高低排序。

死锁

什么是死锁

在两个或多个并发进程中,如果每个进程持有某种资源而又都等待着别的进程释放它或它们现在保持着的资源,否则就不能向前推进。此时,称这一组进程产生了死锁。

死锁实例

设备共享:进程p1p2共享一台打印机和一台输入机

时刻 t1

进程 p1—— 占用打印机,

进程 p2 —— 占用输入机;

时刻 t2

进程 p1 —— 又请求输入机,

进程 p2 —— 又请求打印机。

时刻t2后,系统出现僵持局面,即出现了死锁现象。

没有妹子怎么出门;不出门怎么有妹子(×

进程——资源分配图

  • 约定Pi→Rj为请求边,表示进程Pi申请资源类Rj中的一个资源得不到满足而处于等待Rj类资源的状态,该有向边从进程开始指到方框的边缘,表示进程Pi申请Rj类中的一个资源。

  • Rj→Pi为分配边,表示Rj类中的一个资源已被进程Pi占用

信号灯的P、V操作导致死锁

设进程p1与进程p2共享一台打印机(r1) 和一台输入机(r2),用信号灯的p、v操作表示资源的申请和释放。 信号灯设置—— s1:表示r1可用,初值为1;s2:表示r2可用,初值为1讨论两种资源请求序列,哪种情况可能产生互相死等的局面。

程序描述如下:

程序描述2有可能出现死锁。

生产者——消费者问题

当缓冲区满时,生产者仍可顺利执行p(mutex)操作,于是它对缓冲区有控制权,然后,当它执行p(empty)时,由于没有空缓冲区被挂起。能将这个生产者释放的是有一个消费者从缓冲区中取走一个产品,并执行v(empty)操作,但由于缓冲区已被生产者占用,出现了死锁。

死锁的起因和条件

引起死锁的原因

  • 系统资源不足
  • 进程推进顺序非法

产生死锁的必要条件

  • 互斥条件——涉及的资源是非共享的,即为临界资源。
  • 不剥夺条件——进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走。
  • 部分分配——进程每次申请它所需要的一部分资源。在等待一新资源的同时,进程继续占用已分配到的资源。
  • 环路条件——存在一种进程的循环链,链中的每一个进程已获得的资源同时被链中下一个进程所请求。

系统状态分析

初始状态描述

假定一个系统包括n个进程和m类资源,表示如下

  • 一组确定的进程集合,记作:p={p1,p2,...,pn}
  • 一组不同类型的资源集合,记作:r={r1,r2,...,rm}
  • 矢量w说明各类可利用资源的总的数目:w={w1,w2,...,wm}

资源请求矩阵

在时刻t资源请求矩阵表示如下:

d(t)=[d11d12...d1md21d22...d2m............dn1dn2...dnm]

dij表示进程pi还需要j类资源的数目。

资源分配矩阵

在时刻t资源分配矩阵表示如下:

a(t)=[a11a12...a1ma21a22...a2m............an1an2...anm]

aij表示进程pi已占有j类资源的数目。

解决死锁问题的策略

必须要破坏产生死锁的四个必要条件之一。

死锁预防——静态分配策略

在作业调度时为选中的作业分配它所需要的所有资源,资源一旦分配给该作业后,在其整个运行期间这些资源为它独占。

静态分配策略的缺点:一个用户(进程)在程序运行之前很难提出将要使用的全部设备;用户作业需要的某些资源可能在后期使用;设备(资源)的浪费太大,有些资源在进程运行过程中可能只有很少的时间会用到,有的甚至根本不会用到,例如一个分枝语句。

死锁避免——有序资源分配法

系统中所有资源都给定一个唯一的编号,所有分配请求必须以上升的次序进行。当遵守上升次序的规则时,若资源可用,则予以分配;否则,请求者等待。

优点:提高了资源使用效率

缺点:进程实际使用资源的顺序不一定与资源的编号相一致

银行家算法

背景:银行家拥有一笔周转资金;客户要求分期贷款,如果客户能够得到各期贷款,就一定能够归还贷款,否则就一定不能归还贷款。银行家应谨慎的贷款,防止出现坏账。

算法思想:

  • 对每个请求进行检查,是否会导致不安全状态。若是则不满足该请求;否则便满足。
  • 检查状态是否安全:是否有足够的资源满足一个距其最大需求最近的进程,如此反复下去。如果所有资源最终都被收回,则该状态是安全状态,最初的请求可以批准。
  • 按某种顺序并发进程都能达到获得最大资源而顺序完成的序列为安全序列。

银行家算法示例

系统拥有某类资源10个,现有进程P、Q、R共享该类资源,它们申请该类资源的最大需求量如下。

进程 最大需求量 已占有资源 现申请资源个数
P 8 4 1
Q 4 2 1
R 9 2 1

当这些进程动态申请资源时,按银行家算法应如何分配,能保证不发生死锁。QPR

死锁的检测和解除

解决死锁问题的一条途径是死锁检测和解除,这种方法对资源的分配不加任何限制,也不采取死锁避免措施,但系统定时地运行一个“死锁检测”程序,判断系统内是否已出现死锁,如果检测到系统已发性了死锁,再采取措施解除它。

资源分配图检测系统死锁状态

  • 如果进程资源分配图中无环路,则此时系统没有发送死锁。
  • 如果进程资源分配图中有环路,且每个资源类中仅有一个资源,则系统中发生了死锁,此时,环路是系统发生死锁的充要条件,环路中的进程便为死锁进程。
  • 如果进程资源分配图中有环路,且涉及的资源类中有多个资源,则环路的存在只是产生死锁的必要条件而不是充分条件。

死锁的解除

  • 立即结束所有进程的执行,并重新启动操作系统。方法简单,但以前工作全部作废,损失可能很大。
  • 撤销陷于死锁的所有进程,解除死锁继续运行。
  • 逐个撤销陷于死锁的进程,回收其资源,直至死锁解除。
  • 剥夺陷于死锁的进程占用的资源,但并不撤销它, 直至死锁解除。
  • 根据系统保存的checkpoint,让所有进程回退,直到足以解除死锁。
  • 当检测到死锁时,如果存在某些未卷入死锁的进程,随着这些进程执行到结束,则它们可能释放足够的资源来解除死锁。
posted @   cherish-lgb  阅读(1337)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示