资源分配与调度

2023-11-03

1 资源管理概述

1.1 资源管理的目的和任务

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

对资源的管理应包括以下几个方面:
1、资源管理的描述--数据结构
2、确定资源的分配原则和调度原则
3、执行资源分配(实施)
4、存取控制和安全保护

1.2 资源的几种分类方法

(一)物理资源和程序资源
(二)单一访问入口的资源和多访问入口的资源
(三)等同资源
(四)虚拟资源

1.3资源管理的机构和策略

机构
进行资源分配所必需的基本部件,它包括描述资源状态的数据结构,还包括保证不可共享资源互斥使用的技术以及对不能满足的资源请求进行排队的手段等。

策略
给出机构所使用的方法,涉及到相应资源满足的情况下,批准请求的决策,包括死锁问题和系统平衡问题。

2 资源分配机构

描述资源的管理和控制信息的数据结构称为资源分配的机构 。
在教材上列出了两种:资源描述器、资源信息块
在实际的系统中,会根据实际需要设计相应的数据结构。例如:进程管理主要管理的机构:PCB、就绪队列和各种等待队列。

2.1 资源描述器

描述各类资源的最小分配单位的数据结构称为资源描述器rd(resource descriptor)
存放于一个描述器中的信息取决于资源的特征与对该资源的管理方式。
最简化的描述器可以用一个二进制位来实现,它表示该资源是可用的,还是已分配的。

2.2 资源信息块

资源信息块rib (resource information)是一个数据结构,应能说明资源、请求者以及实施分配所需的必要信息。
资源分配程序是接收分配命令把资源分配给请求者的例程。包括:分配程序和去分配程序。

3资源分配策略

3.1 概述

资源分配有两种方式:
静态分配:当一个进程(或程序)运行前,将它要求的资源一次分配给该进程,直到该进程终止,释放其占用的所有资源。这种分配方法效率太低;
动态分配:当一个进程要求使用某个(类)资源时,向系统提出资源的请求,系统响应程序的请求将某种资源分配给请求者,这种方法使得系统资源的利用率提高,但有可能造成死锁。
几种分配策略:
1、先请求先服务(FIFO)
2、优先调度
3、适应调度
4、均衡调度
5、针对设备特性的调度

3.2 先请求先服务(FIFO)

简单排队站策略或FIFO(First In First Out)策略。
按照进程就绪的先后次序来调度进程
优点:实现简单
缺点:没考虑进程的优先级

3.3 优先调度

在优先调度策略下,对于每个进程(或作业)要指定一个优先级,这一优先级反映了进程要求处理的紧迫程度。
进程调度队列是按进程的优先级由高到低的顺序排列的,队首为优先级最高者。
优先选择就绪队列中优先级最高的进程投入运行
优先级根据优先数来决定。

确定优先数的方法
静态优先数法:
在进程创建时指定优先数,在进程运行时优先数不变
动态优先数法:
在进程创建时创立一个优先数,但在其生命周期内优先数可以动态变化。如等待时间长优先数可改变。

两种占用CPU的方式
可剥夺式(可抢占式Preemptive):
当有比正在运行的进程优先级更高的进程就绪时,系统可强行剥夺正在运行进程的CPU,提供给具有更高优先级的进程使用
不可剥夺式(不可抢占式Non-preemptive ):
某一进程被调度运行后,除非由于它自身的原因不能运行,否则一直运行下去

分时系统中常用时间片轮转法

时间片选择问题:
固定时间片
可变时间片

与时间片大小有关的因素:
系统响应时间
就绪进程个数
CPU能力

