操作系统原理 —— 七种常见的调度算法(十三)

本文介绍了几种常见的操作系统调度算法,包括先来先服务(FCFS)、短作业优先(SJF)、高响应比优先(HRRN)、时间片轮转、优先级调度以及多级反馈队列。每种算法都有其独特的思想、规则、优缺点,以及是否可能导致进程饥饿。例如,FCFS算法公平但可能造成长作业等待时间过长,而SJF算法追求最小等待时间但可能导致长作业饥饿。多级反馈队列则是对这些算法的一种综合平衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家都知道,学习这种类型的算法,在很多时候,我们只是学习它的一种思想,那有没有好的学习调度算法的思路呢?
我们可以基于一下路线,来学习调度算法:

  • 1、算法思想
  • 2、算法规则
  • 3、这种调度算法是用于 作业调度 还是 进程调度?
  • 4、抢占式,还是非抢占式?
  • 5、优点和缺点
  • 6、是否会导致饥饿(饥饿是指某个进程/作业长期得不到服务,一直处于等待状态)

那么我们就基于以上路线,来学习常见的调度算法:

先来先服务(FCFS)

算法思想:先来先服务算法主要是从"公平"的角度考虑,类似我们在生活中排队买东西一样,谁先来就谁先买到。

算法规则:按照作业/进程达到的先后顺序,按照顺序依次执行。

用于作业/进度调度:用于作业调度时,考虑的是哪个作业先到达后备队列;用于进程调度时,考虑的是哪个进程先到达就绪队列。

是否可抢占:由于这种算法的思想是从“公平”的角度考虑,所以当然是非抢占式,按照排队顺序依次执行。

优缺点:优点的话就是对于每个作业/进程都是公平的,算法实现简单。缺点的话就是排在长作业,或者长进程后面的短作业/进程来说,需要等待很长的时间,带权周转时间很大,对短作业来说用户体不好。 就比如说,我们都在排队买奶茶,我自己只需要买一杯,可是我前面那个大兄弟,他要买20杯,假设做一杯奶茶需要1分钟,那我至少需要等20分钟,才轮到我,而我自己本身就只买一杯奶茶,也就等1分钟就走了。但是现在由于先来先服务算法,所以我需要等20分钟以上。

是否会导致饥饿:不会,因为都是按顺序执行,好好排队,总会轮到你的。

短作业优先(SJF)

算法思想:这个算法追求最少的平均等待时间、最少的平均周转时间,最少的平均带权周转时间。

算法规则:最短的作业/进程优先得到服务,这里说的最短,指的是要求服务时间最短。

用于作业/进度调度:可用于作业调度,也可以用于进程调度,用于进程调度时,称之为”短进程优先“。

是否可抢占:有非抢占式的版本,也有抢占式的版本

优缺点:优点是 “最短的” 平均等待时间、平均周转时间,对于短作业/进程来说,可得到优先执行的机会。缺点就是不公平,对短作业有利,对长作业不利。可能会产生饥饿现象。

是否会导致饥饿:会,如果有源源不断的短作业/进程到来,可能会使得长作业/进程很长时间得不到服务,产生饥饿现象,如果一直得不到服务,则称之为饿死

高响应比优先(HRRN)

算法思想:针对上面两种算法来说,都有各自的优点和缺点,为了综合上面两种算法,所以要综合考虑作业/进程的等待时间和要求服务的时间。

算法规则:在每次调度时,先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务。

image.png

用于作业/进度调度:可用于作业调度,也可以用于进程调度。

是否可抢占:非抢占式算法,因此只有当前运行的作业/进程主动放弃 CPU 时,才需要调度,计算响应比,从而选择响应比最高的作业/进程来执行。

优缺点:综合考虑了等待时间和运行时间,等待时间相同时,运行时间短的优先执行,运行时间相同时,等待时间长的优先执行,对于长作业来说,随着等待时间越来越久,其响应比也会越来越大,从而避免了长作业饥饿的问题。

是否会导致饥饿:不会。

上三种算法对比

在这里插入图片描述

时间片轮转

算法思想:公平地、轮流的为各个进程服务,让每个进程在一定时间间隔内都可以获得响应。

算法规则:按照各个进程到达就绪队列的顺序,轮流让各个进程执行一个时间片。。若进程未在一个时间片内执行完,则剥夺 CPU 资源,讲进程重新放到就绪队列队尾重新排队。

用于作业/进度调度:用于进程调度,只有作业放入到内存建立相对应的进程之后,才能被分配 CPU 时间片。

是否可抢占:若进程未能在时间片内运行完,将被强行剥夺 CPU 使用权,因此时间片轮转调度算法属于抢占式的算法。由时钟装置发出时钟中断来通知 CPU 时间片已到。

优缺点:优点是公平、响应快,适用于分时操作系统,缺点是由于高频率的进程切换,因此有一定的开销,而且不区分任务的紧急程度。

是否会导致饥饿:不会。

优先级调度

算法思想:随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务的紧急程度来决定处理顺序。

算法规则:调度时选择优先级最高的作业/进程。

用于作业/进度调度:可用于作业调度,也可以用于进度调度。

是否可抢占:抢占式、非抢占式都有,非抢占式只需要在进程主动放弃 CPU 执行权的时候进行调度,而抢占式当就绪队列变化时,检查是否发生抢占。

优缺点:优点就是用优先级区分紧急程度、重要程度、适用于实时操作系统。可灵活地调整对各种作业/进程偏好程度。缺点就是如果有不断的高优先级进程/作业进来,则会导致饥饿现象。

是否会导致饥饿:会。

多级反馈队列

算法思想:对其他调度算法的这种权衡。

算法规则:

1、设置多级就绪队列,各级队列优先级从高到低,时间片从小到大。

2、新进程达到时,先进入1级队列,按照先来先服务的规则排队等待被分配时间片,若时间片用完还未结束,则进程进入下一级队列队尾。 如果此时已经是在最下级的队列,则重新放回该队列的队尾。

3、只有1级队列为空时,才会为2级队列对头的进程重新分配时间片,以此类推。

用于作业/进度调度:用于进程调度。

是否可抢占:抢占式算法,假设在第2级队列的进程在运行过程中,突然1级队列进入了一个新的进程,则由于新进程处于优先级更高的队列中,因此新进程会占用 CPU 执行权,原来运行的进程会放回之前队列的队尾。

优缺点:对各类型进程相对公平,每个新到达的进程都可以很快就得到响应,段进程只用较少的时间就可以完成,不必实现估计进程的运行时间,可灵活地调整对各类进程的偏好程度,比如 CPU 密集型进程、I/O 密集型进程。

是否会导致饥饿:会。

上三种算法对比

在这里插入图片描述

多级队列调度

在这里插入图片描述

队列之间采取固定优先级,或者时间片划分。

固定优先级:高优先级空时,低优先级进程才能被调度。
时间片划分:如三个队列分配时间为第一个队列占时间片 50%、第一个队列占时间片 40%、第三个队列占时间片 10%。

各个队列可采用不同的调度策略,比如系统进程采用优先级调度,交互式进程才有时间片轮转,批处理进程采用先来先服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT贱男

喜欢就,喜欢就,就来打赏一点哟

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

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

打赏作者

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

抵扣说明:

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

余额充值