几种调度算法(大白话)

调度算法

思考每种调度算法,它的算法思想,它是想解决什么问题,它的算法规则

这种调度算法作用于作业调度(高级调度)还是进程调度(低级调度),注意这里没有涉及内存调度(中级调度)

它是抢占式的还是非抢占式的,抢占的意思是每每就绪队列新进程到达的时候,要去check是否要发生调度,非抢占就是这种情况不需要check,但是当前运行的进程还是会根据时间片用完,或者自己运行时间用完主动撤出

这种调度算法有什么优点缺点

是否会导致其他进程永远不会得到处理机资源,即是否导致饥饿?

一、先来先服务FCFS

  1. 算法思想
    公平角度
  2. 算法规则
    按照作业或者进程先后顺序分配处理机资源
  3. 作用点
    作业调度
    考虑是哪个作业先到后备队列
    进程调度
    考虑是哪个进程先到就绪队列
  4. 是否可抢占
    非抢占式算法
  5. 优缺点
    优点
    公平、算法实现简单
    缺点
    排在长作业或者长进程后面的短作业需要等很久
    对长作业有利,对短作业不利,比如排队买奶茶,我只需要买一杯,一分钟可以做完,前面的人点了二十杯,我要等好久
  6. 是否会导致饥饿
    不会

二、短作业优先SJF

  1. 算法思想
    追求最少的平均等待时间,最少的平均周转时间,最少的平均带权周转时间
  2. 算法规则
    优先分配处理机资源给短作业
  3. 作用点
    作业调度
    叫短作业优先SJF
    进程调度
    叫短进程优先SPF
  4. 是否可抢占
    SJF和SPF都是非抢占式算法
    最短剩余时间优先算法是抢占式算法
  5. 优缺点
    优点
    平均等待时间小,平均周转时间小
    对短作业有利
    缺点
    不公平,对长作业不利
    可能会出现饥饿现象
    作业或者进程运行多长是用户提供的,不一定能真正做到短作业优先
  6. 是否会导致饥饿
    会,如果一直有短作业到来,长作业就会得不到处理机资源

三、高响应比优先HRRN

  1. 算法思想
    先来先服务算法考虑的是最长等待时间
    短作业优先考虑的是最短运行时间
    高响应比优先考虑的是等待时间和运行时间
  2. 算法规则
    在每次调度的时候先计算各个作业或者进程的响应比,选择响应比最高的分配处理机资源
    响应比=(等待时间+要求服务时间)/要求服务时间
  3. 作用点
    作业调度
    进程调度
  4. 是否可抢占
    非抢占式算法,只有当当前运行的作业主动放弃处理机时,才需要调度,才需要计算响应比
  5. 优缺点
    优点
    综合考虑了等待时间和运行时间
    等待时间相同时,运行时间短的优先
    运行时间相同,等待时间长的优先
    对于长作业来说,如果等待时间变大,响应比也会变大,从而避免长作业饥饿问题
    缺点
  6. 是否会导致饥饿
    不会

四、时间片轮转(Round-Robin)

  1. 算法思想

    公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应

  2. 算法规则

    • 按照各进程到达就绪队列的顺序,轮流让每个进程执行一个时间片。如果进程在一个时间片没有执行完,操作系统会剥夺处理机,将进程重新放到就绪队列队尾
  3. 用于作业/进程调度

    只用于进程调度(只有作业放入内存建立相应的进程后,才能分配处理机时间片)

  4. 是否可抢占
    抢占式算法,若进程未在时间片内执行完,由硬件(时钟装置)发出时钟中断来通知CPU时间片已经到了

  5. 优缺点
    优点

    • 公平、响应快,适用分时操作系统(初代支持人机交互操作系统,可以支持多个用户通过终端同时使用一台计算机)
      缺点
    • 由于高频率的进程切换,因此有一定开销,且没有区分任务的紧急程度
  6. 是否会导致饥饿
    不会

补充

设置好时间片大小,比如2

如果需要运行的小于时间片大小,主动放弃处理机,也会发生调度

时间片足够大于每个进程的运行时间时,跟先来先服务算法一样

也不能太小,进程调度、切换是有时间代价的(保存、恢复运行环境)

五、优先级调度算法

  1. 算法思想

    实时操作系统的出现

  2. 算法规则

    调度时选择优先级最高的作业或者进程

  3. 用于作业/进程调度

    既可以用于作业调度,也可以用于进程调度,甚至可以用于I/O调度

  4. 是否可抢占
    抢占式和非抢占式都有。
    非抢占式意味着进程主动放弃处理机,才会发生调度
    抢占式意味着除了进程主动放弃处理机情形外,每次就绪队列发生变化都要检查是否发生抢占,若就绪队列出现优先级比运行中的更高,则也会发生调度

  5. 优缺点
    优点

    • 可以灵活地调整各种进程被服务的机会
    • 用优先级区分紧急程度、重要程度,适用于实时操作系统

    缺点

    • 若源源不断有高优先级进程到来,则可能导致饥饿
  6. 是否会导致饥饿

补充:
就绪队列未必只有1个,可以按照不同优先级来组织。另外可以把优先级高的进程排在队头

根据优先级是否可以动态改变

  • 静态优先级。创建进程时就确定好了,之后一直不会改变
  • 动态优先级。创建进程会给默认值,后面根据情况动态调整优先级

思考一,如何合理确定进程的优先级?

  • 思想就是将进程分类
  • 系统进程优先级>用户进程优先级
  • 前台进程优先级>后台进程优先级
  • 操作系统更偏爱I/O型进程,也就是最高优先级

思考二,如果采用动态优先级,什么时候调整?

  • 从公平、提升资源利用率角度考虑
  • 如果某进程在就绪队列等待了很长时间,适当提升它的优先级(有点像高响应比算法)
  • 如果某进程在处理机运行了很长时间,则降低它的优先级
  • 如果某进程在进行频繁I/O操作,则适当提升它的优先级

六、多级反馈队列调度算法

  1. 算法思想

    对前面调度算法的折中权衡

  2. 算法规则

    • 设置多级就绪队列,按优先级从高到低,并且优先级越高的就绪队列设置时间片越小
    • 新进程进入就绪队列时,先进入第1级队列,按照先来先服务调度算法,等待分配时间片。
    • 当前运行进程用完时间片还有运行时间,则该进程下放到下1级队列的队尾,如果是最下级队列,则直接放回队尾
    • 只有当高级的队列为空的时候,低级的队列才会分配时间片,如果某刻高级队列为空,低级队列分配处理机后,新进程进入第1级队列,则会发生抢占。
  3. 用于作业/进程调度

    只用于进程调度

  4. 是否可抢占
    抢占式算法,在k级队列的进程在运行中,若小于k,也就是更上级的队列进入新进程,则会发生抢占,当前运行的进程会放回当前队列的队尾

  5. 优缺点
    优点

    • 对各类型的进程相对公平(先来先服务算法特点);
    • 每个新到达的进程都很快得到响应(时间片轮转算法特点);
    • 短进程(多级反馈队列调度只有进程调度)用较少时间就可以完成(SPF的特点);
    • 不必实现估计进程的运行时间,这样一来可以避免用户作假
    • 可以灵活调整对各类进程的偏好程度,比如CPU密集型进程、I/O密集型进程(优先级调度算法特点)
    • 较好适用实时操作系统
  6. 是否会导致饥饿
    会哦

前面三种比较适用早期的批处理操作系统,后面三种适合现在的实时操作系统

作业和进程的关系可以在这里查看
进程、线程、程序、任务和作业的联系

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值