首页 > 编程语言 >调度算法

调度算法

时间:2024-04-07 18:02:28浏览次数:25  
标签:作业 调度 算法 时间 进程 等待时间

调度算法评价指标

image-20240318115504302

CPU利用率

由于早期的CPU造价极其昂贵,因此人们会希望让CPU尽可能多地工作

CPU利用率:指CPU“忙碌”的时间占总时间的比例。

image-20240318115532004

Eg:某计算机只支持单道程序,某个作业刚开始需要在CPU上运行5秒,再用打印机打印输出5秒,之后再执行5秒,才能结束。在此过程中,CPU利用率、打印机利用率分别是多少?

image-20240318115542858

系统吞吐量

对于计算机来说,希望能用尽可能少的时间处理完尽可能多的作业

image-20240318115606798

即平均每秒可以完成多少道作业?

image-20240318115629867

周转时间

对于计算机的用户来说,他很关心自己的作业从提交到完成花了多少时间。

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

它包括四个部分:

  • 作业在外存后备队列上等待作业调度(高级调度)的时间、

  • 进程在就绪队列上等待进程调度(低级调度)的时间、

  • 进程在CPU上执行的时间、

  • 进程等待I/O操作完成的时间。

后三项在一个作业的整个处理过程中,可能发生多次。

image-20240318153130446

image-20240318153138061

对于用户来说,更关心自己的单个作业的周转时间

对于操作系统来说,更关心系统的整体表现,因此更关心所有作业周转时间的平均值

思考:有的作业运行时间短,有的作业运行时间长,因此在周转时间相同的情况下,运行时间不同的作业,给用户的感觉肯定是不一样的

带权周转时间

image-20240318153253429

对于周转时间相同的两个作业,实际运行时间长的作业在相同时间内被服务的时间更多,带权周转时间更小,用户满意度更高。

对于实际运行时间相同的两个作业,周转时间短的带权周转时间更小,用户满意度更高。

带权周转时间必然≥1

带权周转时间与周转时间都是越小越好

image-20240318153431830

等待时间

计算机的用户希望自己的作业尽可能少的等待处理机

等待时间,指进程/作业处于等待处理机状态时间之和,等待时间越长,用户满意度越低。

作业调入内存后,建立对应的进程。这个进程会被CPU服务、会被I/O设备服务,当然也会有等待被服务的时候

  • 对于进程来说,等待时间就是指进程建立后等待被服务的时间之和,但是在等待I/O完成的期间其实进程也是在被服务的,所以不计入等待时间。

  • 对于作业来说,不仅要考虑建立进程后的等待时间,还要加上作业在外存后备队列中等待的时间

一个作业总共需要被CPU服务多久,被I/O设备服务多久一般是确定不变的,因此调度算法其实只会影响作业/进程的等待时间。当然,与前面指标类似,也有“平均等待时间”来评价整体性能。

响应时间

对于计算机用户来说,会希望自己的提交的请求(比如通过键盘输入了一个调试命令)尽早地开始被系统服务、回应。

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

image-20240318154523093

调度算法(早期批处理)

image-20240318154801205

Tips:各种调度算法的学习思路

  1. 算法思想

  2. 算法规则

  3. 这种调度算法是用于作业调度还是进程调度?

  4. 抢占式?非抢占式?

  5. 优点和缺点

  6. 是否会导致饥饿(某进程/作业长期得不到服务)

先来先服务FCFS

image-20240318155724881

image-20240318155018794

image-20240318155024335

先来先服务调度算法:按照到达的先后顺序调度,事实上就是等待时间越久的越优先得到服务。

image-20240318155210703

周转时间

image-20240318155232797

带权周转时间

image-20240318155238849

等待时间

image-20240318155333645

注意:本例中的进程都是纯计算型的进程,一个进程到达后要么在等待,要么在运行。如果是又有计算、又有1/0操作的进程,其等待时间就是周转时间-运行时间1/0操作的时间

