进程调度算法-先来先服务、最短作业优先调度算法和高响应比优先调度算法


前言

进程是由 CPU 调度的,因此进程调度算法也称 CPU 调度算法。本篇文章介绍几种常见的单核CPU调度算法,虽然现代计算机大多都是多核的,但单核CPU调度算法是多核CPU的基础,所以学好单核CPU调度算法非常重要。


一、进程的上下文切换

在学习进程调度算法时,我们先来看游戏进程上下文切换的概念。关于进程的基本知识以及与线程之间的区别,可以参考进程与线程的区别这篇文章先复习一下。

我们先来理解一下上下文是什么意思?
简单来说:进程的上下文就是外界给进程提供的运行环境,具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。

什么是进程的上下文切换?
各个进程之间是共享 CPU 资源的,在不同的时候进程之间需要切换,让不同的进程可以在CPU 执⾏,那么这个⼀个进程切换到另⼀个进程运⾏,称为进程的上下⽂切换。

进程上下文切换包括保存当前任务的运行环境,恢复将要运行任务的运行环境。当进程被切换时,操作系统内核必须先保护现场,即将处理机状态信息保存在相应进程的PCB中,以便在该进程重新执行时能再从断点继续执行。
在这里插入图片描述
了解完了上下文切换的概念,我们来思考一下进程什么时候会发生一次调度?
我们都知道进程是由生命周期的,当进程从⼀个状态到另外⼀状态变化的时候,就是发生调度的时候,以下是三种常见的场景:

  1. 就绪态 -> 运⾏态:当进程被创建时,会进⼊到就绪队列,操作系统会从就绪队列选择⼀个进程运⾏;
  2. 运⾏态 -> 阻塞态:当进程发⽣ I/O 事件⽽阻塞时,操作系统必须另外⼀个进程运⾏;
  3. 运⾏态 -> 死亡态:当进程退出结束后,操作系统得从就绪队列选择另外⼀个进程运⾏;

进程调度算法简单来说就是采用哪一种方式从就绪队列中选择一个进程来运行,选择方式的不同就会导致调度算法的不同。当然评价一个调度算法有很多的方面,例如CPU 利⽤率和吞吐量(是单位时间内 CPU 完成进程的数量),下面就来正式介绍几种常见的调度算法。


二、先来先服务调度算法

先来先服务(First Come First Seved, FCFS)算法是最简单的⼀个调度算法。每次把当前处于就绪队列之首的那个进程调度到运行状态,直到这个进程退出或者阻塞,才会去选择下一个进程。
在这里插入图片描述

特点:FCFS算法简单易行,是一种非抢占式策略,但性能却不大好。当⼀个长作业先运行了,那么后面的短作业等待的时间就会很长,不利于短作业。

例如:你(短作业)去银行办理业务可能只需要几分钟时间,结果第一个来的大哥(长作业)事情非常多需要的时间比较长,这时就会让你等很久。


三、最短作业优先调度算法

最短作业优先(Shortest Job First, SJF)调度算法同样也很简单,它会优先选择运行时间最短的进程来运⾏。
在这里插入图片描述

特点:如果就绪队列有⾮常多的短作业,那么就会使得⻓作业不断的等待,造成等待时间过长

例如:银行说了时间少的先来办理,由于你今天办理的业务比较多花费的时间比较长,所以就要一直等其他人办完了才轮到你。


四、高响应比优先调度算法

FCFS和SJF调度算法的弊端就是在于没有权衡短作业和长作业。高响应比优先(Highest Response Ratio Next, HRRN)调度算法做到了这一点,每次进⾏进程调度时,先计算响应⽐优先级,然后把响应⽐优先级最⾼的进程投⼊运⾏。
在这里插入图片描述
高响应比优先是怎么考虑到短作业的?
两个进程的等待时间相同时,要求的服务时间越短,优先级就越⾼,这样短作业的进程容易被选中运⾏;
高响应比优先是怎么考虑到长作业的?
进程的优先级可以随时间等待的增加⽽提⾼,当其等待时间⾜够⻓时,其响应⽐便可以升到很⾼,⻓作业从⽽获得运⾏的机会;


总结

进程调度算法是面试中经常会被问到的知识点,本篇文章介绍了三种常见的单核CPU进程调度算法,内容相比较简单,在接下来的文章中还将介绍更多的进程调度算法供大家参考学习。


猜你喜欢

转载自blog.csdn.net/qq_52173163/article/details/126235541