news 2026/8/25 15:18:35

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
操作系统笔记-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,实现硬亲和

知识回顾与重要考点

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 15:14:12

分立元器件门电路:从二极管到三极管,逻辑门的原始形态

分立元器件门电路:从二极管到三极管,逻辑门的原始形态 在 CMOS 芯片统治世界之前,逻辑门是用一个个分立的二极管、三极管和电阻,在电路板上焊出来的。理解这些原始的门电路,才能真正理解"逻辑运算如何变成物理电路"。 现在的芯片里有几十亿个晶体管,一个与非门…

作者头像 李华
网站建设 2026/8/25 15:01:39

071、逻辑数据库与报表(了解)

071、逻辑数据库与报表(了解) 那天用户报了个奇怪的错误:用SE36创建的逻辑数据库,在报表里写GET customer,死活不进入事件块,但程序能跑,就是没数据。查了半天,发现有人在逻辑数据库的selection screen里偷偷加了NO database selection,把标准的选择条件全屏蔽了。这…

作者头像 李华
网站建设 2026/8/25 15:01:14

Agentic AI爆发拐点已至,企业如何开展业务变革?

人工智能技术飞速进化着, AI正从一个能回答问题、辅助提效的“工具”, 逐渐演变成新一代生产关系的主体之一, 即AI Agent智能体。过去生产关系把人当作绝对主体, 技术围绕人来服务;而在未来的AI时代, 是人与AI Agent智能体协同工作, 一起完成价值创造。这也表明, 企…

作者头像 李华
网站建设 2026/8/25 14:59:43

python 如何控制gpio

控制GPIO的方式涵盖: 运用RPi.GPIO库, 运用GPIO Zero库, 设定引脚模式, 读取与写入引脚状态, 运用中断处理。其中, RPi.GPIO库属较常用的方法之一, 缘由是它给予了对Pi上GPIO引脚的详尽控制。在详尽阐述RPi.GPIO库之前, 让我们先知晓控制GPIO的基础要点。一、RPi.GPIO 库一个专…

作者头像 李华
网站建设 2026/8/25 14:59:40

源码编译安装 yosys 在 ubuntu 上

1. 安装依赖 1.1. 安装常用依赖 $ sudo apt-get install gawk git make python3 lld bison clang flex \libffi-dev libfl-dev libreadline-dev pkg-config tcl-dev zlib1g-dev \graphviz xdot1.2. 安装 gtest sudo apt install libgtest-dev libgmock-dev2. 编译 yosys 下…

作者头像 李华
网站建设 2026/8/25 14:54:02

请求绑定 binding(binding/ 包)

1.1 Binding 接口源码位置:binding/binding.go:30-35// Binding describes the interface which needs to be implemented for binding the // data present in the request such as JSON request body, query parameters or // the form POST. type Binding interface {Name()…

作者头像 李华