平均周转时间/带权周转时间/平均等待时间

image-20240318155617112

短作业优先SJF

image-20240318170826280

image-20240318170118013

严格来说,用于进程调度应该称为短进程优先调度算法(SPF)

image-20240318170133356

短作业/进程优先调度算法:每次调度时选择当前已到达且运行时间最短的作业/进程。

image-20240318170157003

注意,不是运行时间最短就先走,要先看到没到达!!!

指标计算

image-20240318170222301

对比FCFS算法的结果,显然SPF算法的平均等待/周转/带权周转时间都要更低

抢占式版本:最短剩余时间优先算法:

每当有进程加入就绪队列改变时就需要调度,

如果新到达的进程剩余时间比当前运行的进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外,当一个进程完成时也需要调度

需要注意的是,当有新进程到达时就绪队列就会改变,就要按照上述规则进行检查。以下P, (m)表示当前P,进程剩余时间为m。各个时刻的情况如下:

image-20240318170503379

image-20240318170519311

对比非抢占式的短作业优先算法,显然抢占式的这几个指标又要更低

指标计算

image-20240318170607597

提醒

  1. 如果题目中未特别说明,所提到的“短作业/进程优先算法”默认是非抢占式

  2. 很多书上都会说"SJF调度算法的平均等待时间、平均周转时间最少”严格来说,这个表述是错误的,不严谨的。

    之前的例子表明,最短剩余时间优先算法得到的平均等待时间、平均周转时间还要更少应该加上一个条件“在所有进程同时可运行时,采用SJF调度算法的平均等待时间、平均周转时间最少”;

    或者说“在所有进程都几乎同时到达时,采用SJF调度算法的平均等待时间、平均周转时间最少”

  3. 虽然严格来说, SJF的平均等待时间、平均周转时间并不一定最少,但相比于其他算法(如FCFS) ,SJF依然可以获得较少的平均等待时间、平均周转时间

  4. 如果选择题中遇到"SJF算法的平均等待时间、平均周转时间最少”的选项,那最好判断其他选项是不是有很明显的错误,如果没有更合适的选项,那也应该选择该选项

FCFS vs SJF

  • FCFS算法是在每次调度的时候选择一个等待时间最长的作业(进程)为其服务。但是没有考虑到作业的运行时间,因此导致了对短作业不友好的问题

  • SJF 算法是选择一个执行时间最短的作业为其服务。但是又完全不考虑各个作业的等待时间,因此导致了对长作业不友好的问题,甚至还会造成饥饿问题

高响应比优先HRRN

image-20240318170935601

算法规则:在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务

image-20240318171007622

image-20240318171020147

高响应比优先算法:非抢占式的调度算法,只有当前运行的进程主动放弃CPU时(正常/异常完成,或主动阻塞) ,才需要进行调度,调度时计算所有就绪进程的响应比,选响应比最高的进程上处理机。

image-20240318171053934

image-20240318171141454

P2和P4要求服务时间一样,但P2等待时间长,所以必然是P2响应比更大

image-20240318171213768

对于长作业来说,随着等待时间越来越久,其响应比也会越来越大,从而避免了长作业饥饿的问题

image-20240318171257988

image-20240318171305637

注:这几种算法主要关心对用户的公平性、平均周转时间、平均等待时间等评价系统整体性能的指标,但是不关心“响应时间”,也并不区分任务的紧急程度,因此对于用户来说,交互性很糟糕。因此这三种算法一般适合用于早期的批处理系统,当然, FCFS算法也常结合其他的算法使用,在现在也扮演着很重要的角色。而适合用于交互式系统的调度算法将在下个小节介绍….

调度算法(交互式系统)

image-20240318171411331

Tips:各种调度算法的学习思路

  1. 算法思想
  2. 算法规则
  3. 这种调度算法是用于作业调度还是进程调度?
  4. 抢占式?非抢占式?
  5. 优点和缺点
  6. 是否会导致饥饿

