《408操作系统 》复习笔记 ③ 第二章 调度与调度算法

调度

当有一堆任务要处理,由于资源有限,没办法同时处理。需要 某种规则决定处理这些任务的顺序


作业

作业:一个具体的任务

用户向系统提交一个作业 = 用户让操作系统启动一个程序(来处理一个具体的任务)

调度的三个层次

image-20230822200820920

高级调度(作业调度)

按照某种策略从外存的作业后备队列中挑选一个作业调入内存,并创建进程。每个作业只调入一次(建立PCB),调出一次(撤销PCB)


低级调度(进程调度、处理机调度)

按照某种策略从就绪队列中选出一个进程,将处理机分配给它

OS中最基本的一种调度,调度频率很高,一般几十毫秒一次


中级调度(内存调度)

内存不够时,可将某些进程的数据调出外存。等内存空闲或者进程需要运行时再重新调入内存。

调到外存等待的进程状态 挂起状态。被挂起的进程PCB会被组织成挂起队列

按照某种策略决定将哪个处于挂起状态的进程重新调入内存

一个进程可能会被多次调出、调入内存,因此 中级调度发生频率要比高级调度高


挂起状态

五状态模型 => 七状态模型

暂时调到外存等待的进程状态为挂起状态,挂起态又可分为就绪挂起阻塞挂起

image-20230822200606681

XM-处理机调度

image-20230822200930435

临界资源、临界区

临界资源:一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临界资源

临界区:访问临界资源的那段代码


进程调度的时机

image-20230822201417649 image-20230822202256714

进程调度的方式

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

只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态

实现简单,系统开销小,但是无法及时处理紧急任务,适合于早期批处理系统

剥夺调度方式(抢占式)

有更紧迫的任务到达,立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程

可以优先处理更紧急的进程,也可以实现让各进程按时间片轮流执行的功能(时钟中断),适用于分时操作系统、实时操作系统

进程的切换与过程

