操作系统之低级调度算法

简介: 本章主要介绍计算机操作系统中的低级调度算法,包括先来先服务算法(FCFS),最短作业优先算法(SJF),最短剩余时间优先算法(SRTF),最高响应比优先算法(HRRF)和相对应的平均作业周转时间和平均带权作业周转时间的计算方法。适用于普通本科院校的同学期末复习或计算机学院教师板书参考用。

低级调度算法


先来先服务算法(FCFS)

先来先服务算法按照作业进入系统后备作业队列的先后次序来挑选作业,和名字一样,谁先到就先服务谁。是一种非剥夺式调度算法。用下面这个例子来具体说明:

作业名 所需CPU时间/ms
作业1 28
作业2 9
作业3 3


所以三个作业的周转时间为28ms,37ms,40ms(有同学可能会好奇为什么 第二个作业的周转时间是37ms而不是9ms,注意!是周转时间,周转时间指的是从作业到达后备作业队列到完成这个作业的时间,作业2的周转时间即28+9=37ms,即包括了在等待作业1做完的这段时间,同理作业3)


故平均作业周转时间T=(28+37+40)/3=35ms


FCFS算法的缺点是只顾及作业等待时间,未考虑作业要求服务时间的长短,就是不管多长时间的作业,只要是第一个来到的,就第一个服务,不能进行调度。如果按上面的例题把作业顺序调为2,1,3,那平均作业周转时间就缩短为约29ms。所以FCFS算法的平均作业周转时间与作业的提交和调度顺序有关

最短作业优先算法(SJF)

最短作业优先算法以进入系统作业所要求的CPU运行时间的长短为标准,总是选取预计计算时间最短的作业投入运行。也是一种非剥夺式的算法。以下用例子来具体说明:

作业名 所需CPU时间/ms
作业1 9
作业2 4
作业3 10
作业4 8


如表格所见,四个作业已经进入了系统的后备作业中,按照最短作业优先算法的要求,作业的调度顺序为2,4,1,3.


则平均作业周转时间T为:

T=(4+12+21+31)/4=17ms

平均带权作业周转时间W为:

W=(4/4+12/8+21/9+31/10)/4=1.98


什么是平均带权周转时间?和平均作业周转时间有什么不同?

看上面的计算过程可知,平均作业周转时间只是把周转时间加起来后除以对应的作业数量,平均带权周转时间则在每个作业的周转时间上除以每个作业的所需CPU时间,带权周转时间=周转时间/所需CPU时间


对比FCFS算法

平均作业周转时间T为

T=(9+13+23+31)/4=19ms

平均带权作业周转时间W为

W=(9/9+13/4+23/10+31/8)/4=2.61ms


可见SJF算法的平均作业周转时间比FCFS要短。但是实现SJF算法要事先知道作业的运行时间,否则调度没有依据。

最短剩余时间优先算法(SRTF)


最短剩余时间优先算法是SJF算法的变种,SJF是非剥夺式的,SRTF是剥夺式的SJF。假设当前某进程/线程正在运行,如果有新进程/线程移入就绪队列,若它所需要的CPU运行时间比当前运行进程/线程所需要的剩余CPU时间还短,抢占式最短作业优先算法强行剥夺当前执行者的控制权,调度新进程/线程执行。以下用例题来具体讲解:


进程 到达系统时间 所需CPU时间/ms
p1 0 8
p2 1 4
p3 2 9
p4 3 5


注意看以下的步骤:

①p1在0开始执行,然后p2在时间1到达,由于p2的所需CPU时间小于p1,所以p2抢占了p1从而占用CPU

②当p2运行完后,时间已经到了5

③这个时候p3,p4也已经进入了就绪队列,但是p4的所需CPU时间小于p1和p3,故先运行p4

④p4运行完后,时间由5+5=10,这个时候由于p1所需CPU时间小于p3,所以先运行p1

⑤因为前面p1已经运行了1ms,所以现在p1只需要运行7ms,时间到了17

⑥最后运行p3,从17开始,加上p3所需要的9,所以完成时间是26


故平均等待时间=((10-1)+(1-1)+(17-2)+(5-3))/4=6.5ms

平均周转时间=((17-0)+(5-1)+(26-2)+(10-3))/4=13ms


平均等待时间怎么算的?10-1,因为时间10后p1才开始执行,然后前面已经执行了时间1(执行了时间1后就被p2剥夺了),所以是10-1;p2是1-1,因为一进来就是时间1,因为是时间最短的就被当场执行;p3是17-2,因为P3达到系统时间是2,然后在时间17开始执行,所以是17-2;P4在时间3出场,时间5执行,所以是5-3。


平均周转时间就是从进入到结束的时间,这里不再叙述。


最高响应比优先算法(HRRF)

最高响应比优先算法在进行调度时需要计算每个作业的最高响应比。

响应比怎么算呢?

最高响应比=作业周转时间/作业处理时间=(作业等待时间+作业处理时间)/作业处理时间=1+作业等待时间/作业处理时间

根据谁的响应比最高来决定谁先执行

