揭秘操作系统:任务调度算法的奥秘

先来先服务调度算法(FCFS):

  1. 概述:
    1. 先来先服务调度算法(First-Come,First-Served,FCFS) 是一种基本的进程调度算法,其核心思想是按照作业到达时间的先后顺序进行调度
  2. 流程:
    1. 当一个作业到达时,将其放入就绪队列的末尾
    2. 当前执行的作业执行完毕后,从就绪队列中选择队首的作业进行运行
    3. 重复步骤 2,直到所有作业都执行完毕
  3. 优点:
    1. 实现简单,公平性好
    2. 由于按照作业到达的先后顺序进行调度,所以所有作业都可以得到执行,不存在作业 "饥饿" 问题
  4. 缺点:
    1. 如果有一个长作业在队首,那么后面的作业就必须等待很长时间才能得到执行,导致平均等待时间较长
    2. FCFS 调度算法无法适应作业的不同执行时间,执行时间较长的作业会导致整个系统的响应时间变长
  5. 总结:
    1. FCFS 调度算法时一种简单实现的调度算法,公平性较好
    2. 但在实际应用中需要注意长作业的等待时间较长的问题
  6. 示例:
    1. 有三个作业按照下表的时间提交给系统
      作业号提交时刻作业长度
      110:002小时
      210:061小时
      310:150.25小时
    2. 按照下先来服务的原则,可以计算出各个作业在系统中的开始执行时刻、结束时刻、周转时间。
      1. 周转时间 = 作业结束时间 - 作业提交时间
      2. 带权周转时间 = 周转时间 / 作业长度
        作业号提交时刻作业长度开始时刻结束时刻周转时间带权周转时间
        110:002小时10:0012:0021
        210:061小时12:0013:002.92.9
        310:150.25小时13:0013:15312
    3. 单个作业的平均周转时间和带权周转时间为:
      1. T =(2.00+2.90+3.00)/ 3 = 2.63(小时)

      2. W =(1+2.9+12)/ 3 = 5.30(小时)

短作业优先调度算法(SJF):

  1. 概述:
    1. 短作业有限调度算法核心思想是优先执行时间较短的作业
    2. 短作业指的是估计执行时间短的作业,也可以理解为剩余执行时间短的作业
  2. 流程:
    1. 按照作业的执行时间对待执行的作业队列进行排序,即将估计执行时间较短的作业排在前面
    2. 选择执行时间最短的作业来运行,直到该作业执行完毕或者被阻塞
    3. 当作业执行完毕或者被阻塞时,从待执行作业队列中选择下一个执行时间最短的作业来运行
    4. 重复步骤 2、3,直到所有作业执行完毕
  3. 优点:
    1. 可以最大程度地减少平均等待时间,使得作业能够快速执行完毕
  4. 缺点:
    1. 该算法可能会导致长作业等待时间过长,造成作业 "饥饿"  的情况
  5. 示例:
    1. 根据上面的例子利用短作业优先算法计算平均周转时间和平均带权周转时间
      作业号提交时刻作业长度调度次序开始时刻结束时刻周转时间带权周转时间
      110:002小时110:0012:0021
      210:061小时312:1513:153.13.1
      310:150.25小时212:0012:1528
    2. 平均周转时间 T 和平均带权周转时间 W 为:
      1.  T =(2.00+3.10+2.00)/ 3 = 2.37(小时)
      2. W =(1+2.9+12)/ 3 = 4.03(小时)

