多处理机调度
#多处理机调度特性
1.考虑优先让就绪队列里的哪个进程优先运行
2.还需要考虑上哪个处理机上运行
多处理调度中,应该追求的目标:
*负载均衡性--尽量让每个cpu都等同忙碌*
*处理机亲和性--尽量让一个进程调度到同一个cpu上运行,发挥cpu中缓存的作用(cache)*
#方案一:公共就绪队列
所有cpu共享同一个就绪进程队列 (位于内核区)
每个cpu运行调度程序时,从公共就绪队列中选择一个进程运行
每个cpu访问公共就绪队列时需要上锁(确保互斥)
*PS:不上锁的话多个cpu调度进程时可能会导致争抢*
*优点*:可以天然地实现负载均衡
*缺点*:各个进程频繁切换cpu运行,亲和性不好
如何提升处理机亲和性?
*软亲和*:由进程调度程序尽量保证“亲和性”
*硬亲和*:由用户进程通过系统调用,主动要求操作系统分配固定的cpu,确保“亲和性”

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