操作系统-处理机调度、进程调度的时机、切换与过程、方式、调度算法的评价指标、调度算法

2023-05-16

文章目录

    • 基本概念
    • 三个层次
        • 高级调度(作业调度)
        • 中级调度(内存调度)
        • 低级调度(进程调度)
    • 三层调度的联系、对比
    • 补充知识
    • 时机
        • 什么时候需要进程调度
        • 什么时候不能进行进程调度
        • 临界区与内核程序临界区
    • 切换与过程
        • "狭义的调度"与"切换"的区别
        • 进程切换的过程需要做什么
    • 方式
        • 非掠夺调度方式(非抢占式)
        • 掠夺调度方式(抢占式)
    • 调度算法的评价指标
        • CPU利用率
        • 系统吞吐量
        • 周转时间
        • 等待时间
        • 响应时间
    • 调度算法
        • 先来先服务(FCFS,First Come First Serve)
        • 短作业优先(SJF,Shortest Job First)
        • 高响应比优先(HRRN,Highest Respomse Ratio Next)
        • 时间片轮转(RR,Round-Robin)
        • 优先级调度
        • 多级反馈队列

基本概念

  • 调度:当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定出里这些任务的顺序,这就是调度。
  • 处理机调度:就是从有序队列中按照一定的算法选择一个进程并将处理机分配给他运行,已实现进程的并发法执行

三个层次

高级调度(作业调度)

  • 由于内存空间有限,有时无法将用户提交的作业全部放入内存,因此需要确定某种规则来决定作业调入内存中的顺序
  • 定义:按一定的原则从外存上处于后备队列的作业中挑选一个(或多个)作业,给他们分配内存等重要资源,并建立相应的进程(建立PCB),以使它(们)获得竞争处理机的权利
  • 高级调度是外存(辅存)与内存之间的调度。每个作业只调入一次,调出一次,在此期间会建立并撤销PCB。(高级调度主要是指调入问题)

中级调度(内存调度)

  • 引进了虚拟存储技术后,可将暂时不能运行的进程调至外存等待。等重新具备了运行条件且内存稍有空闲时,再重新调入内存。这么做的目的是为了提高内存利用率和系统吞吐量
  • 暂时调到外存等待的状态被称为挂起状态。调度时,PCB并不会一起调到外存,而是会常驻内存。PCB中会记录进程数据在外存的存放位置,操作系统通过内存的PCB来保持对个进程的监控、管理。被挂起的进程PCB会被放到挂起队列中。
  • 中级调度,就是决定将哪个处于挂起状态的进程重新调入内存。
  • 一个进程会被多次的调入、调出,发生频率比高级调度高

低级调度(进程调度)

  • 定义:低级调度,其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。
  • 进程调度是操作系统做基本的一种调度,在一般的操作系统都必须配置进程调度
  • 进程调度频率很高,一般几十毫秒一次

三层调度的联系、对比

在这里插入图片描述

补充知识

  • 暂时调到外存等待的进程状态称为挂起状态(挂起态)
  • 挂起态又可以进一步细分为就绪挂起和阻塞挂起两种状态
    在这里插入图片描述

时机

什么时候需要进程调度

  • 进程调度:也就是低级调度,按某种算法从就绪队列中选择一个进程为其分配处理机
  • 当前进程主动放弃处理机
    *进程正常终止
    *运行过程中发生异常而终止
    *进程主动请求阻塞(如 等待I/O)
  • 当前进程被动放弃处理机
    *分给进程的时间片用完
    *有更紧急的是需要处理(如 I/O中断)
    *有更高优先级的进程加入就绪队列

什么时候不能进行进程调度

  • 在处理中断的过程中。中断处理过程复杂,与硬件密切相关,很难做到在中断处理过程中进程进程切换
  • 进程在操作系统内核程序临界区中
  • 在原子操作过程中。原子操作不可中断