高响应比优先调度算法(HRRN):

  1. 概述:
    1. 高响应比优先调度算法(High Response Ratio Next,简称 HRRN) 是一种动态优先级的进程调度算法,其核心思想是根据作业的相应比来确定执行顺
  2. 流程:
    1. 当一个作业到达时,计算其响应比。响应比定义为作业等待时间加上作业执行时间除以作业执行时间,即 (等待时间 + 作业长度) / 作业长度
    2. 将计算得到的响应比最高的作业放入就绪队列
    3. 当前执行的作业执行完毕后,从就绪队列中选择响应比最高的作业进行运行
    4. 重复步骤 2、3,直至所有作业执行完毕
  3. 优点:
    1. 能够根据作业的等待时间和执行时间动态调整优先级,使得等待时间较长的作业能够优先得到执行,提高系统的响应速度
  4. 缺点:
    1. 计算响应比需要动态获取作业的等待时间和执行时间,增加了系统的开销
    2. 如果作业的执行时间很短,那么相应比就会很高,导致其他作业长时间等待,可能会出现 "长作业优先" 问题
  5. 示例:
    1. 按响应比高者优先算法调度算法,计算出它们的平均周转时间和平均带权周转时间
      作业号提交时刻运行长度
      18:002小时
      28:300.5小时
      39:000.1小时
      49:300.2小时
    2. 当作业 1,做完后,其它三个作业的响应比为:
      1. R2p = 1 + 已等待时间/作业长度 = 1 + 1.5/0.5 = 4

      2. R3p = 1 + 1.0/0.1 = 11

      3. R4p = 1 + 0.5/0.2 = 3.5

    3. 故作业 3 的响应比最大,作业 1 完成后要运行作业 3

    4. 作业 3 完成后,时间为 10:16,这时候再看作业 2 和 4 的响应比哪个高:

      1. R2p = 1 + 已等待时间/作业长度 =1 + 1.6/0.5 = 4.2

      2. R4p = 1 + 0.6/0.2 = 4

    5. 所以先调度作业 2 到内存中,作业 2 运行完毕,结束时间为 10:36,最后调入作业 4 到内存运行即可。

    6. 作业调度的次数为:作业 1、作业 3、作业 2、作业4

      作业号提交时刻运行长度调度次序开始时刻结束时刻周转时间带权周转时间
      18:002小时18:0010:0021
      28:300.5小时310:0610:362.14.2
      39:000.1小时210:0010:061.111
      49:300.2小时410:3610:481.36.5
    7. 4 个作业的平均周转时间和平均带权周转时间为:

      1. T =(2+2.1+1.1+1.3)/ 4 = 1.625(小时)

      2. W =(1+4.2+11+6.5)/ 4 = 5.675(小时)

时间片轮转调度算法(RR):

  1. 概述:
    1. 时间片轮转调度算法(Round Robin Scheduling) 是一种基于时间片的进程调度算法,指在公平地分配 CPU 时间给各个就绪程序
  2. 流程:
    1. 将所有就绪程序按照到达时间地顺序放入就绪队列
    2. 设定一个固定的时间片大小,通常为几十毫秒
    3. 从就绪队列中选择一个进程,分配给它们一个时间片的 CPU 时间
    4. 若该进程在时间片结束前完成任务,则该进程被移出队列,否则将其放到队列的末尾等待下一次调度
    5. 重复步骤 3、4,直至所有作业执行完毕
  3. 优点:
    1. 能够公平地分配 CPU 时间给每个就绪地进程,避免某个进程独占 CPU 资源,从而提高系统的可响应性和吞吐量
  4. 缺点:
    1. 如果时间片太短,频繁进行上下文切换会带来较大的开销
    2. 如果某些进程的执行时间较长,会导致其他进程长时间等待,可能会出现 "长作业效应" 问题
  5. 总结:
    1. 时间片轮转调度算法是一种能够公平分配 CPU 时间的调度算法,适用于多道程序环境。
    2. 但需要注意时间片大小的设置以及长作业效应问题
  6. 示例:
    1. 5 个进程几乎同时到达,预期运行时间分别为 10、6、2、4、8个时间单位。按照时间片轮转调度算法计算任务的平均周转时间(假设时间片大小为 2 个时间单位)。
      进程号P1P2P3P4P5备注
      剩余运行时间106248
      第一趟246810P3运行完
      剩余运行时间84026
      第二趟12141618P4运行完
      剩余运行时间62004
      第三趟2022024P2运行完
      剩余运行时间40002
      第四趟2628P5运行完
      剩余运行时间20000
      第四趟30P1运行完
    2. 时间片调度顺序为:
      平均值
      周转时间101618223019.2
      带权周转时间12.6795.53.754.384
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值