狭义的进程调度 就是从就绪队列中选一个要运行的进程。(这个进程可能是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况需要进程切换

进程切换 指一个进程让出处理机,由另一个进程占用处理机的过程。

广义的进程调度 包含了选择一个进程和进程切换。

进程切换的过程完成了:

  • 对原来运行进程各种数据的保存(保存在PCB)
  • 对新的进程各种数据的恢复
    • PCB中的程序计数器,程序状态字,各种寄存器数据等处理机现场信息

进程切换室友代价的,过于频繁进行进程调度和切换,会使整个系统的效率降低,将大部分时间用于进程切换而不是执行进程。

XM-进程调度

image-20230822204005605

调度器(调度程序)

image-20230822204922406

不支持内核级线程的操作系统,调度程序的处理对象是进程

支持内核级线程的OS,调度程序处理对象是内核线程

闲逛进程

没有其他就绪进程时,运行闲逛线程,其特性

  • 优先级最低
  • 可以是0地址指令(不需要访存,能耗低),占一个完整的指令周期(指令周期末尾例行检查中断)

调度算法评价指标

CPU利用率:CPU忙碌的时间占总时间的比例

系统吞吐量:单位时间内完成作业的数量

周转时间: 从作业被提交给系统开始,到作业完成为止这段时间间隔

  • 包括四个部分,作业在外存后备队列上等待高级调度的时间、进程在就绪队列上等待低级调度的时间、进程在CPU上执行的世界,进程等待IO完成的时间,后三项可能在一个作业处理过程中发生多次。
  • 周转时间 = 作业完成时间 - 作业提交时间 (用户关心的)
  • 平均周转时间 = 各作业完成时间之和 / 作业数 (操作系统关心的)
  • 带权周转时间 = 作业周转时间 / 作业实际运行的时间(必然大于等于1)
    • 带权周转时间越小用户满意度越高
  • 平均带权周转时间 = 各带权周转时间之和 / 作业数

等待时间:进程/作业处于等待处理机状态时间之和

  • 对于进程,等待时间是进程建立后等待被服务的时间之和,等待I/O完成的期间进程也是在被服务的,不计入等待时间
  • 对于作业,要考虑建立进程后等待的时间,还要加上作业在外存后备队列等待的时间

一个作业总共需要被CPU服务多久,被I/O设备服务多久一般是确定不变的,因此调度算法只会影响作业/进程的等待时间。

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

XM-调度算法评价指标

image-20230823063611201

调度算法-①

image-20230823082203942

先来先服务 FCFS

  • 算法规则:按照作业/进程到达的先后顺序进行服务
  • 用于作业/进程调度:哪个作业先到达后备队列;哪个进程先到达就绪队列
  • 非抢占式
  • 公平、算法简单
  • 排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间大,对短作业来说用户体验不好。 对长作业有利,对短作业不利
  • 不会导致饥饿(某进程/作业长期得不到服务)
image-20230823064525705

短作业优先 SJF

  • 思想:追求最少的平均等待时间,平均周转时间,平均带权周转时间
  • 算法规则:最短(服务时间最短)的作业/进程优先得到服务
  • 用于作业/进程调度。用于进程调度时称为短进程优先 SPF 算法
  • SJF SPF非抢占式。也有抢占式 最短剩余时间优先算法 SRTN
  • "最短的"平均等待时间、平均周转时间
  • 对短作业有利,对长作业不利,可能产生饥饿现象。另外运行时间是由用户提供的,并不一定真实,不一定做到真正的短作业优先
  • 源源不断地有短作业/进程到来,可能使长作业得不到服务,最终饿死
image-20230823065626751 image-20230823070040870 image-20230823070246812 image-20230823080638830

高响应比优先算法 HRRN

  • 思想:综合考虑作业/进程的等待时间和要求服务时间
  • 算法规则:每次调度时先计算各个作业/进程的 响应比,选择响应比最高的为其服务
    • 响应比 = (等待时间+要求服务时间) / 要求服务时间
  • 用于作业/进程调度
  • 非抢占式
  • 综合考虑了等待时间和要求服务时间
    • 等待时间相同时,要求服务时间短的优先(SJF)
    • 要求服务时间相同时,等待时间短的优先(FCFS)
  • 对长作业来说,随着等待时间越来越久,响应比会越来越大,避免了长作业饥饿的问题
image-20230823081938667

调度算法-②

image-20230823182430753

时间片轮转 RR(分时操作系统)

  • 思想:公平、轮流为各个进程服务,让每个进程在一定时间间隔内都可以得到响应。更关心进程的响应时间。
  • 算法规则:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片。若进程没在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾排队
  • 用于进程调度(只有作业放入内存建立了相应的进程后,才能分配处理机时间片)
  • 抢占式。由时钟装置发出 时钟中断 来通知CPU时间片已到
  • 公平;响应快,适用于分时操作系统
  • 由于高频率进程切换,因此有一定开销;不区分任务的紧急程度
  • 不会导致饥饿
image-20230823083419020 image-20230823083747274 image-20230823083824542

如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法 退化为FCFS调度算法,并且会增大进程响应时间。因此时间片不能太大

时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,导致实际用于进程执行的时间比例减少

  • 一般来说,设计时间片要让切换进程的开销占比不超过1%(了解)

优先级调度

  • 思想:越来越多的场景需要根据任务的紧急程度来决定处理程序
  • 算法规则:调度时选择优先级最高的作业/进程
  • 用于作业/进程调度。甚至可以用于I/O调度中
  • 抢占式(进程主动放弃处理机)、非抢占式(就绪队列改变时+主动放弃处理机)
  • 用优先级区分各种任务的紧急程度、重要程度,适用于实时操作系统。可灵活调整对各种作业/进程的偏好程度。
  • 若一直有高优先级进程进程到来,可能导致 饥饿
image-20230823170047617 image-20230823171036037
  • 就绪队列未必只有一个,可以按照不同优先级来组织。可以把优先级更高的进程排在更靠近队头的位置
  • 优先级可分为静态优先级和动态优先级
    • 静态优先级:创建进程后一直不变
    • 动态优先级:创建进程有一个初始值,之后会根据情况动态地调整优先级
  • 如何合理设置进程优先级
    • 系统进程优先级高于用户进程
    • 前台进程优先级高于后台进程
    • 操作系统更偏好 I/O型进程(I/O繁忙型进程)
      • I/O设备和CPU可以并行工作,I/O型进程优先运行的话,则越有可能让I/O设备尽早投入工作,则资源利用率、系统吞吐量都会得到提升
  • 与 I/O 繁忙型进程相对的是 计算型进程 (CPU繁忙型进程)
  • 如果采用动态优先级,什么时候应该进行调整
    • 从追求公平、提升资源利用率等角度考虑:某进程在就绪队列中等了很长时间提升优先级,某进程占用处理机运行了很长时间降低优先级,某进程频繁进行I/O操作提升其优先级

多级反馈队列

  • 思想:对其他算法的折中权衡
  • 算法规则:
    • 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
    • 新进程到达先进入第1级队列,按FCFS原则排队等待被分配时间片。若时间片用完进程还没结束,进入下一级队列队尾。如果此时已经在最下级队列,则重新放回最下级队列队尾
    • 只有第k级队列为空时,才会为k+1级队头的进程分配时间片
    • 被抢占处理机的进程重新放回原队列队尾
  • 用于进程调度
  • 抢占式
  • 对各类进程相对公平 FCFS;每个新到达的进程都可以很快得到响应 RR;短进程只用较少时间完成 SPF;不必实现估计进程的运行时间(避免用户作假);可灵活地调整对各类进程的偏好程度,比如CPU密集型进程、I/O密集型进程(将I/O阻塞的进程重新放回原队列,保持较高优先级)
  • 会导致饥饿

多级队列调度

image-20230823183036707
posted @ 2023-08-23 18:34  小能日记  阅读(166)  评论(0编辑  收藏  举报