操作系统之低级调度算法

简介: 本章主要介绍计算机操作系统中的低级调度算法,包括先来先服务算法(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


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


感谢大家浏览,谢谢!


相关文章
|
1月前
|
算法 调度 UED
探索操作系统的心脏:调度算法的奥秘与影响
【10月更文挑战第9天】 本文深入探讨了操作系统中至关重要的组件——调度算法,它如同人体的心脏,维持着系统资源的有序流动和任务的高效执行。我们将揭开调度算法的神秘面纱,从基本概念到实际应用,全面剖析其在操作系统中的核心地位,以及如何通过优化调度算法来提升系统性能。
|
15天前
|
算法 调度 UED
深入理解操作系统:进程调度与优先级队列
【10月更文挑战第31天】在计算机科学的广阔天地中,操作系统扮演着枢纽的角色,它不仅管理着硬件资源,还为应用程序提供了运行的环境。本文将深入浅出地探讨操作系统的核心概念之一——进程调度,以及如何通过优先级队列来优化资源分配。我们将从基础理论出发,逐步过渡到实际应用,最终以代码示例巩固知识点,旨在为读者揭开操作系统高效管理的神秘面纱。
|
14天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
13天前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第34天】本文旨在探讨操作系统中至关重要的一环——进程管理及其调度策略。我们将从基础概念入手,逐步揭示进程的生命周期、状态转换以及调度算法的核心原理。文章将通过浅显易懂的语言和具体实例,引导读者理解操作系统如何高效地管理和调度进程,保证系统资源的合理分配和利用。无论你是初学者还是有一定经验的开发者,这篇文章都能为你提供新的视角和深入的理解。
34 3
|
15天前
|
人工智能 算法 大数据
Linux内核中的调度算法演变:从O(1)到CFS的优化之旅###
本文深入探讨了Linux操作系统内核中进程调度算法的发展历程,聚焦于O(1)调度器向完全公平调度器(CFS)的转变。不同于传统摘要对研究背景、方法、结果和结论的概述,本文创新性地采用“技术演进时间线”的形式,简明扼要地勾勒出这一转变背后的关键技术里程碑,旨在为读者提供一个清晰的历史脉络,引领其深入了解Linux调度机制的革新之路。 ###
|
17天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
52 4
|
18天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
18天前
|
消息中间件 算法 调度
深入理解操作系统:进程管理与调度策略
【10月更文挑战第29天】本文将带领读者深入探讨操作系统中的核心组件之一——进程,并分析进程管理的重要性。我们将从进程的生命周期入手,逐步揭示进程状态转换、进程调度算法以及优先级调度等关键概念。通过理论讲解与代码演示相结合的方式,本文旨在为读者提供对进程调度机制的全面理解,从而帮助读者更好地掌握操作系统的精髓。
31 1
|
18天前
|
算法 调度 UED
深入理解操作系统中的进程调度
【10月更文挑战第29天】探索进程调度的奥秘,本文将带你深入了解在操作系统中如何管理和控制多个并发执行的程序。从简单的调度算法到复杂的多级反馈队列,我们将逐步揭示如何优化系统性能和提高资源利用率。准备好一起揭开进程调度的神秘面纱吧!
|
23天前
|
算法 大数据 Linux
深入理解操作系统之进程调度算法
【10月更文挑战第24天】本文旨在通过浅显易懂的语言,带领读者深入了解操作系统中的进程调度算法。我们将从进程的基本概念出发,逐步解析进程调度的目的、重要性以及常见的几种调度算法。文章将通过比喻和实例,使复杂的技术内容变得生动有趣,帮助读者建立对操作系统进程调度机制的清晰认识。最后,我们还将探讨这些调度算法在现代操作系统中的应用和发展趋势。
下一篇
无影云桌面