操作系统-8——多处理器调度和实时调度

(写在文章前:本文只考虑紧耦合多处理器的调度问题:即共享同一内存,且由OS完全控制的多个处理器。)

一、基本的设计问题

  • 把进程分配到处理器:
    • 静态分配:一个进程始终在同一CPU上运行。
    • 动态分配:所有CPU共用一个就绪队列,于是进程可在不同时间运行于不同处理器上。有利于各CPU的负载均衡。
  • 在单个处理器上是否使用多道程序设计:
    • 一个进程的多个线程应该同时在多个CPU上并行运行,而不是在单个CPU上多道运行,这是该进程运行情况好,且各CPU的负载均衡,性能最佳。
  • 进程分派(调度):选择哪个进程/线程运行。
    • 简单的调度算法(如FCFS或静态优先级)更有效,系统开销较低。

二、进程调度

对于多处理器,调度算法的选择不如在单处理器中重要。因此,多处理器系统中,采用简单的FCFS或“静态优先级+FCFS”算法就足够了。

这里写图片描述

三、实时调度

  • 实时任务的处理要求紧急,具有最高优先权。
  • 通常需要预先规定其开始或完成的最后截止期限。
  • 实时任务分类:
    • 硬实时任务:必须在最后期限内开始或完成。否则会给系统带来不可接受的破坏或知名的错误。
    • 软实时任务:时间限制较弱。
    • 非周期性实时任务:不定期发生。
    • 周期性实时任务:每个T个时间单位发生一次。
  • 调度方式

    • 轮转抢占式调度:获得秒级的响应时间。
      实时任务将加入就绪队列,等待他的下一个时间片。
      这里写图片描述
    • 优先级驱动非抢占式调度:秒~数十毫秒级响应。
    • 给实时任务更高的优先级,在这种情况下,只要当前运行进程阻塞或运行结束,就可以调度这个就绪的实时任务。
      这里写图片描述
    • 基于优先级的固定点抢占调度:毫秒级响应。
      把优先级和基于时钟的中断结合起来,可抢占点按规则的时间间隔出现。出现一个可抢占点时,若有更高级的任务等待,则当前执行的任务被抢占
      这里写图片描述
    • 基于优先级的立即抢占调度:微秒级响应。
      只要有实时任务,操作系统几乎立即响应一个中断,除非处于临界代码保护区中。实时任务的调度延迟可降低到100μs左右。
      这里写图片描述
  • 调度方法分类

    • 静态表调度:适合于周期性任务,根据任务的到达时间、处理时间。结束期限和优先级等,确定各任务调度顺序表和开始时刻。
    • 静态优先级抢占调度:给任务指定静态优先级。
    • 动态规划调度:一个新任务到达时,当能够满足它以及已有任务的时间约束(最有期限)时,才结婚搜这个新任务,并编入调度顺序。
    • 动态尽力调度:目前商用系统中常用。新任务到达就接受并制定优先级。尽力满足所有任务的时间约束,并终止那些已开始但将超过最后期限的进程。
  • 限期调度

    • 最早最后期限调度算法:调度完成期限最近的任务。

这里写图片描述

  • 有资源空闲时间的最早启动期限调度:如果事先知道个任务的启动最后期限,则调度启动期限最早的合格任务(甚至此任务额能尚未到达)
    这里写图片描述

  • 速度单调调度
    为每个任务分配一个语气发生频率(赫兹)成正比的优先级。频率月底(周期越长)的任务优先级越低。抢占式调度优先级高者。
    例如:周期为20ms的进程优先级为50(优先级高),周期为10ms的进程优先级为10(优先级低)。

!#对于周期性任务,任何调度算法都有下式成立:
- 有n个周期性任务,任务i的周期为Ti,处理时间为Ci,C1/T1+C2/T2+…+Cn/Tn ≤1时,才可能处理所有负载。满足该条件的实时系统称作任务可调度的。

猜你喜欢

转载自blog.csdn.net/weixin_39793360/article/details/80731737