时间片轮转RR

image-20240318172256834

image-20240318171611180

常用于分时操作系统,更注重“响应时间”,因而此处不计算周转时间

时间片轮转调度算法:轮流让就绪队列中的进程依次执行一个时间片(每次选择的都是排在就绪队列队头的进程)

时间片大小为2

(注:以下括号内表示当前时刻就绪队列中的进程、进程的剩余运行时间)

image-20240318171802219

image-20240318171905737

image-20240318171926724

时间片大小为5

image-20240318172048198

image-20240318172059702

↑与FCFS差不多哦

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

比如:系统中有10个进程在并发执行,如果时间片为1秒,则一个进程被响应可能需要等9秒…也就是说,如果用户在自己进程的时间片外通过键盘发出调试命令,可能需要等待9秒才能被系统响应

另一方面,进程调度、切换是有时间代价的(保存、恢复运行环境),因此如果时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。可见时间片也不能太小。

优先级调度算法

算法规则:每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程

image-20240318172832051

非抢占式优先级调度

image-20240318172343827

image-20240318172349570

image-20240318172358235

image-20240318172426592

抢占式的优先级调度算法:

每次调度时选择当前已到达且优先级最高的进程。当前进程主动放弃处理机时发生调度。

另外,当就绪队列发生改变时也需要检查是会发生抢占。

image-20240318172523802

image-20240318172613228

补充

补充:就绪队列未必只有一个,可以按照不同优先级来组织。另外,也可以把优先级高的进程排在更靠近队头的位置

根据优先级是否可以动态改变,可将优先级分为静态优先级和动态优先级两种。

静态优先级:创建进程时确定,之后一直不变。

动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级。

如何合理地设置各类进程的优先级?

image-20240318172719453

I/O设备和CPU可以并行工作。如果优先让I/O繁忙型进程优先运行的话,则越有可能让I/O设备尽早地投入工作,则资源利用率、系统吞吐量都会得到提升

如果采用的是动态优先级,什么时候应该调整?

多级反馈队列调度算法

image-20240318175104183

image-20240318175822548

设置多级就绪队列,各级队列优先级从高到低,时间片从小到大,优先级越高时间片越小。

image-20240318175201318

image-20240318175210003

image-20240318175214676

新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片。

用完时间片进程还未结束,则进程进入下一级队列队尾。

如果此时已经在最下级的队列,则重新放回最下级队列队尾

image-20240318175314715

只有第 k 级队列为空时,才会为 k+1 级队头的进程分配时间片:

image-20240318175353452

执行两个时间片,但是还没执行完。继续放到第三级队列!

image-20240318175426272

但是这个时候P3进入第一级队列,此时p2还没运行完。被抢占处理机的进程重新放回原队列队尾,p3抢占

image-20240318175541675

image-20240318175702250

image-20240318175710434

没有其他进程了,P1会一直在第三级队列。

image-20240318175833177

注:比起早期的批处理操作系统来说,由于计算机造价大幅降低,因此之后出现的交互式操作系统(包括分时操作系统、实时操作系统等)更注重系统的响应时间、公平性、平衡性等指标。而这几种算法恰好也能较好地满足交互式系统的需求。因此这三种算法适合用于交互式系统。(比如UNIX使用的就是多级反馈队列调度算法)

多级队列调度算法

系统中按进程类型设置多个队列,进程创建成功后插入某个队列

image-20240318175959583

image-20240318180006702

image-20240318180013078

标签:作业,调度,算法,时间,进程,等待时间
From: https://www.cnblogs.com/nekodream/p/18119593