多队列反馈调度算法:
将就绪队列分为N级,每个就绪队列分配给不同的时间片,队列级别越高,时间越长,级别越小,时间片越小,最后一级采用时间片轮转,其他队列采用先进先出; 系统从第一级调度,当第一级为空时,系统转向第二个队列,…当运行进程用完一个时间片,放弃CPU时,进入下一级队列;等待进程被唤醒时,进入原来的就绪队列;当进程第一次就绪时,进入第一级队列 。

  • 首先系统中设置多个就绪队列

  • 每个就绪队列分配给不同时间片,优先级高的为第一级队列,时间片最小,随着队列级别的降低,时间片加大

  • 各个队列按照先进先出调度算法

  • 一个新进程就绪后进入第一级队列

  • 进程由于等待而放弃CPU后,进入等待队列,一旦等待的事件发生,则回到原来的就绪队列

  • 当有一个优先级更高的进程就绪时,可以抢占CPU,被抢占进程回到原来一级就绪队列末尾

  • 当第一级队列空时,就去调度第二级队列,如此类推

  • 当时间片到后,进程放弃CPU,回到下一级队列

  • 进程调度的时机
    当一个进程运行完毕,或由于某种错误而终止运行
    当一个进程在运行中处于等待状态(等待I/O)
    分时系统中时间片到

*进程调度的时机
当有一个优先级更高的进程就绪(可抢占式),例如:新创建一个进程,一个等待进程变成就绪。
在进程通信中,执行中的进程执行了某种原语操作(P操作,阻塞原语,唤醒原语)

*CPU调度过程

  • 保存现场:顺序保存,最后一步保存PSW
  • 选择要运行的程序
    (如果没有就绪进程,系统会安排一个闲逛进程(idle),没有其他进程时该进程一直运行,在执行过程中可接收中断)
  • 恢复现场:最后一步恢复选中进程的PSW

4 死锁

4.1 死锁的概念

在这两个进程并发执行时,当P1进程占有R1、P2进程占用R2时,P1要求R2,由于P2已占R2有而得不到,P1进程只有等待;P2申请R1,由于P1已占有R1,而得不到,P2进程只有等待,就出现了死等的情况。
在这里插入图片描述
死锁是进程死锁的简称,是由Dijkstra于1965年研究银行家算法时首先提出来的。它是计算机操作系统乃至并发程序设计中最难处理的问题之一。实际上,死锁问题不仅在计算机系统中存在,在我们日常生活中它也广泛存在。
在计算机系统中,涉及软件,硬件资源都可能发生死锁。例如:系统中只有一台CD-ROM驱动器和一台打印机,某一个进程占有了CD-ROM驱动器,又申请打印机;另一进程占有了打印机,还申请CD-ROM。结果,两个进程都被阻塞,永远也不能自行解除。

死锁简单的定义:
死锁就是两个或两个以上的进程等候着一个永远不会发生的事件时所处的一种系统状态。
教材上关于死锁的定义:
两个或两个以上并发进程,如果每个进程持有某种资源,而又等待着别的进程释放它或它们现在保持着的资源,否则就不能向前推进。此时,每个进程都占用了一定的资源,但又都不能向前推进。这种现象称为死锁。

4.2 死锁的起因

并发进程共享系统资源,在竞争资源时可能会产生称为死锁的附带后果。
产生死锁的根本原因是系统能够提供的资源个数比要求该资源的进程数要少。所以,当系统中两个或多个进程没有能力进一步时。系统就发生死锁。
A1: P1 request(r1) A2: P2 request(r2)
B1: P1 request(r2) B2: P2 request(r1)
C1: P1 request(r1) C2: P2 request(r2)
D1: P1 request(r2) D2: P2 request(r1)
在这里插入图片描述
第一条折线:p1运行,p2运行。
p1运行 A1: P1 request(r1),B1: P1 request(r2)
C1: P1 request(r2),D1: P1 request(r1)
p2运行 A2: P2 request(r2),B2: P2 request(r1)
C2: P2 request(r2),D2: P2 request(r1)

第二条折线:p1运行,p2运行, p1运行 。
p2运行 A2: P2 request(r2),B2: P2 request(r1)
C2: P2 request(r2),D2: P2 request(r1)
p1运行 A1: P1 request(r1),B1: P1 request(r2)
C1: P1 request(r1),D1: P1 request(r2)

