当前位置: 首页 > news >正文

掌控进程:深入剖析 Linux 内核调度机制

用不同的调度策略调度实时进程。普通进程支持两种调度策略:

  • 标准轮流分时(SCHED_NORMAL):默认的调度策略,调度大多数非实时、通用目的的进程。用完全公平调度器(CFS),为所有进程提供公平的 CPU 时间分配,同时考虑进程的nice值。

  • 批处理调度(SCHED_BATCH ):调度普通的非实时进程,针对 CPU 密集型、非交互式任务进行了优化。

  • 空闲(SCHED_IDLE):最低优先级的调度策略。只有系统没有其他任何可运行的进程,SCHED_IDLE进程才会被调度运行。

二、进程优先级

限期进程的优先级比实时进程高,实时进程的优先级比普通进程高。

优先级层次:

  • 限期进程 (SCHED_DEADLINE) 有最高的优先级,根据截止时间进行调度,在所有其他进程之前完成。

  • 实时进程 (SCHED_FIFO,SCHED_RR) 的优先级次之,高于所有普通进程。

  • 普通进程 (SCHED_NORMAL,SCHED_BATCH) 有相对较低的优先级。

  • 空闲进程 (SCHED_IDLE) 有最低的优先级。

限制进程的优先级是-1。实时进程的实时优先级是 1-99,优先级数值越大,表示优先级 越高。普通进程的静态优先级是 100-139,优先级数值越小,表示优先 级越高,可通过修改 nice 值改变普通进程的优先级,优先级等于 120 加上 nice 值。

优先级数值:

  • 限期进程:优先级由截止时间决定,截止时间越早,逻辑优先级越高。

  • 实时进程:优先级范围是 1 到 99。数值越大,优先级越高。

  • 普通进程:静态优先级范围是 100 到 139。数值越小,优先级越高。普通进程的优先级可以修改nice值来调整。nice值的范围是 -20 到 +19。静态优先级计算公式:静态优先级 = 120 + nice 值

  • 空闲进程:优先级最低,内部表示为 -1。

prio是调度优先级,数值越小,优先级越高;多数情况为normal_prio。

优先级

限期进程

普通进程

实时进程

prio

normal_prio

normal_prio

normal_prio

static_prio

0

120 加上 nice 值,数值越小优先级越高。

0

normal_prio

-1

static_prio

99至rt_priority

rt_priority

0

0

1至99,数值越大优先级越高

在 task_struct 结构体中,4 个成员和优先级有关如下:

代码语言:C

自动换行

AI代码解释

// include/linux/sched.h int prio; int static_prio; int normal_prio; unsigned int rt_priority;

  • int prio;:进程的动态优先级,也是调度器实际用的优先级。数值越小,优先级越高。

  • int static_prio;:进程的静态优先级。普通进程由120 + nice 值决定;实时进程和限期进程为 0,因为优先级由rt_priority或截止时间决定。

  • int normal_prio;:进程的正常优先级。基于static_priort_priority计算得出。

  • unsigned int rt_priority;:实时进程的实时优先级,范围是 1 到 99。对于非实时进程,值为 0。

三、公平调度 CFS 与其它调度

3.1、调度类

Linux 内核 sched_class 调度器有五种类型:

  • dl_sched_class:限期调度类。

  • rt_sched_class:实时调度类。

  • stop_sched_class:停机调度类。

  • idle_sched_c lass。

  • fair_sched_class。

其中每种调度类都有自己的调度策略。主要是为方便添加新的调度策略 ,Linux 内核抽象一 个调 度类 sched_class。其调试器类型源码如下(kernel/sched/sched.h):

代码语言:C

自动换行

AI代码解释

extern const struct sched_class dl_sched_class extern const struct sched_class rt_sched_class extern const struct sched_class stop_sched_class extern const struct sched_class idle_sched_c lass extern const struct sched_class fair_sched_class

  • stop_sched_class调度类可以抢占其他进程,其他进程不能抢占它;停机调度类是指将处理器停下来做更加紧急的工作,只有迁移线程属于停机调度类,每个CPU有一个迁移线程cpu_id。

  • dl_sched_class调度类使用红黑树将进程按照绝对截至限期从小到大排序,每次调度的时间选择绝对截止限期最小的进程。

  • rt_sched_class将每个调度优先级维护一个队列,通过位图bitmap能够快速查找第一个非空队列;DECLARE_BITMAP(bitmap,MAX_RT_PRIO+1)。

调度类优先级,由高到低进行排列:停机调度类>限期调度类> 实时调度类>公平调度类>空闲调度类。

http://www.jsqmd.com/news/486457/

相关文章:

  • 太阳能板清洁机器人3D图纸 STEP格式
  • 一劳永逸!Linux基础命令和工具详解,让你轻松应对各种任务!
  • Win10下安装 Redis
  • SourceTree 交互式变基(rebase) 合并压缩提交
  • 嵌入式知识篇---IMU(惯性测量单元)
  • Docker网络高级实战:隔离网络、检查路由表和自定义网络驱动
  • Python-flask安卓微信小程序农产品商城农贸市场信息管理与个性化菜谱推送系统vue
  • 2025年爬取上市公司高管、董事和监事简历、持股情况、任职情况变动数据(历年)
  • 董宝珍《精神经济学》PDF下载与阅读笔记分享 精神经济学PDF、精神经济学电子书、精神经济学下载、董宝珍精神经济学、精神价值理论
  • BeatBanker木马的复合攻击机制与移动安全防御研究
  • 密码学中的 GPU 加速 AES 算法探索
  • 上位机知识篇---显示框卡顿原因分析与分辨率优化方案
  • Linux 内核内存管理:虚拟地址空间、伙伴系统和块分配器
  • 进阶8 翻译47 单词40
  • 分析常见占用空间的文件类型:系统临时文件
  • 高校场景下税务钓鱼攻击的演化机制与多维防御策略研究
  • 数字孪生如何助力智慧工厂建设?
  • LeetCode 108. 将有序数组转换为二叉搜索树:解题思路+代码详解
  • 本地搜索(@vuepress/plugin-slimsearch替换vuepress-plugin-search-pro)
  • 汽车控制器之软件质量管理体系
  • 2026.3.15:bochs2.6.11(带debug)虚拟机安装和使用教程
  • Java 面试题大全(整理版)附答案详解
  • SpringBoot+Vue Spring boot社区医院管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 2026年食用植物调和油厂家推荐:河南省淇花食用油有限公司,多品类全系供应满足多元需求 - 品牌推荐官
  • 深度解析:RNN、LSTM与GRU如何破解锂离子电池SOH预测难题?
  • 食品行业节能烘干机优质品牌推荐:工业滚筒烘干机/带式干燥机/旋转闪蒸烘干机/桨叶干燥机/气流烘干机/流化床干燥机/选择指南 - 优质品牌商家
  • 二维数组矩阵
  • 快消行业经销商管理系统公司服务商推荐 - 麦麦唛
  • 长沙心理医院指南:真实案例分享与暖心选择
  • 基于微信小程序的足浴城会员消费管理系统Python-flask