临界区与内核程序临界区

  • 临界资源:一个事件端只允许一个进程使用的资源。各进程需要互斥的访问临界资源
  • 临界区:访问临界资源的那段代码
  • 内核程序临界区一般用来访问某种内核数据结构,比如进程的就绪队列(由各就绪队列的PCB组成)
    *进程访问内核程序临界区的数据结构时对就绪队列上锁,因此系统无法调用就绪队列的进程,故无法进程调度
    *等到该进程访问结束后对就绪队列解锁,这样才能进程调度

切换与过程

"狭义的调度"与"切换"的区别

  • 狭义的进程调度指的是从就绪队列中选中一个要运行的进程(这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况需要进程切换)
  • 进程切换是指一个进程让出处理机,有另一个进程占用处理机的过程
  • 广义的进程切换包括选择一个进程和切换进程两个步骤

进程切换的过程需要做什么

  • 1.对原来运行进程各种数据的保存
  • 2.对新的进程各种数据的恢复(进程控制块PCB)
  • 进程切换是有代价的,因此如果过于频繁的进行进程调度、切换,必然会使系统的效率降低。

方式

非掠夺调度方式(非抢占式)

  • 只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会尝试用处理机,知道该进程主动要求进入阻塞态
  • 实现简单,系统开销小,但是无法及时处理紧急任务,适用于早期的批处理系统

掠夺调度方式(抢占式)

  • 当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要更紧迫的那个进程
  • 可以优先处理更紧急的进程,也可以实现按时间片轮流执行的功能。适用于分时操作系统,实时操作系统

调度算法的评价指标

CPU利用率

  • 指CPU"忙碌"的时间占总时间的比例(有些问题还会问I/O设备的利用率等,只需要将净使用时间比总时间即可)

系统吞吐量

  • 单位时间内完成作业的数量(总共完成了多少道作业/总共花了多少时间=n道/秒)

周转时间

  • 指从作业从提交给系统开始,到作业完成为止的这段时间间隔(作业完成时间-作业提交时间)
  • 包括四个部分
    *作业在外存后备队列上等待作业调度的时间
    *进程在就绪队列上等待进程调度的时间
    *进程在CPU上执行的时间
    *进程等到I/O操作完成的时间
    *后三项在一个作业的整个处理过程中,可能发生多次
  • 平均周转时间=各作业周转时间之和/作业数
  • 带权周转时间=作业周转时间/作业实际运行的时间(对于周转时间相同的两个作业,实际运行时间长的作业,也就是等待时间短的作业,带权周转时间更小,用户满意度更高;对于实际运行时间相同的两个作业,周转时间短的带权时间更小,用户满意度高)
  • 平均带权周期时间=各作业带权周转时间之和/作业数

等待时间

  • 指进程/作业处于等待处理机状态时间之和,等待时间越长,用户满意度越低
  • 对于进程来说,等待时间就是指进程建立后等待被服务的是时间之和,在等待I/O完成的期间其实也是在被服务,所以不计入等待时间
  • 对于作业来说,不仅要考虑建立进程后的等待时间,还要加上作业在后备队列的等待时间
  • 调度算法只会影响作业/进程的等待时间,也有平均等待时间,同上

响应时间

  • 指从用户提交请求到首次产生响应所用的时间

调度算法

先来先服务(FCFS,First Come First Serve)

  • 算法思想:主要从"公平"的角度考虑(类似于排队)
  • 算法规则:按照作业/进程的先后顺序进行服务
  • 用于作业/进程调度:用于作业调度时,考虑的是哪个作业先到达后备队列;用于进程调度时,考虑的是哪个进程先到达就绪队列
  • 是否可抢占:非抢占式算法
  • 优缺点
    *优点:公平、算法实现简单
    *缺点:排在长作业(进程)后面的短作业需要等待很长时间,带权周转啥时间很大,对短作业来说用户体验不好
  • 是否会导致饥饿:不会(饥饿:某个进程/作业长期得不到服务)

例:
在这里插入图片描述

