操作系统笔记-2.2.6 多处理机调度

王道操作系统笔记,视频链接:2.2.6 多处理机调度

知识总览

  1. 多处理机调度:
    • 与单处理机调度相比,需要面临哪些新问题?
    • 方案一:公共就绪队列
    • 方案二:私有就绪队列

多处理机遇到问题

  1. 单处理机调度:只需决定让哪个就绪进程优先上处理机即可。
    • 调度算法:先来先服务、最短作业优先、时间片轮转、优先级等
  2. 多处理机调度:
    • ①用调度算法决定让哪个就绪进程优先上处理机;
    • ②还需决定被调度的进程到底上哪个处理机。

负载均衡、处理亲和性

  1. 多处理机调度中,应追求的目标:
    • 负载均衡------尽可能让每个CPU都同等忙碌。
      • 比如四个CPU分别负载50%、80%、80%、90%,此时CPU1太过"空闲",CPU4太过"忙碌",这就不太符合负载均衡。
    • 处理机亲和性------尽量让一个进程调度到同一个CPU上运行,以发挥CPU中缓存(Cache)的作用
      • 比如CPU4上存在P4、P8、P12、P16的缓存,那么后续需要运行这些程序时,直接在CPU4上运行就可以利用这些缓存,如果把P4上没有P4缓存的CPU1运行,那么就会有更多的访问主存的动作,效率自然更低。
      • PS:(来自deepseek)缓存数据的有效停留时间,本质上是该进程与其他进程竞争缓存空间的激烈程度------核心越忙、进程占用缓存越多、缓存本身越小,数据被覆盖得就越快。

公共就绪队列

  1. 定义:将系统内所有进程放在统一的就绪队列中。
  2. 特点:
    • 所有CPU共享一个就绪队列进程(位于内核区)
    • 每个CPU运行调度程序(与单处理机一样,比如FCFS、SJF、RR等,控制优先级),从公共就绪队列中选择一个进程运行
      • 比如:CPU1空闲了,启动调度程序,选择了P1上处理机运行,其它CPU同理,它们都是并行运行。
      • 为了确保各CPU间对就绪队列的访问互斥(防止多个CPU同时调用同一个进程),在对就绪队列的访问期间,需要对就绪队列上锁
  3. 优缺点:
    • 优点:可以天然地实现负载均衡
    • 缺点:各进程频繁地切换CPU运行,"亲和性"不好
  4. 如何提升处理机亲和性?
    • 软亲和:由进程调度程序尽量保证"亲和性"
      • 也就是让调度程序尽可能调度存在缓存的进程
    • 硬亲和:由用户进程通过系统调用,主动要求操作系统分配固定的CPU,确保"亲和性"

私有就绪队列

  1. 定义:顾名思义,操作系统会为每个CPU配一个就绪队列
  2. 特点:
    • 每个CPU都有一个私有就绪队列
    • CPU空闲时运行调度程序,从私有就绪队列中选择一个进程运行
      • 各CPU的调度程度只会从自己的私有队列中挑选优先级最高的进程
  3. 如何实现负载均衡?
    • 推迁移(Push)策略
      • 一个特定的系统程序周期性检查每个处理器的负载 ,如果负载不平衡,就从忙碌 CPU的就绪队列中"推"一些就绪进程到空闲CPU的就绪队列。
      • 比如:负责周期检查的系统程序检查到CPU4的负载较高,CPU1的负载较低,就可以把CPU4就绪队列中的某一个进程"推"给负载较低的CPU1,以实现负载均衡。
      • 类似于有一个包工头专门负责派活
    • 拉迁移(Pull)策略
      • 每个CPU运行调度程序时,周期性检查自身负载与其它CPU负载 。如果一个CPU负载很低,就从其它高负载CPU 的就绪队列中**"拉"一些就绪进程到自己的就绪队列**。
      • 比如:每执行10次调度程序,CPU1就检查一下自己和其它CPU负载,此时发现自己负载较低,CPU4负载较高,就主动把CPU4就绪队列中的某些就绪进程"拉"到自己的队列。
      • 类似于一群互帮互助的同事(看到其他同事很忙,就主动揽活过来,分担任务)
  4. 如何实现处理机亲和性?
    • 私有就绪队列天然地实现了"处理机亲和性"。
      • 因为一段时间内,CPU总会调度自己队列中的进程,所以这些进程在一段时间内总是上同一个CPU运行,这样就能发挥Cache的作用。
    • 由于推拉策略 ,可能导致部分进程移动到其他CPU上处理,此时会损失部分"处理机亲和性" ,但是依然可以 由用户进程通过系统调用,主动要求 操作系统分配固定的CPU,实现硬亲和

知识回顾与重要考点

相关推荐
kyrie_sakura1 小时前
python学习笔记3 -- 流程控制语句结构
笔记·python·学习
Ruannn(努力版)5 小时前
Academic writing
笔记
_Narcissus_5 小时前
链表算法题和静态链表
数据结构·c++·笔记·算法·链表·ai·力扣
九硕智慧建筑一体化厂家6 小时前
大型建筑集群智慧管控升级!IBMS系统实现多系统一体化融合管理
运维·人工智能·笔记·智慧城市
深蓝海拓6 小时前
基于QtPy (PySide6) 的PLC-HMI工程实战记录(五)为当前动作画面的信号连接变量
网络·笔记·python·学习·pyqt
摇滚侠6 小时前
《SpringBoot 3:入门与应用实战》第 6 章 Spring Boot 最佳实践 阅读笔记 10
java·spring boot·笔记
疯狂打码的少年6 小时前
【数据结构】八大排序算法对比总结(时间/空间/稳定性)
数据结构·笔记·算法
selia10787 小时前
AI手撕代码笔记
人工智能·笔记·深度学习