首页 > 编程语言 >《408操作系统 》复习笔记 ③ 第二章 调度与调度算法

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

时间:2023-08-23 18:44:13浏览次数:38  
标签:优先级 复习 队列 作业 调度 时间 进程 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

标签:优先级,复习,队列,作业,调度,时间,进程,408
From: https://www.cnblogs.com/linxiaoxu/p/17652510.html

相关文章

  • Go 并发编程 - runtime 协程调度(三)
    GoRuntimeGoruntime可以形象的理解为Go程序运行时的环境,类似于JVM。不同于JVM的是,Go的runtime与业务程序直接打包在一块,是一个可执行文件,直接运行在操作系统上,效率很高。runtime包含了一些Go的一些非常核心的功能:协程调度、垃圾回收、内存分配等。本文将着重介绍......
  • 任务调度工具_Spring Task在SpringBoot中使用教程
    ##SpringTask1.1介绍SpringTask是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。定位:定时任务框架作用:定时自动执行某段Java代码为什么要在Java程序中使用SpringTask?应用场景:1).信用卡每月还款提醒2).银行贷款每月还款提醒3).火车......
  • 【操作系统-进程】进程的调度算法
    目录0进程调度算法的性能指标1【非抢占式】先来先服务(FCFS)调度算法2【非抢占式+抢占式】短进程优先(SPF)调度算法2.1【非抢占式】短进程优先(SPF)调度算法2.2【抢占式】最短剩余时间(SRTN)优先算法3【非抢占式】高响应比优先(HRRN)调度算法4【抢占式】时间片轮转(RR)调度算法案例一:时......
  • 分布式可视化 DAG 任务调度系统 Taier 的整体流程分析
    Taier作为袋鼠云的开源项目之一,是一个分布式可视化的DAG任务调度系统。旨在降低ETL开发成本,提高大数据平台稳定性,让大数据开发人员可以在Taier直接进行业务逻辑的开发,而不用关心任务错综复杂的依赖关系与底层的大数据平台的架构实现,将工作的重心更多地聚焦在业务之中。本文......
  • OS(十):CPU调度
    多道程序环境中,作业被提交后必须经过处理机调度才能执行。在多道程序系统中,根据一定的算法(公平、高效)将处理机重新分配给就绪队列中的进程去执行,以实现进程并发执行的过程;调度的前提是,进程的数量往往远大于处理机个数,造成进程争用处理机的现象,所以需要将处理机资源......
  • 『复习笔记』树链剖分(重链剖分)
    前言(事出必有因)今天模拟赛有一道线段树+LCA的题,考场上码了两个小时,结果pushup错了,结果线段树调完了,发现TLE了,原来是求LCA炸了。。因为我用的倍增(我就是倍增狗你能把我怎么样),但是倍增的一个重要问题就是log都跑满了,但是树剖跑不满log,别问我为什么不用Tarjan,因为这题是在线的不好......
  • SpringBoot复习:(36)国际化
    一、Resources目录下建立一个目录(比如international)来存储资源文件message.properties空的,但不能没有message_zh_CN.propertieshello=您好message_en_us.propertieshello=helloworld二、自动配置类MessageSourceAutoConfiguration常量MESSAGE_SOURCE_BEAN_NAME为messageSourc......
  • SpringBoot复习:(40)@EnableConofigurationProperties注解的用法
    一、配置文件:server.port=9123二、配置类:packagecn.edu.tju.config;importcom.mysql.fabric.Server;importorg.springframework.boot.autoconfigure.web.ServerProperties;importorg.springframework.boot.context.properties.EnableConfigurationProperties;importorg.......
  • SpringBoot复习:(44)MyBatisAutoConfiguration
    可以看到MyBatisAutoConfiguration引入了MyBatisProperties这个属性:MyBatisAutoConfiguration中配置了一个SqlSessionFactoryBean,代码如下:可以配置mybatis-config.xml,需要配置文件里指定:mybatis.config-locatinotallow=classpath:/mybatis-config.xml同样可配置MyBatis的xml......
  • SpringBoot复习:(46)全局的bean懒加载是怎么实现的?
    在application.properties中配置:spring.main.lazy-initialization=true在运行SpringApplication的run方法时,代码如下:其中调用了prepareContext,prepareContext代码如下:当在配置文件中配置了spring.main.lazy-initializatinotallow=true后,SpringApplication实例的this.lazyInitial......