多处理机调度
与单处理调度相比,需要面临哪些新问题
单:
只需要决定让哪个就绪进程先上处理机即可
多:
用调度算法决定让哪个就绪优先上处理机,还需要决定被调度的进程上哪个处理机
负载均衡
尽可能让每个cpu都同等忙碌
处理机亲和性
尽量让一个进程调度到同一个CPU上运行,以发挥CPU中缓存的作用(cache)
公共就绪队列
所有cpu共享同一个就绪进程队列(在内核区)
每个cpu运行调度程序,从公共就绪队列中选择一个进程运行
每个cpu访问公共就绪队列时需要上锁(确保互斥)
优点:可以天然实现负载均衡
缺点:各进程频繁更换cpu运行,亲和性不好
提升亲和性的方法:
软亲和:由进程调度程序,尽量保证亲和性
硬亲和:由用户进程通过系统调用,主动要求操作系统分配固定cpu,确保亲和性
私有就绪队列
每个cpu都有一个私有就绪队列
cpu空闲时,运行调度程序,从私有就绪队列中选择一个进程运行
推迁移策略
一个特定的系统程序周期性检查每个处理器的负载,如果负载不平衡,就从忙碌cpu的就绪队列中,推一些就绪进程到空闲的cpu就绪队列
拉迁移策略
每个cpu运行调度程序时,周期性检查自身负载与其它cpu负载,如果一个cpu负载很低,就从其它高负载cpu的就绪队列中拉一些就绪进程到自己的就绪队列
也就是一群互帮互助的同事,看到其他同事很忙,主动揽活过来分担任务
提升亲和性的方法
私有就绪队列天然的实现了“处理机亲和性”