进程调度算法

表妹教你进程调度算法 前言 进程调度算法也称 CPU 调度算法,当 CPU 空闲时,操作系统就从就绪队列中按照一定的算法选择某个就绪状态的进程,并给其分配 CPU。通常以下几种情况会发生进程的调度: 当进程从运行状态转到等待状态; 当进程从运行状态转到就绪状态; 当进程从等待状态转到就绪状态; 当进程从运行状态转到终止状态; 其中 1 和 4 称为非抢占式调度,2 和 3 称为抢占式调度。非抢占式调度就是当进程正在运行时,它就会一直运行,直到该进程完成或发生某个事件而被阻塞时,才会把 CPU 让给其他进程;抢占式调度就是进程 阅读详情

进程调度算法

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

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

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

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

  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队列的末尾,把处理机分配给新到的高优先权进程。

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

FCFS、SJF、HRRN调度算法 文章目录FCFS、SJF、HRRN调度算法知识总览图先来先服务(FCFS,First Come First Serve)短作业优先(SJF,Shortest Job First)对FCFS和SJF两种算法的思考高响应比优先算法(HRRN,Highest Response Ratio Next) FCFS、SJF、HRRN调度算法 知识总览图 什么叫做饥饿?就是进程一直不被CPU处理。FCFS算法不会导致饥饿是因为,它的所有的进程按到来的时间先后顺序依次执行,所以每个进程都会被执行到。SJF/SPF算法会导 阅读详情

相关推荐

先来先服务(FCFS)调度算法(Java实现)

文章目录前言一、先来先服务(FCFS)是什么?二、先来先服务(FCFS)算法分析三、实现代码1、作业数据类2、作业调度类3、运行结果总结 前言 在操作系统中作业调度的主要任务是根据PCB中的信息,检查系统中的资源能否满足作业对资源的需求,以及按照一定的调度算法从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。本文将以Java程序来实现先来先服务(FCFS)作业调度算法。 提示:以下是本篇文章正文内容,下面案例可供参考 一、先来先服务(FCFS)是什么? FCFS是操作系统中最简单

世纪末的架构师的博客 1万+

操作系统进程调度算法

基本的操作系统进程调度算法包括先来先服务(first come first serve),时间片轮转(round robin),多级反馈轮转法(round robin with multiple feedback),优先级法(静态优先级法/动态优先级法),短作业优先法(shortest job first),最高响应比优先法(highest response_ratio next)。

xy的博客 1万+

下载Python3.10的相关方法及问题解决

下载Python3.10的相关方法及问题解决 报错unable to locate package python3.10-dev以及subprocess.CalledProcessError: Command ‘(‘lsb_release‘, ‘-a‘)‘ returned non-zero exit status 1问题解决

Istil 1555

进程调度算法的模拟

编写程序,采用动态优先级调度算法实现进程调度。要求由用户输入进程PCB信息,优先级大的进程优先分配CPU,且优先级每运行一个CPU时间单位就降低一级。 进程状态分为W(就绪)、R(运行)、F(完成)。就绪进程在获得CPU后只能运行一个时间单位。运行后,将进行PCB中已占用CPU的时间加1。如果运行一个CPU时间单位后,进程的已占用时间达到了所需要的运行时间,则撤销该进程。如果运行一个CPU时间单位后,进程的已占用CPU时间尚未达到所需要的运行时间,即进程还需要继续运行,则此时将进程的优先数减1。

m0_71566369的博客 3834

WorkBench3.2 + VxWorks6.8安装教程

按照FTP连接主机和目标机,将整个VxWorks6.8的安装分为两个部分,一是在主机(win10系统,可以使用虚拟机或者实体机,推荐使用虚拟机)上安装workbench3.2,进行bootrom与VxWroks映像文件的生成,二是在虚拟机上安装VxWorks系统 19.10.10 首先很高兴文章能帮到大家,但由于本人已不做该方向良久,私信和评论的很多问题现在已经无法解答,如果大家有什么问题欢迎...

Alive的博客 3万+

Qt图形视图框架实战:QGraphicsScene、QGraphicsView与QGraphicsItem的深度应用

本文深入解析Qt图形视图框架的核心组件QGraphicsScene、QGraphicsView与QGraphicsItem的实战应用。通过“舞台、镜头与演员”的比喻,清晰阐述了三者的协作关系,并详细介绍了场景管理、多视图同步、交互增强、自定义图形项绘制与性能优化等高级技巧,帮助开发者高效构建复杂的交互式图形界面。

weixin_29251337的博客 263

Python|进程调度算法