第三条折线:p1运行,p2运行。
p1运行 A1: P1 request(r1);
p2运行 A2: P2 request(r2),进入D区;
p1运行 B1: P1 request(r2),p1阻塞;
p2运行 B2: P2 request(r2),p2阻塞,到达死锁点N。
在此种情况下出现死锁。

产生死锁的原因是:系统资源不足;进程推进顺序非法。

产生死锁的四个必要条件:
1、互斥条件
2、不可剥夺条件
3、部分分配
4、环路条件

在这里插入图片描述

4.3 解决死锁问题的策略

一、解决死锁问题的几个策略
为了不发生死锁,必须设法破坏产生死锁的四个必要条件之一。
条件1:难以否定,但可采用相应的技术,如利用假脱机技术,即用可共享使用的设备模拟非共享的设备;
条件2:容易否定,可制定相应的规则即可,例如,当一个进程(程序)申请某资源被拒绝,则必须释放已占用的资源,如需要再与其它所需资源一起申请。对CPU还可进行可剥夺分配。
条件3:也是很容易否定的,只要分配策略上规定一个进程(或程序)一次将所需资源一次申请到位。用完后释放。可以全部用完后,统一释放,也可使用完后立即释放,只要是一次申请到的,系统就不会出现死锁。
条件4:实际上系统不采用部分分配,也就破坏了环路条件。

二、系统状态分析(略)

4.4 死锁的预防

预先分配一个进程要用的所有资源是防止死锁的一种安全而简单的方法,但设备的使用效率太低。其缺点也是明显的:
1、一个用户(进程)在程序运行之前很难提出将要使用的全部设备;
2、设备(资源)的浪费太大,有些资源在进程运行过程中可能只有很少的时间才用到,有的甚至不会用到,例如,一个分支语句。

4.5 死锁的避免

为了提高设备的利用率,应采用动态的设备分配方法,但应设法避免发生死锁,若存在发生死锁的可能性,则拒绝分配。
预防死锁:
采用的分配策略本身就否定了产生死锁的四个必要条件之一,这就保证了不会发生死锁;
死锁避免:
是在动态分配资源的策略下采用某种算法来预防可能发生的死锁,从而拒绝可能产生死锁的某个资源的请求。
一、有序资源分配法
这种算法按某种规则为系统中的所有资源统一编号(例如打印机为1、磁带机为2、磁盘为3、等等),申请时必须以上升的次序。
系统要求申请进程:
1、对它所必须使用的而且属于同一类的所有资源,必须一次申请完;
2、在申请不同类资源时,必须按各类设备的编号依次申请。
例如:进程PA,使用资源的顺序是R1,R2;
进程PB,使用资源的顺序是R2,R1;
若采用动态分配有可能形成环路条件,造成死锁。
采用有序资源分配法:R1的编号为1,R2的编号为2;
PA:申请次序应是:R1,R2
PB:申请次序应是:R1,R2
这样就破坏了环路条件,避免了死锁的发生。

二、银行家算法
避免死锁算法中最有代表性的算法是Dijkstra E.W 于1968年提出的银行家算法:
该算法需要检查申请者对资源的最大需求量,如果系统现存的各类资源可以满足申请者的请求,就满足申请者的请求。
这样申请者就可很快完成其计算,然后释放它占用的资源,从而保证了系统中的所有进程都能完成,所以可避免死锁的发生。

4.6 死锁的检测和恢复

死锁的检测:
通常的方法是程序员的经验,如UNIX系统中,可考察进程的运行时间。在UNIX系统中有命令PS可显示进程占用CPU的时间,若发现有一组进程在一段时间内没有占用CPU,就认为这类进程出现了死锁。
死锁排除的方法:
1、撤销陷于死锁的全部进程;
2、逐个撤销陷于死锁的进程,直到死锁不存在;
3、从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