短作业优先(SJF,Shortest Job First)

  • 算法思想:追求最少的平均等待时间,最少的平均周转时间,最少的平均带权周转时间
  • 算法规则:最短的作业/进程有限得到服务(服务时间最短)
  • 用于作业/进程调度:即可用于作业调度,也可用于进程调度。用于进程调度时称为"短进程有限(SPF,Shortest Process First)算法"
  • 是否可抢占:SJF和SPF是非抢占式算法。但是也有抢占式算法–最短剩余时间优先算法(SRTN,Shortest Remaining Time Next)
  • 优缺点
    *优点:"做短的"平均等待时间、平均周转时间
    *缺点:不公平,对短作业有利,对长作业不利。(作业/进程的运行时间是由用户提供的,并不一定真实,并不一定能做到真正的短作业优先)
  • 是否导致饥饿:会。如果有源源不断的短作业进来,可能会使长作业长时间的不到服务,产生"饥饿"现象。如果一直的得不到服务,则称为"饿死"

例:SPF在这里插入图片描述
SRTN在这里插入图片描述

  • 做题时为特别说明,所提到的"短作业/进程优先级算法"默认是非抢占式的
  • 在所有进程同时可运行或所有进程都几乎同时到达时,采用SJF调度算法的平均等待时间、平均周转时间最短(主要看前提条件,如果选择题中出现,其他三项没有更合适的时候可去掉前提条件)
  • 不过不加前提条件,SRNT算法的平均等待时间、平均周转时间最短
  • 严格的来说,SJF的平均等待时间、平均周转时间不一定最少,但相比于FCFS,SJF会更短一些

高响应比优先(HRRN,Highest Respomse Ratio Next)

  • 算法思想:综合考虑作业/进程的等待时间和要求服务时间
  • 算法规则:在每次调度时先计算各个作业/进程的响应比,选择响应比高的作业/进程为其服务
    *响应比=(等待时间+要求服务时间)/要求服务时间
  • 用于作业/进程调度:既可用于作业调度,也可用于进程调度
  • 是否可抢占:非抢占式的算法。只有当前运行的作业/进程主动放弃处理机时,才需要调度,才需要计算响应比
  • 优缺点
    *优点:综合考虑了等待时间和运行时间;等待时间相同时,要求服务时间短的优先(SJF的有优点);要求服务时间相同时,等待时间长的优先(FCFS的优点);对于长作业来说,对着等待时间越来越久,其响应比也会越来越大,从而避免了饥饿问题
    *缺点:
  • 是否导致饥饿:不会

在这里插入图片描述

  • 这三种算法不关心"响应时间",不区分任务的紧急,适用于早起的批处理系统,不适用于交互式系统

时间片轮转(RR,Round-Robin)

  • 算法思想:公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应
  • 算法规则:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个事件片(如:100ms)。若进程未在一个时间片内执行完成,则剥夺处理机,将进程从新放到就绪队列队尾重新排队。
  • 用于作业/进程调度:只能用于进程调度(只有作业建立了相应的进程后,才能被分配处理机时间片)
  • 是否可抢占:属于抢占式算法。由时钟装置发出时钟中断来通知CPU时间片已到
  • 优缺点
    *优点:公平、响应快,适用于分时操作系统
    *缺点:进程切换时会产生一定的开销;不区分任务的紧急程度
  • 是否导致饥饿:不会导致饥饿

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  • 常用与分时操作系统,更注重"响应时间",因而此处不计算周转时间
  • 如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法退化为先来先服务调度算法,并且增大响应时间。因此时间片不能太大
  • 进程调度、切换是有时间代价的,因此如果时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程的切换,从而导致进程执行的时间比例减少。可见时间片不能太小(一般来说,设计时间片时要让切换进程的开销不超1%)

优先级调度

  • 算法思想:随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务的紧急程度来决定处理顺序
  • 算法规则:每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程
  • 用于作业/进程调度:既可用于进程调度,也可用于进程调度。甚至还可用于I/O
  • 是否可抢占:抢占式和非抢占式都有:非抢占式秩序在进程主动放弃处理机进行调度既可;抢占式需在就绪队列变化时,检查是否会发生抢占
  • 优缺点
    *优点:用优先级区分紧急程度、重要程度,适用于实时操作系统。可以灵活地调整各种作业/进程的偏好程度
    *缺点:若有源源不断的高优先级进程到来,则有可能导致饥饿
  • 是否导致饥饿:会

