进程调度算法

进程调度算法

  • 进程调度算法
    • 先来先服务调度
    • 基于优先级调度(Priority Scheduling)
    • 短进程优先 / 最短剩余时间优先
    • 轮转法(Round-Robin Scheduling)
    • 高响应比优先调度算法(Highest Response Ratio Next)
    • 多级反馈队列调度算法

进程调度算法

无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数,这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。

这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。

调度算法是指:根据系统的资源分配策略所规定的资源分配算法。

高级、中级和低级调度作业从提交开始直到完成,往往要经历下述三级调度:

  1. 高级调度(High-Level Scheduling):又称为作业调度,它决定把后备作业调入内存运行;
  2. 低级调度(Low-Level Scheduling):又称为进程调度,它决定把就绪队列的某进程获得CPU;
  3. 中级调度(Intermediate-Level Scheduling):又称为在虚拟存储器中引入,在内、外存对换区进行进程对换。

先来先服务调度

先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。

当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。

在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。

来看一个例子,假设有三个进程和它们各自执行时间(以毫秒为单位)如下表:

在这里插入图片描述

那么如果三个进程按照P1、P2、P3的顺序启动的话,按照先到先服务的调度算法,执行过程如下:

在这里插入图片描述

平均等待时间就是(0 + 24 + 27) / 3 = 17毫秒。

FCFS算法是非抢占式的,一旦内核将CPU分配给一个进程就不会被释放了,除非进程结束或者请求I/O阻塞。这也是我们之前学习的多任务系统的特点。

基于优先级调度(Priority Scheduling)

在优先级调度算法中,每个进程都关联一个优先级,内核将CPU分配给最高优先级的进程。具有相同优先级的进程,按照先来先服务的原则进行调度。

假设进程的执行时间和优先级如下,并且这些进程同时存在于内存中时,内核基于优先级的调度过程如下:

在这里插入图片描述

采取基于优先级调度算法要考虑进程饿死的问题,因为高优先级的进程总是会被优先调度,具有低优先级的进程可能永远都不会被内核调度执行。Aging是对于这个问题的一个解决方案,所谓Aging就是指逐渐提高系统中长时间等待的进程的优先级。比如如果优先级的范围从127到0(127表示最低优先级),那么我们可以每15分钟将等待进程的优先级加1。最终经过一段时间,即便是拥有最低优先级127的进程也会变成系统中最高优先级的进程,从而被执行。

优先级调度可以抢占式或者非抢占式的。当一个进程在就绪队列中时,内核将它的优先级与正在CPU上执行的进程的优先级进行比较。当发现这个新进程的优先级比正在执行的进程高时:对于抢占式内核,新进程会抢占CPU,之前正在执行的进程转入就绪队列;对于非抢占式内核,新进程只会被放置在就绪队列的头部,不会抢占正在执行的进程。

短进程优先 / 最短剩余时间优先

该算法从就绪队列中选出下一个“CPU执行期最短”的进程,为之分配处理机。

最短作业优先调度是优先级调度的特例。在优先级调度中我们根据进程的优先级来进行调度,在最短作业优先调度中我们根据作业的执行时间长短来调度。

通过下面的例子来看看它是怎样调度的。

在这里插入图片描述

进程1首先执行了1毫秒,当执行时间更短的进程2进入就绪队列时发生抢占。进程3在进程2执行1毫秒后到来,但是进程3的执行时间比进程2长。同理进程4的到来也没法抢占进程2,所以进程2可以一直执行到结束。之后是执行时间第二短的进程4执行,最后是进程1(要看剩余执行时间,还剩7毫秒)和进程3。

该算法虽可获得较好的调度性能,但难以准确地知道下一个CPU执行期,而只能根据每一个进程的执行历史来预测。

轮转法(Round-Robin Scheduling)

前几种算法主要用于批处理系统中,不能作为分时系统中的主调度算法,在分时系统中,都采用时间片轮转法。

分类:

  • 简单轮转法:系统将所有就绪进程按FIFO规则排队,按一定的时间间隔把处理机分配给队列中的进程。这样,就绪队列中所有进程均可获得一个时间片的处理机而运行。
  • 多级队列方法:将系统中所有进程分成若干类,每类为一级。

RR调度算法转为分时系统设计,它与FCFS很像,但是加入了抢占。具体调度过程是:内核从就绪队列中选取第一个进程,将CPU资源分配给它,并且设置一个定时器在一个时间片后中断该进程,调度就绪队列中的下一进程。很明显,RR调度算法是抢占式的,并且在该算法的调度下,没有一个进程能够连续占用CPU超过一个时间片,从而达到了分时的目的。

来看下面的例子,假设一个时间片的长度为4毫秒:

在这里插入图片描述

高响应比优先调度算法(Highest Response Ratio Next)

HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之间的折中算法。

FCFS算法所考虑的只是作业等待时间,而忽视了作业的运行时间(类似我们在生活中排队买东西)。而SJF算法正好与之相反,只考虑作业的运行时间,而忽视了作业的等待时间。