资源分配与调度 的相关文章

  • fork之后子进程到底复制了父进程什么

    fork之后子进程到底复制了父进程什么 发表于2015 4 3 9 54 08 2161人阅读 分类 操作系统 include
  • System.getProperty用法

    转自 http blog darkmi com 2011 03 16 1666 html System getProperty 用于获取当前的系统属性 比如java版本 操作系统名称 区域 用户名等 这些属性一般由jvm自动获取 不能手工设
  • 线程和进程的区别(面试必备)

    参考文章 https www jianshu com p 2dc01727be45 线程与进程的区别通俗的解释 https www jianshu com p 8ad441510860 附加可参考文章 https baijiahao bai
  • java调优总结

    JVM调优总结 序 几年前写过一篇关于JVM调优的文章 前段时间拿出来看了看 又添加了一些东西 突然发现 基础真的很重要 学习的过程是一个由表及里 再由里及表的过程 呵呵 所谓的 温故而知新 而真正能走完这个轮回的人 也就能称为大牛或专家了
  • 掉电无法启动数据库问题解决

    由于突然掉电 造成客户在windows平台上10 2 0 1数据库无法驱动 以下是具体解决步骤 一 定位故障问题 1 启动数据库 查看错误 SQL gt startup ora 01113 file 1 needs media recove
  • 操作系统学习(九)进程通信

    一 知识总览 二 定义 进程通信是指进程之间的信息交换 每个进程都拥有自己的内存空间 是相互独立的 这样在每个进程执行时 才不会被其他进程所干扰 三 进程通信的方式 1 共享存储 1 两个进程对共享区的访问必须是互斥的 即在同一时间内 只允
  • Linux系统编程:多线程交替打印ABC

    引言 分享关于线程的一道测试题 因为网上基本都是Java的解决方法 决定自己写一篇来记录一下线程的学习 问题描述 编写一个至少具有三个线程的程序 称之为线程 A B 和 C 其中线程 A 输出字符 A 线程 B 输出字符 B 线程 C 输出
  • LWIP在STM32上的移植

    本文做记录摘抄 加上自己的体会 文章标题 STM32使用LWIP实现DHCP客户端 http www cnblogs com dengxiaojun p 4379545 html 该文章介绍了几点 LWIP源码的内容 关键点 1 inclu
  • Linux系统如何看目录属于哪个磁盘分区

    Linux是先有目录 再有磁盘分区 df h 目录 例如 没有挂载磁盘的目录 显示在系统盘 root iZ2ze57v3n0zma46zqiq8nZ sh 1 5 5 df h alidata Filesystem Size Used Av
  • Visual studio 2005 hangs on startup AppHangXProcB1 svchost devenv.exe svchost.exe:{2a811bb2-303b-48b...

    This problem has been torturing me for the whole afternoon and after searching on the web for a long time I finally get
  • [架构之路-185]-《软考-系统分析师》-3-操作系统基本原理 - 文件索引表

    目录 一 文件的索引块 二 索引分配表 三 索引表的链接方案 四 多层索引 五 混合索引分配 一 文件的索引块 存放在目录中的文件 并非是文件的真实内容 目录中记录了文件的索引块是几号磁盘块 文件对应的索引表是存放在指定的磁盘块中的 二 索
  • Windows运行常用命令(win+R)

    1 calc 启动计算器 2 notepad 打开记事本 3 write 写字板 4 mspaint 画图板 5 snippingtool 截图工具 支持无规则截图 6 mplayer2 简易widnows media player 7 S
  • Linux 内核中的 Device Mapper 机制

    Linux 内核中的 Device Mapper 机制 尹 洋 在读博士生 尹洋 中科院计算所国家高性能计算机工程技术研究中心的在读博士生 主要从事服务部署和存储资源管理以及Linux块设备一级的开发和研究工作 简介 本文结合具体代码对 L
  • Ubuntu9.04太多乱码(中文不能正常显示)

    最近在使用Ubuntu9 04的过程中 发现有好多地方都出现乱码 其实是中文不能正常显示 现在把我所遇到的所有乱码问题集中一下 方便以后查阅参考 一 Flash乱码 在终端输入 sudo gedit etc fonts conf d 49
  • 《深入理解计算机系统》实验四Architecture Lab

    前言 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻请看 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻 我觉得这个文档对整个实验很有帮助 如果你的Y86 64环境还没安装好可以看
  • OS——文件管理系统磁盘的结构之搞清盘面和柱面

    如上图 每个柱面有三个盘面 即就是3个磁道 柱面可以抽象的理解成是一个套一个的立体的同心圆柱体 例 2019年408真题 磁盘有300个柱面 每个柱面有10个磁道 每个磁道有200个扇区 扇区大小为512B 则磁盘容量 分析 每个柱面有10
  • 操作系统常见面试题

    1 什么是进程 Process 和线程 Thread 有何区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 进程是系统进行资源分配和调度的一个独立单位 线程是进程的一个实体 是CPU调度和分派的基本单位 它是比进程更小的能
  • 如何快速构建CMBD系统-glpi

    脚本后续更新及迭代将由kkitDeploy项目代替 https github com luckman666 kkitdeploy server 请大家持续关注kkitDeploy 一 CMBD系统构建步骤 起初 开发这套CMBD系统是为了帮
  • 《OSPF和IS-IS详解》一1.7 独立且平等

    本节书摘来自异步社区 OSPF和IS IS详解 一书中的第1章 第1 7节 作者 美 Jeff Doyle 更多章节内容可以访问云栖社区 异步社区 公众号查看 1 7 独立且平等 OSPF和IS IS详解与TCP IP相比 OSI协议对各国
  • Linux(12):磁盘配额(Quota)与进阶文件系统管理

    磁盘配额 Quota 的应用与实作 Quota 的一般用途 针对 www server 例如 每个人的网页空间的容量限制 针对 mail server 例如 每个人的邮件空间限制 针对 file server 例如 每个人最大的可用网络硬盘

随机推荐

  • Unity之FBX文件操作学习笔记(一)

    FBX作为隶属于Autodesk的一种三维模型场景动画打包格式文件 在图形学工程化领域应用十分广泛 然而 FBX文件格式不是公开的 所以对FBX文件进行读取与存储需要专门的工具 除了游戏引擎以及三维软件自带的FBX文件操作工具外 Autod
  • 紫鸟和Maskfog浏览器全方位测评对比

    随着跨境电商行业的发展 指纹浏览器被越来越多的人广泛使用 对于跨境电商来说 指纹浏览器能为多账号安全管理提供解决方案 现在市面上的指纹浏览器也层出不穷 今天给大家测评一下我认为做得比较好的两款防关联浏览器 Maskfog浏览器跟紫鸟浏览器
  • 安卓java修改按钮大小_修改android Toolbar的标题大小和按钮图标颜色

    使用android toolbar的时候 toolbar中的标题 二级标题以及按钮的图标的颜色都会使用默认的值 但是 有时候我们必须要自定义它们的大小以及颜色 该如何自定义呢 解决方法 1 修改标题 二级标题的字体大小和颜色 可以通过sty
  • Http响应码分类汇总

    1 响应码分类 1xx 响应码规范 RFC6585 2012 4 RFC7231 2014 6 1xx 类状态码属于提示信息 是协议处理中的一种中间状态 请求已接收到 需要进一步处理才能完成 实际用到的比较少 HTTP1 0 不支持 hea
  • #pragma once 与 #ifndef #define #endif各自的优缺点

    为了避免同一个文件被include多次 C C 中有两种方式 一种是 ifndef方式 一种是 pragma once方式 方式一 代码形式 注意标识名是自己起的 但这两个必须相同 一般用头文件名的大写 ifndef A H 如果未定义 A
  • 后端 API 接口文档 Swagger 使用指南

    前言 一 swagger是什么 二 为什么要使用swaager 2 1 对于后端开发人员来说 2 2 对于前端开发来说 2 3 对于测试 三 如何搭一个swagger 3 1 引入swagger的依赖 3 2 springBoot整合swa
  • codex

    gpt3 和codex这类模型真的理解文本或者代码吗 知乎 1 训练数据 从github上爬下小于1MB的python文件 去除掉那些可能是自动生成的 平均每行长度大于100的 最大行长度大于1000的 几乎不含字母数字的 经过清洗处理后
  • 【cmake学习】find_package 详解

    find package 主要用于查找指定的 package 主要支持两种搜索方法 Config mode 查找 xxx config cmake或 xxxConfig cmake的文件 如OpenCV库的OpenCVConfig cmak
  • Java的单例模式实现方式

    Java的单例模式实现方式 几种常见形式 饿汉式 饿汉式 静态块 懒汉式 线程不安全 懒汉式 线程安全 双重锁校验 静态内部类 枚举单例 容器单例 举出至少4种单列可能被破坏的场景 饿汗式单例的存在线程安全问题 在双重校验锁单例中存在指令重
  • sonar扫描android文件,sonar扫描android项目配置 mac版

    一 下载安装 JDK8以上 SonarQube SonarQube Scanner 1 解压缩SonarQube和SonarQube Scanner 直接运行SonarQube中bin目录下的sonar sh 使用浏览器打开页面 就看到So
  • pcl去除重复点云

    cpp bool compare pt pcl PointXYZI p1 pcl PointXYZI p2 if p1 x p2 x return p1 x gt p2 x else if p1 y p2 y return p1 y gt
  • 【Three.js】第十八章 Particles 粒子

    介绍 粒子 它们非常受欢迎 可用于实现各种效果 如星星 烟 雨 灰尘 火和许多其他东西 粒子的好处是您可以在屏幕上以合理的帧速率显示数十万个粒子 缺点是每个粒子都由一个始终面向相机的平面 两个三角形 组成 创建粒子就像制作网格一样简单 我们
  • 网络爬虫之记一次js逆向解密经历

    1 引言 数月前写过某网站 请原谅我的掩耳盗铃 的爬虫 这两天需要重新采集一次 用的是scrapy redis框架 本以为二次爬取可以轻松完成的 可没想到爬虫启动没几秒 出现了大堆的重试提示 心里顿时就咯噔一下 悠闲时光估计要结束了 仔细分
  • array_unique 去重---php

    php数组去掉重复值的方法 首先创建一个PHP示例文件 然后定义一个数组 最后通过 array unique arr 方法把数组中的元素进行去重即可 1 使用array unique方法进行去重 对数组元素进行去重 我们一般会使用array
  • git 如何拉取项目

    首先 git init 文件夹 使文件夹变成 git 可以操作的 然后注意 本地存放代码的目录下必须是最干净的 没有被git的记录的或者init后目录中有其他文件和git库里不同的就会报错 最后 使用 git pull 拉取 例如 链接是
  • 二分类变量相关性分析spss_SPSS详细教程:Cox回归中,分类变量的PH假定检验

    英国统计学家D R Cox于1972年提出的比例风险回归模型 Proportional hazard regression model 简称Cox回归模型 有效地解决了对于生存资料进行多因素分析的问题 但是Cox回归模型在应用时 有一个非常
  • 1.4亿在线背后-QQ-IM后台架构的演化与启示

    保存于 http pan baidu com s 1bpDZc7d
  • MySQL异常:TIMESTAMP with implicit DEFAULT value is deprecated

    问题 D software mysql mysql 5 7 17 winx64 mysql 5 7 17 winx64 bin gt mysqld initialize 2017 12 13T07 08 35 613357Z 0 Warni
  • 51单片机:TLC549测量电压,并将测量值显示在数码管上

    51单片机 TLC549测量电压 并将测量值显示在数码管上 要求 在51单片机上利用TLC549这个A D转换器测量电压 并将测量值显示在数码管上 电源范围是0 5V 可以实时测量出电压大小并显示出来 仿真电路图 代码如下 TLC549测量
  • 资源分配与调度

    1 资源管理概述 1 1 资源管理的目的和任务 目的 1 保证资源的高利用率 2 在 合理 时间内使所有顾客有获得所需资源的机会 3 对不可共享的资源实施互斥使用 4 防止由资源分配不当而引起的死锁 对资源的管理应包括以下几个方面 1 资源