例:非抢占式在这里插入图片描述
抢占式在这里插入图片描述

  • 就绪队列未必只有一个,可以按照不同的优先级来组织。另外,也可以把优先级高的进程安排在更靠近队头的位置
  • 根据优先级是否可以动态改变,可分为静态优先级和动态优先级
  • 静态优先级:创建进程时确定,之后不会改变
  • 动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级
  • 通常(如何设置各类进程的优先级):
    *系统进程优先级>用户进程
    *前台进程优先级>后台进程
    *操作系统偏好于I/O进程(或称I/O繁忙性进程。I/O设备与CPU可以并行工作,如果优先级先让I/O开始工作,则资源利用率、系统吞吐量都会得到提升)
  • 什么时候调整
    *可以从追求公平、提高资源利用率等角度考虑
    *如果某进程在就绪队列中等待时间过长,则可以考虑适当提高其优先级
    *如果某进程占用处理机时间过长,适当降低其优先级
    *如果发现一个进程频繁的执行I/O操作,适当提高其优先级

多级反馈队列

  • 算法思想:对其他调度算法的折中权衡
  • 算法规则:
    *设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
    *新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若时间片用完进程还没结束,则进程进入下一级队列队尾。如果此时已经是最低级的队列,则重新放回该队列队尾
    *只要第k级队列为空时,才会为k+1级队头进程分配时间片
  • 用于作业/进程调度:用于进程调度
  • 是否可抢占:抢占式算法(在k级队列进程运行的过程中,若更上级队列中进入了一个新的进程,新进程会抢占处理机,原来运行的进程会放在k级队列的队尾)
  • 优缺点
    *优点:各类进程相对公平(FCFS);每个新到达的进程都可以很快得到响应(RR);短进程只需要较短时间就可以完成(SPF);不必估计事先进程的运行时间(就是定义长进程或短进程之别,避免用户作假);可灵活的调整能各类进程的偏好程度(可以将I/O进程被阻塞后后依然放回原队列,这样可以使其保持一个较高的优先级)
    *缺点:源源不断的短进程进来,会导致饥饿
  • 是否导致饥饿:会

在这里插入图片描述
这三种算法更适合用于交互式系统

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

操作系统-处理机调度、进程调度的时机、切换与过程、方式、调度算法的评价指标、调度算法 的相关文章