高响应比优先算法,则是考虑了作业的等待时间,又考虑了作业运行时间的调度算法,因此照顾了短作业,又不致使长作业等待时间过长,从而改善了处理机的调度的性能。

这个算法相当于给与每个作业一个动态的优先级,这个优先级是随着时间变化的变化的,等待时间不断地增加,这将让长作业的优先级在等待期间不断地增大,等待足够的时间,必然会得到处理机。

优先级 = (等待时间+要求服务时间)/要求服务时间。又因为,等待时间与要求服务时间之和为系统对作业的响应时间,所以优先级 = 响应时间/要求服务时间。

规律:

  1. 作业的等待时间相同,则要求服务的越短,优先级越高,类似于SJF算法
  2. 当要求服务的时间相同时,等得越久优先级越高,类似于FCFS算法。
  3. 对于长作业来说,该算法实现了较好的折中。

例题:

在这里插入图片描述

多级反馈队列调度算法

在采用多级反馈队列调度算法的系统中,调度算法的实施过程如下所述:

  1. 设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第一个队列的时间片长一倍,以此类推。
  2. 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列,……,如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n队列便采取按时间片轮转的方式运行。
  3. 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程。

多级反馈队列调度算法则不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/579155.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚信安全联合人保财险推出数字安全保障险方案,双重保障企业数字化转型

数字化发展,新兴技术的应用与落地带来网络攻击的进一步演进升级,同时全球产业链供应链融合协同的不断加深,更让网络威胁的影响范围与危害程度不断加剧。 企业单纯依靠自身安全能力建设,能否跟上网络威胁的进化速度?能否…

使用nvm管理nodejs版本

文章目录 1、下载NVM2、选择NVM安装3 、查询版本号&常用命令4、nvm命令安装指定版本node4.1 安装指定node4.2 查看是否安装成功4.3 切换node版本到你想要的版本4.4 再次查看nvm版本列表4.5 nvm其他常用命令 这个是每个全能前端经常会用到的,之前用过现在重装了&…

目前现货黄金行情技术分析

目前行情黄金可以投资吗?不论是黄金价格怎么波动,总是有投资者问这个问题,原因是他们搞不清现状,弄不懂当前的市场形势,对于技术分析和基本分析的方法也不甚了解,因此缺乏对未来行情判断的能力。下面我们就…

探究分布式事务:深入ACID特性在分布式系统中的挑战与解决方案

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 ✨✨ 帅哥美女们,我们共同加油!一起进步&am…

代码随想录训练营Day37:● 738.单调递增的数字 ● 968.监控二叉树 ● 总结

738.单调递增的数字 题目链接 https://leetcode.cn/problems/monotone-increasing-digits/description/ 题目描述 思路 从后往前遍历数字的每一位,如果前一位大于后一位,则将其减一,后边的一位取 i-9 中最大的 解答的两点疑惑:…

类中属性赋值过程

1 、在类的属性中,可以有哪些位置给属性赋值? ① 默认初始化 package chapter06_oop1.src.com.atguigu09.bean_uml;public class UserTest {public static void main(String[] args) {User u1 new User();System.out.println(u1.age);} }class User{/…

【深度学习目标检测】二十四、基于深度学习的疲劳驾驶检测系统-含数据集、GUI和源码(python,yolov8)

设计一个疲劳驾驶检测系统的重要性主要体现在以下几个方面: 提高道路安全:疲劳驾驶是引发交通事故的重要因素之一。驾驶员在长时间驾驶或缺乏休息的情况下,反应速度和判断能力会显著下降,从而增加事故风险。通过实时检测驾驶员的疲…

基于Websocket的局域网聊天系统

1.1 研究背景及意义 本项目所对应领域的研究背景及意义[1]。新冠肺炎局域网通信发生以来,大数据、云计算、人工智能等新一代信息技术加速与交通、局域网通信、教育、金融等领域深度融合,让局域网通信防控的组织和执行更加高效,成为战“疫”的…

【Frida】【Android】06_夜神模拟器中间人抓包

🛫 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

C#使用SQLite(含加密)保姆级教程

C#使用SQLite 文章目录 C#使用SQLite涉及框架及库复制runtimes创建加密SQLite文件生成连接字串执行SQL生成表SQLiteConnectionFactory.cs 代码结构最后 涉及框架及库 自己在NuGet管理器里面安装即可 Chloe.SQLite:ORM框架Microsoft.Data.Sqlite.Core:驱…

A Little Is Enough: Circumventing Defenses For Distributed Learning

联邦学习的攻击方法:LIE 简单的总结,只是为了能快速想起来这个方法。 无目标攻击 例如总共50个客户端,有24个恶意客户端,那么这个时候,他需要拉拢2个良性客户端 计算 50 − 24 − 2 50 − 24 0.923 \frac{50-24-2}{…

(学习日记)2024.03.27:UCOSIII第二十四节:任务状态

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…