按优先数调度算法实现处理器调度的程序 五个进程任意确定一组“优先数”和“要求运行时间”,并输出初始状态 实验结果: 按时间片轮转发实现处理机调度的程序 五个进程任意确定一组“优先数”和“要求运行时间”,并输出初始状态 实验结果: import copy import random class PCB: def __init__(self, id, priority, cpu_time, all_time, state): ''' :param id: 进.

Lhw_666的博客 3782

加密视频如何破解 如何解除机器码绑定的视频

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 如何破解加密...

Q-980767270的博客 5万+

进程调度算法设计

【实验目的】 进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间复用CPU的方法。在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的进程调度,目的是加深对进程调度工作的理解,掌握不...

鸽子的博客 8365

判断两个多边形是否相交(java实现)

判断两个多边形是否相交 ,当前认为一个点相交也是相交,可针对凹多边形和凸边型等多复杂的多边形进行相交判断,采用java实现,因为网上java实现的比较少,所以这里写下如何实现,适用于碰撞检测,地图等等应用场景

IT_CREATE的博客 5845

RS485/CAN总线防护电路设计:TVS选型与ESD防护实战解析

本文深入解析了RS485与CAN总线防护电路设计中的TVS选型与ESD防护实战技巧。针对工业现场常见的静电放电、浪涌等干扰,文章详细阐述了TVS管关键参数的选择、多级防护体系的构建,并特别强调了在隔离电路设计中地回路处理的重要性,帮助工程师设计出更可靠的通信接口。

metaverse5vr的博客 390

常用的进程调度算法

进程调度是由操作系统的进程调度程序按照某种策略和算法从就绪态进程中为当前空闲的CPU选择要运⾏的新进程,常用的进程调度算法有以下几种: 1. 先来先服务调度算法 从就绪队列的队⾸选择最先到达的进程,为该进程分配CPU。下面通过一个例子来说明先来先服务算法。 已知:就续队列中有3个进程, 分别为P1、P2、P3,进入系统的时间分别为0、1、2,服务时间分别为24、3、3,求3个进程的系统......

分享前端工程化、AI 应用、Agent 开发与大模型实践! 6994

宇树机器人G1二次开发:导览、起始点、目的地与完整示例

通过宇树G1 SDK的导航接口,开发者可以高效地实现机器人的自主移动功能。连接 -> 设置目标点 -> 发送命令 -> 监控状态。本文提供的完整示例涵盖了从环境搭建到代码实现的全部步骤,并解释了起始点、目的地等关键概念。开发者可以在此基础上,结合多目标点巡逻、动态避障(需高级配置)等功能,构建更复杂的机器人应用。建议读者先在小范围、熟悉的平坦环境中测试,成功后再逐步扩展到更复杂的场景。

m0_52645558的博客 751

常见进程调度算法总结

一、定义进程调度也称为低级调度,它所调度的对象为进程(或者内核级线程),而进程调度算法主要有以下几种: 先来先服务调度算法 短作业优先调度算法 高优先权优先调度算法 基于时间片的轮转调度算法 多级反馈队列调度算法 二、调度算法介绍(1)先来先服务调度算法(FCFS)简介:先来先服务调度算法是一种最简单的调度算法,可用于作业调度,也可用于进程调度。 原理:在进程调度中采用先来

ArchyLi 3886

Windows 11 安装 OpenClaw(龙虾):不用WSL、不用虚拟机、启动、使用、停止、卸载

本文详解 Windows 11 原生安装 OpenClaw(龙虾)全流程,无需 WSL 或虚拟机。涵盖环境配置、安全警示、模型接入(如通义千问)及技能初始化。提供启动、文件自动化操作、停止与卸载的完整指南,并附常见认证过期解决方案。助您快速部署本地 AI 智能体,实现电脑操作自动化,提升工作效率。

寒水馨 · 轻量级技术文档 · hanshuixin.org 903

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Linux的进程调度算法简介

文章目录一、调度算法的原理和分类1.进程调度简介2.按不同需求对调度的进程分类3.调度算法分类二、使用步骤1.引入库1.引入库总结 一、调度算法的原理和分类 1.进程调度简介   进程调度的研究是整个操作系统理论的核心,在多进程的操作系统中,进程调度是一个全局性的、关键性的问题,它对系统的总体设计、系统的实现、功能设置以及各方面的性能都有着决定性的影响。进程运行需要各种各样的系统资源,如内存、文件、打印机和最宝贵的CPU等,所以说,调度的实质就是资源的分配。系统通过不同的调度算法(Scheduling A

无知亦乐 8126

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

基于C++实现的进程调度算法

本文介绍了一个操作系统进程调度模拟系统的设计与实现。该系统采用C++编程,实现了七种进程调度算法:先来先服务、优先级调度、时间片轮转、短进程优先、最短剩余时间、最高响应比优先和多级反馈队列调度。系统通过控制台界面提供算法选择、历史记录查看、进程创建和调度执行功能,每次调度结果实时显示。各算法采用不同数据结构模拟进程控制块,如FSA和PSA结构体。系统测试展示了各算法的调度过程,包括进程执行顺序和时间分配。该设计有助于理解进程调度原理和算法差异,提高处理机利用率。

毕业作品网站 3309

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

经典进程调度算法

介绍进程调度的概念,产生原因,讲解经典调度算法,以及这些算法的适用场景,优缺点等。重点剖析底层源码,linux0.11内核中schedule函数的实现

暴力扬 1944

关于进程调度算法

什么是进程调度? 当计算机系统处于就绪状态的用户进程数多于CPU数时,就会产生多个进程或线程同时竞争CPU的结果。假设现在只有一个CPU可用,那么操作系统就必须选择下一个要运行的进程。完成这种选择工作的这一部分称为调度程序,该程序使用的算法称为调度算法。尽管有一些不同,但许多适用于进程调度的处理方法也同样适用于线程调度。当内核管理线程的时候,调度经常是按线程级别的,与线程所属的进程基本或根...

lyl194458的博客 922

Linux:进程优先级 进程调度切换 调度算法

在active队列中,执行时间到达时间片的进程会放到expired指向的队列,而新进程也会放到expired指向的队列,那么说明active指向队列中的进程结构体对象,只会越来越少。做了这个操作后,CPU通过current指针找到新进程的代码,覆盖掉原来的ir寄存器的指令,重新计算pc指针的地址,写入新地址。上图是runqueue结构体内部的变量,其中又包含一个queue结构体对象,queue结构体中有task_struct结构体指针数组,里面的元素用于指向进程的task_struct对象。

2301_79171011的博客 1369
上一篇: Leetcode 第 126 场双周赛题解
下一篇: 进程间的通信方式
UestcXiye
博客等级 码龄8年 9031粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值