随机推荐

  • springboot整合springsecurity,设置自定义页面后没有效果,运行还是一直跳转到默认的页面

    在做springboot整合springsecurity时 xff0c 设置也自定义的登陆页面一直不起作用 xff0c 运行时还是会跳转到原始的页面上去 在设置自定义登陆页面后 xff0c 运行项目还是会生成默认的密码 生成的默认密码 xf
  • vue插件瀑布流vue-masonry(带源码)

    目录 插件官网下载全局挂载main js中 属性实例效果最后 插件官网 官网1 官网2 下载 npm install vue masonry save 全局挂载 main js中 span class token selector impo
  • k8s 1.23.10 动态POD扩缩容(HPA )

    目录 为什么要自动扩缩容 xff1f 再K8S中扩容分为两种 xff1a 一 Node层面 xff1a 二 Pods层面 xff1a 自动扩缩容的方案有哪些 Kubernetes HPA xff08 Horizontal Pod Autos
  • STM32CubeMX——FREERTOS学习:消息队列Queue

    什么是队列 队列 xff0c 也叫消息队列 xff0c 就是把消息一条一条的排个队 比如创建了一个消息队列 xff0c 这个消息队列可以存10条消息 任务A可以往里存消息 xff0c 任务B也可以往里存 这个存的消息是要讲先来后到的 xff
  • 笔记本电脑控制树莓派,树莓派获取IP地址,连接笔记本电脑屏幕

    树莓派使用需要连接显示屏配备键盘和鼠标 xff0c 为了方便实用可以直接连接到自己的笔记本电脑上 xff0c 主要步骤如下 xff1a 第一步 xff1a 获取树莓派IP地址 首先进行树莓派的系统烧录 xff0c 烧录过程可以查看网上教程
  • c++类和对象---继承

    继承是面向对象三大特性之一 1 继承的基本语法 语法 xff1a class 子类名 xff1a 继承方式 父类名 子类 也叫 派生类 父类 也叫 基类 class basepage public void header cout lt l
  • Dockerfile详解

    Dockerfile 文章目录 基本结构指令详解FROMRUNLABEL MAINTAINERCOPYADDCMDENTRYPOINTENVARGVOLUMEEXPOSEWORKDIRUSERHEALTHCHECKONBUILD 创建镜像上
  • 接口和实现类

    接口 生活中有很多接口 xff0c 例如 xff1a USB接口 电源接口 Type c接口等等 xff1b 一个接口 xff0c 对应一个接口相应的设备 程序中的接口 xff1a 一种标准 xff0c 一种规范 xff0c 一系列抽象方法
  • 程序员必备的基本算法:递归详解

    前言 递归是一种非常重要的算法思想 xff0c 无论你是前端开发 xff0c 还是后端开发 xff0c 都需要掌握它 在日常工作中 xff0c 统计文件夹大小 xff0c 解析xml文件等等 xff0c 都需要用到递归算法 它太基础太重要了
  • lwip 基于select方式实现的tcp简易服务器

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • 我是歌手Java实现

    span class token comment AbstractSinger java span span class token keyword package span span class token namespace cn sp
  • 【亲测有效】树莓派4B安装realsense(Intel深度摄像头)

    第一步尝试通过pip下载 xff0c 发现不能下载 pip span class token function install span pyrealsense2 pip中的pyrealsense2只能下载给X86结构的计算机 xff0c
  • 驼峰规则

    驼峰规则包含两种 xff1a 大驼峰和小驼峰 大驼峰 指我们在命名的时候往往采用第一个字母大写 xff0c 比如Animal 这种命名形式常用于类名或函数名 小驼峰 指我们在命名是往往采用中间字母大写 xff0c 比如setName 这种命
  • 八皇后问题(回溯法)

    目录 什么是八皇后 八皇后问题怎么解决 xff1f 什么是回溯法 回溯法的模板 八皇后问题的核心代码 判断皇后位置是否可行 总体实现代码 每日一句 xff1a 种一棵树的最好时间是十年前 xff0c 其次是现在 什么是八皇后 八皇后问题 x
  • 淘宝搜索页面爬取数据

    淘宝搜索页面爬取数据 1 首先导入库 span class token keyword import span requests span class token keyword import span json 2 主函数 span cl
  • Android进程保活 --- 守护进程(code)

    1 守护进程 xff1a 一个在后台运行并且不受任何终端控制的进程 可以用来给其他应用拉起 xff0c 保活 import android app Service import android content ComponentName i
  • 基于树莓派的追光系统(python)

    目录 前言 一 材料 二 硬件 控制逻辑 1 主设备的准备 1 启用树莓派的i2c设备 2 安装python smbus 2 从设备的准备 1 BH1750 2 L298N驱动芯片 3 云台的准备 1 增加电机固定模块 2 增加bh1750
  • pytorch优化器(optimizer)中params参数详细介绍

    这里先给出使用的一个小型网络 xff08 自己瞎定义的一个网络 xff09 xff0c 后面使用的model就是这里定义的一个小型的网络 xff1a 定义网络 class Test nn Module def init self super
  • [下面的框架可能不正确和/或缺失,没有为 ntdll.dll 加载符号]

    96 96 96 cpp 在这里插入代码片 之前老师出现这些问题 之后我改了realse模式 依旧不行 我经过一夜的思考 xff0c 发现这个和我的代码 没有关系 我修改了程序内部的一些char 然后重新启动realse 就没有这个了 在这
  • 操作系统-处理机调度、进程调度的时机、切换与过程、方式、调度算法的评价指标、调度算法

    文章目录 基本概念三个层次高级调度 作业调度 中级调度 内存调度 低级调度 进程调度 三层调度的联系 对比补充知识时机什么时候需要进程调度什么时候不能进行进程调度临界区与内核程序临界区 切换与过程 34 狭义的调度 34 与 34 切换 3