多处理机调度

#多处理机调度特性

  • 1.考虑优先让就绪队列里的哪个进程优先运行
  • 2.还需要考虑上哪个处理机上运行
  • 多处理调度中,应该追求的目标:
  • *负载均衡性--尽量让每个cpu都等同忙碌*
  • *处理机亲和性--尽量让一个进程调度到同一个cpu上运行,发挥cpu中缓存的作用(cache)*
  • #方案一:公共就绪队列


  • 所有cpu共享同一个就绪进程队列 (位于内核区)
  • 每个cpu运行调度程序时,从公共就绪队列中选择一个进程运行
  • 每个cpu访问公共就绪队列时需要上锁(确保互斥)
  • *PS:不上锁的话多个cpu调度进程时可能会导致争抢*
  • *优点*:可以天然地实现负载均衡
  • *缺点*:各个进程频繁切换cpu运行,亲和性不好
  • 如何提升处理机亲和性?
  • *软亲和*:由进程调度程序尽量保证“亲和性”
  • *硬亲和*:由用户进程通过系统调用,主动要求操作系统分配固定的cpu,确保“亲和性”
  • Pasted image 20260629144104.png

    #方案二:私有就绪队列


  • 每个cpu都有一个私有就绪队列
  • cpu空闲时运行调度程序,从私有就绪队列中选择一个进程运行
  • 如何实现负载均衡?
  • *推迁移(push)策略*:
  • 一个特定的系统程序周期性检查每个处理器的负载,如果负载不平衡,就从忙碌cpu的就绪队列中"推"一些就绪进程到空闲cpu的就绪队列。
  • Pasted image 20260629144500.png
  • 系统程序在cpu3中,将cpu4里的一个进程转移到cpu1的就绪队列里
  • *拉迁移(pull)策略*:
  • 每个cpu运行调度程序时,周期性检查自身负载与其他cpu负载,如果一个cpu负载很低,就从其他高负载cpu的就绪队列中“拉”一些就绪进程到自己队列
  • Pasted image 20260629144845.png
  • 如何实现处理机亲和性?
  • **私有就绪队列天然实现了“处理机亲和性。”
  • 也可以类似公共就绪队列里的硬亲和一样操作。