CPU调度基本策略

CPU调度基本策略


CPU调度基本策略:

  • 中断/异常:进程切换的方法
  • 调度:进程切换的决策

两大优化目标:

  • 目标1:更小的turnaround time(周转时间),任务从到达到整体完成的延迟

  • 目标2:Response time(任务第一次调度与到达时间之差)
    T r e s p o n s e = T f i r s t r u n − T a r r i v a l T_{\mathrm{response}}=T_{\mathrm{firstrun}}-T_{\mathrm{arrival}} Tresponse=TfirstrunTarrival


FIFO(First In,First Out)

在这里插入图片描述

  • 平均 T t u r n a r o u n d = 10 + 20 + 30 3 = 20 T_{turnaround} = \frac{10+20+30}{3}=20 Tturnaround=310+20+30=20

  • 优点:简单

  • 缺点:当任务长度差距较大时,耗时长
    在这里插入图片描述


SJF(Shortest Job First)

在这里插入图片描述

  • 有助于减小平均turnaround time , 如上述例题中,平均
    T t u r n a r r o u n d = 10 + 20 + 120 3 = 50 T_{turnarround}=\frac{10+20+120}{3}=50 Tturnarround=310+20+120=50

  • 优点:对于任务同时到达, SJF是最优调度算法

  • 缺点:如果长任务先到达,则SJF没有办法优化
    T t u r n a r r o u n d = 100 + 100 + 110 3 = 103.3 T_{turnarround}=\frac{100+100+110}{3}=103.3 Tturnarround=3100+100+110=103.3
    在这里插入图片描述

  • 改进方法:

    • 不要把一个任务执行到底才切换
    • 允许任务抢占(时间片/中断作为切换点)

STCF(Shortest Time-to-Completion First)

在这里插入图片描述

  • 在SJF上增加抢占功能,剩余时间最短的任务优先

  • Preemptive Shortest Job First (PSJF)

  • 平均
    T t u r n a r r o u n d = 120 + 10 + 20 3 = 50 T_{turnarround}=\frac{120+10+20}{3}=50 Tturnarround=3120+10+20=50

关于平均Turnarround Time的问题:

  • 平均Turnaround Time反映整体性能
    • 但有些Job被平均(自己牺牲,换来整体平均更好,例如长任务)
  • 不能做到公平(Fairness)
    • 用户感受可能不好
    • 极端情况出现**“饥饿问题”**(job不断到达,某些Job一直不被调度)
  • 如果所有job属于一个用户,还可以接受
    • 如果jobs属于不同用户(尤其是付费用户),则无法接受牺牲
    • 云计算下的公平性问题
    • 效率和公平往往不能兼得

现在问题是,之前的调度算法(如SJF)会导致response time很差:

在这里插入图片描述


Round Robin

在这里插入图片描述

  • 基于时间片,轮流执行任务
  • response time小
  • 增加context switch的开销
    1. 增大时间片能减小开销的比例,但也会增大response time
    2. 所以需要在二者之间tradeoff
      • 偏重公平(response time):RR(效率相对较低)
      • 不看重公平(turnaround time):SJF, STCF

考虑I/O

  • I/O操作远比CPU周期要慢

  • 进程执行I/O操作时,要block住,直到I/O完成

  • STCF的问题:

    • A和B都是50ms的任务

    • 每次interrupt,A剩余的时间小于B,那么会优先调度A,浪费CPU时间

在这里插入图片描述

解决方案:

  • 把A看做5个10ms的子任务

  • 每次A开始I/O时,调度器只剩B一个选项,调度B

  • 当I/O完成时(interrupt),A的剩余时间段,调度A

  • 或者增加调度条件,有I/O阻塞不能调度

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值