以下用例题来具体说明:

作业名 到达系统时间 所需CPU时间/ms

作业1 0 20
作业2 5 15
作业3 10 5
作业4 15 10

执行HRRF算法计算过程如下:

①作业1执行完后,执行时间为20ms

②作业2的响应比为 1+15/15,怎么算的?到达系统时间5,等cpu等了时间15(这15ms作业1正在用CPU),所以响应比=(15+15) /15=1+15/15

作业3的响应比为1+10/5,怎么算的?到达系统时间是10,等CPU等了时间10(这10ms作业1正在用CPU),所以响应比=(10+5)/5=1+10/5

同理作业4也一样,是1+5/10。

每个作业的响应比都要根据第一个作业来进行计算

③因为作业3的响应比最高,所以执行作业3,剩余作业的响应比为1+20/15、1+10/10

④所以执行为作业2后执行作业4

平均作业周转时间T为

T =(20+(25-10)+(40-5)+(50-15))/4=26.25ms

平均带权作业周转时间W为

W=(20/20+15/5+35/15+35/10)/4=2.46ms


本例题来自书

操作系统教程(第5版)费翔林 骆斌 编著

p100-p105


其余操作系统的算法可在博主空间找到!


感谢大家浏览,谢谢!


相关文章
|
2月前
|
算法 调度 Python
深入理解操作系统中的进程调度算法
在操作系统中,进程调度是核心任务之一,它决定了哪个进程将获得CPU的使用权。本文通过浅显易懂的语言和生动的比喻,带领读者了解进程调度算法的重要性及其工作原理,同时提供代码示例帮助理解。
|
2月前
|
算法 调度 UED
深入理解操作系统:进程调度与优先级队列
【10月更文挑战第31天】在计算机科学的广阔天地中,操作系统扮演着枢纽的角色,它不仅管理着硬件资源,还为应用程序提供了运行的环境。本文将深入浅出地探讨操作系统的核心概念之一——进程调度,以及如何通过优先级队列来优化资源分配。我们将从基础理论出发,逐步过渡到实际应用,最终以代码示例巩固知识点,旨在为读者揭开操作系统高效管理的神秘面纱。
|
1月前
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
2月前
|
消息中间件 算法 调度
深入理解操作系统:进程管理与调度
操作系统是计算机系统的核心,负责管理和控制硬件资源、提供用户接口以及执行程序。其中,进程管理是操作系统的重要组成部分,它涉及到进程的创建、调度、同步和通信等方面。本文将深入探讨进程管理的基本概念、进程调度算法以及进程间的同步和通信机制。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程管理的基本技能。
59 11
|
2月前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
操作系统作为计算机系统的核心,其进程管理和调度策略对于系统性能和用户体验至关重要。本文将通过直观的代码示例和浅显易懂的语言,带领读者了解操作系统如何有效管理进程以及常见的进程调度算法。我们将从进程的基本概念出发,逐步深入到进程状态、进程控制块(PCB)的作用,最后探讨不同的调度算法及其对系统性能的影响。无论您是初学者还是有一定基础的开发者,都能从中获得有价值的信息。
|
2月前
|
负载均衡 算法 调度
深入理解操作系统:进程管理与调度
在数字世界的心脏,操作系统扮演着至关重要的角色。它如同一位精明的指挥家,协调着硬件资源和软件需求之间的和谐乐章。本文将带你走进操作系统的核心,探索进程管理的艺术和调度策略的智慧。你将了解到进程是如何创建、执行和消亡的,以及操作系统如何巧妙地决定哪个进程应该在何时获得CPU的青睐。让我们一起揭开操作系统神秘的面纱,发现那些隐藏在日常计算背后的精妙机制。
|
2月前
|
调度 开发者
深入理解操作系统之进程调度
在计算机科学领域,操作系统是核心的一环,它管理着计算机硬件资源,并提供接口供上层软件运行。本文将通过深入浅出的方式,探讨操作系统中至关重要的一个概念——进程调度。我们将从基础理论出发,逐步展开讲解进程调度的原理和实现,并配以实际代码示例,旨在帮助读者更好地理解和掌握这一主题。文章不仅适合初学者建立基础,也适合有一定基础的开发者深化理解。
|
2月前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第40天】在数字世界中,操作系统是连接硬件与软件的桥梁,它管理着计算机资源和提供用户服务。本文将深入探讨操作系统中的进程管理与调度策略,揭示它们如何协调多任务运行,保证系统高效稳定运作。通过代码示例,我们将展示进程创建、执行以及调度算法的实际应用,帮助读者构建对操作系统核心机制的清晰认识。
|
2月前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
2月前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第34天】本文旨在探讨操作系统中至关重要的一环——进程管理及其调度策略。我们将从基础概念入手,逐步揭示进程的生命周期、状态转换以及调度算法的核心原理。文章将通过浅显易懂的语言和具体实例,引导读者理解操作系统如何高效地管理和调度进程,保证系统资源的合理分配和利用。无论你是初学者还是有一定经验的开发者,这篇文章都能为你提供新的视角和深入的理解。
47 3