操作系统总结(五)CPU调度

cpu在空闲时,操作系统需要按照一定的策略从就绪队列选择进程来执行,以提高CPU的利用率,系统运算的吞吐量,缩短进程的周转时间和等待时间等。

两种调度任务为交互式和批处理。两种调度时机包括非抢占式调度和抢占式调度,前者发生在因等待资源或其他而让出CPU资源或进程结束而主动让出CPU资源。后者包括当前进程时间片到了或有更高优先级的进程出现而导致操作系统强行暂停当前进程由调度程序将CPU资源分配给其他就绪的进程。

操作系统调度该如何选取下一个进程

  • 调度准则
    1. 合理分配CPU资源
    2. 响应时间短(交互式),周转时间短(批处理)
      响应时间:从用户输入到产生反应的时间
      周转时间:从任务开始到任务结束的时间
      周转时间\响应时间短:任务等待时间短
    3. 吞吐量大
      吞吐量:单位时间内完成的任务数量
      吞吐量大:CPU使用率高,上下文切换代价小
      然而上述准则存在矛盾:1. 任务时间短的任务说明优先级高,则后台任务得不到CPU资源;2.吞吐量的说明上下文切换代价小,那么任务的时间片变大,从而导致了响应时间变长
  • 调度算法
    1. FCFS(先到先服务调度,FIFO)
      调度的顺序就是任务到达的顺序,公平、简单、无抢占、不适合交互式,并且没有考虑任务特性,平均等待时间可以缩短。
    2. SJF(最短作业优先调度)
      最短的作业(但用CPU时间最短的任务)先执行,可以保证最短的平均等待时间
      当任务存在先后顺序,SRJF(SJF的可抢占版本)此时使用该可抢占的方式在平均等待时间上占有优势。
      SJF算法的真正困难是如何知道下一个CPU区间的长度。对于批处理系统的长期(作业)调度,可以将用户提交作业时间所制定的进程时间极限作为长度。SJF调度经常用于长期调度。
      如何知道下一个CPU区间的大小:可以通过最近信息和历史信息对下一个CPU时间进行预测,如
      tn+1 = atn + (1- a)atn+…+(1-a)jatn-j+…+(1-a)n+1t0此式中a用来控制当前信息和历史信息对预测结果的作用,a=1则只跟当前有关,a=0则只关注历史。通常a取0.5
      每个任务的关联一个优先级,优先级为任务CPU时间的倒数
      * 缺点*任务优先级太低可能永远得不到执行(饥饿,可以使用优先级动态调整,如任务优先级随着等待时间增大)
    3. 优先级调度
      SJF可以看作是优先级调度的一个例子,每个进程都有一个优先级与其关联,具有最高优先级的进程会分配到CPU。具有相同优先级的进程按FCFS顺序调度。优先级调度算法的一个重要问题是阻塞或饥饿。可以运行但缺乏CPU的进程可认为是阻塞的,它在等待CPU。优先级调度算法会使某个有低优先级无穷等待CPU。
    4. RR(轮转法调度)
      按照时间片来轮转调度任务;优点(定时有响应,等待时间较短);缺点(上下文切换次数较多);
      RR中时间片长度的设定:时间片太大太小都不合适,太大响应时间过长,太小导致吞吐量变小,等待时间过长(上下文切换代价过高)
    5. 多级队列调度
      混合了多种调度算法:按照一定规则创建多个进程队列,不同的队列具有不同的优先级而且高优先级的具有抢占权,不同的队列中的任务可以有不同的时间片并且采用不同的调度算法。
      缺点:没法区分IO约束和CPU约束,同时也存在一定的饥饿现象
    6. 多级反馈队列调度
      任务可以在多个队列中移动,更加细致地区分任务,n可以根据“享用”CPU时间多少来移动队列,阻止“饥饿”,可近似SJF,可使I/Obound停留在高优先级。
  • 以linux调度算法为例
    采用优先权的、基于信用度的、可抢占的RR调度
    1. 每一个进程有一个信用度counter
    2. 调度时选择counter最大地进程执行,每次定时器中断,运行进程的counter减1,当信用度为0时进程暂停并且被抢占
    3. 如果就绪态的进程的信用度都变为0,则对所有进程的信用度进行重新计算
      counter = counter/2 + priority(priority继承自父进程)
      调度时机:由用户产生的(用户使用系统调用返回),由内核导致的调度(时钟中断、资源上锁)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值