相关文章

  • 【算法】数论
    题目链接前言疑似是有点不会数学了,照着题解推式子都推了小半个下午,还看不出来减法公式,唉。题解考虑把这些\(f(a,b)\)异或起来再模一个数不会有很好的性质,所以要把每一个\(f(a,b)\)都算出来。由加法公式得\[f(a,b)=\sum\\tbinom{b}{i}\tbinom{n-i}{a}\]\[=\sum\tbin......
  • 排序算法——快速排序
    问题描述 现有一组数据:23,45,18,11,13,79,72,25,3,17,请使用快速排序算法将它们按照从小到大的顺序排列。算法思想(1)在无序数据中选一个基准数(通常为数据第一个);(2)将数据中小于基准数的数据移到基准数左边,大于基准数的移到右边;(3)对于基准数左、右两边的数据,不断重复以上两个......
  • 贪心算法|1005.K次取反后最大化的数组和
    力扣题目链接classSolution{staticboolcmp(inta,intb){returnabs(a)>abs(b);}public:intlargestSumAfterKNegations(vector<int>&A,intK){sort(A.begin(),A.end(),cmp);//第一步for(inti=0;i<A.size......
  • 操作系统综合题之“采用动态分区分配算法下的3种算法(首次适应算法、循环首次适应算法
    一、问题:当空闲链如下图,第一个空闲分区起始地址为20KB,大小为120KB;第二个空闲分区起始地址为200KB,大小为100KB;第三个空闲分区起始地址为400KB,大小为60KB。若某进程P1先申请大小为30KB的内存空间,随后进程P2再申请大小为20KB的内存空间,画出给P1分配完之后的空闲链和给P2分配完......
  • 强化学习算法性能表现
    各算法在不同环境中的表现:来自天寿基准测试https://tianshou.org/en/stable/01_tutorials/06_benchmark.html1.HalfCheetah-v3SAC>DDPG>TD3>PPO>TRPO>NPG>ACKTR>A2C>REINFORCE2.蚂蚁v3SAC>TD3>A2C>PPO>......
  • 因为算法不同,客户端与服务器无法通信。”的解决方法
    因为算法不同,客户端与服务器无法通信。”的解决方法sqlserver客户端远程sqlserver服务器 或是mstsc 最后根据微软文档的说明,改动注册表就成功了:传输层安全性(TLS)注册表设置|MicrosoftDocs在注册表编辑器,找到以下注册表项/文件夹:HKEY_LOCAL_MACHINE\SYSTEM\Curren......
  • Python算法学
    Python算法学习平台有很多,它们提供了丰富的资源和工具,帮助学习者从基础到高级的算法知识。以下是一些流行的Python算法学习平台:1.**LeetCode**:-网址:[https://leetcode.com/](https://leetcode.com/)-特点:LeetCode是一个非常受欢迎的在线编程平台,提供了大量的编程挑战,主......
  • CS202 WeensyOS 内存分配算法
    CS202:实验室4:WeensyOSCS202:实验室4:WeensyOS介绍在这个实验室中,您将在一个(但却是真实的!)操作系统,名为WeensyOS。这将向您介绍虚拟内存,并强化我们已经介绍过的一些概念学期WeensyOS内核在x86-64CPU上运行。因为操作系统内核运行在“裸”硬件上,所以调试内核代码可能很难:如果一个......
  • 常见的排序算法——插入排序
    本文记述了插入排序的基本思想和一份参考实现代码,并在说明了算法的性能后用实验进行了验证。◆思想将第一个元素之后的所有元素作为待排序范围,将前面的所有元素作为已排序范围。通过一一比较,逐个交换已排序范围内比第二个元素大的所有元素,使第二个元素被插入到了正确的位置。然......
  • ACTL5105人工智能算法
    ACTL5105分配到期时间:2024年4月15日星期日下午5点这是一项个人课业。总分为100分,占总分的20%球场标记。工作分配任务作为一名人寿精算师,你的任务是完成以下两项任务。任务I(25分)创建列出Ax、¨Ax、,2Ax、(IA)x和(IA¨)x假设excel文件“A-population-2020”中人群的年利率为5%。(说明:您......