知是行的主意,行是知的功夫。这篇文章主要讲述Linux 内核进程优先级与调度策略 ① ( SCHED_FIFO 调度策略 | SCHED_RR 调度策略 | 进程优先级 )相关的知识,希望能为你提供帮助。
文章目录
- ??一、Linux 内核调度策略??
- ??1、SCHED_FIFO 调度策略??
- ??2、SCHED_RR 调度策略??
- ??二、进程优先级??
一、Linux 内核调度策略
Linux 内核调度策略 :
- SCHED_OTHER :分时调度策略 ;
- SCHED_FIFO :实时调度策略 , 先到先服务 ; 进程 一旦 占有 CPU , 就一直运行 , 直到 有更高优先级的进程到达 时才放弃 CPU , 或者 进程自己放弃 CPU ;
- SCHED_RR :实时调度策略 , 时间片轮转 ; 进程分配到 CPU 时间片用于执行 , 该时间片用完后 , 该进程 放到该优先级队列的末尾 , 等待系统重新分配时间片执行 ;
总结一下 , 就是 如果有 多个 相同优先级 的 " 实时进程 " ,
- SCHED_FIFO策略需要 等待进程主动放弃 才可以执行其它优先级相同的任务 ,
- SCHED_RR策略 每个 优先级相同的进程 , 都可以执行一个时间片 ;
参考 ??【Linux 内核】调度器 ⑨ ( Linux 内核调度策略 | SCHED_NORMAL 策略 | SCHED_FIFO 策略 | SCHED_NORMAL 策略 | SCHED_BATCH策略 )?? 博客 , 介绍了 Linux 内核相关的调度策略 ;
1、SCHED_FIFO 调度策略
?
?SCHED_FIFO?
? 是 " 实时进程调度策略 " , 这是一种 先进先出 ( First In First Out ) 调度策略 ;
该策略 不涉及 CPU 时间片机制 ( 分时复用机制 ) , 在没有高优先级进程的前提下 , 只能 等待其它进程主动释放 CPU 资源 ;
?
?SCHED_FIFO?
? 调度策略中 , 被 调度器 调度运行后的 进程 , 其运行时长不受限制 , 可以运行任意长的时间 ;
2、SCHED_RR 调度策略
?
?SCHED_RR?
? 是" 实时进程调度策略 " , 使用的是 时间片轮转 机制 , 对应的 时间值 在 运行时会 减少 ;
进程 使用完 CPU 时间片 后 , 会加入到 与 进程优先级 相应的 执行队列 的 末尾 ;
同时 , 释放 CPU 资源 , CPU 时间片会被轮转给 相同进程优先级 的 其它进程 ;
二、进程优先级
实时进程 的 优先级 取值范围111 ~ 999999 , 其数值越大 , 优先级越高 ;
就绪状态 的 实时任务 , 可以 立刻抢占非实时任务 ;
如果 所有的 进程都采用 Linux 分时调度策略时 , 创建该进程时 , 必须 指定 优先级计算参数 ?
?nice?
?? 值 , 取值范围 ?20-20?20 ~ 191919 , 进程在 CPU 上的执行时间 是 结合 ???nice?
? 值计算出的 优先级权重 决定的 ;
在之前的博客
- ??【Linux 内核】进程管理 - 进程优先级 ① ( 限期进程 | 实时进程 | 普通进程 | 进程优先级相关字段 )??
- ??【Linux 内核】进程管理 - 进程优先级 ② ( prio 调度优先级 | static_prio 静态优先级 | normal_prio 正常优先级 | rt_priority 实时优先级 )??
进程优先级 | 限期进程 | 实时进程 | 普通进程 |
prio 调度优先级 | 等于 normal_prio 字段 | 等于 normal_prio 字段 | 等于 normal_prio 字段 |
static_prio 调度优先级 | 字段 值总为 000 , 没有意义 | 字段 值总为 000 , 没有意义 | 120+nice\\rm 120 + nice120+nice , 其数值越小 , 优先级越高 |
normal_prio 正常优先级 | ?1-1?1 | 99?rt_priority99 - \\rm rt\\_priority99?rt_priority | 120+nice\\rm 120 + nice120+nice , 其数值越小 , 优先级越高 |
rt_priority 实时优先级 | 字段 值总为 000 , 没有意义 | 字段 值为 111 ~999999 , 其数值越大 , 优先级越高 | 字段 值总为 000 , 没有意义 |
推荐阅读
- 容器技术|Docker三剑客之docker-compose
- Linux 内核 内存管理优化内存屏障 ① ( barrier 优化屏障 | 编译器优化 | CPU 执行优化 | 优化屏障源码 barrier 宏 )
- 基于 Serverless 架构的头像漫画风处理小程序
- VMware安装Fedora 35 Workstation及使用体验
- 老王读Spring Transaction从EnableTransactionManagement顺藤摸瓜,研究@Transactional的实现原理
- 开发环境Ubuntu 中使用 VSCode 开发 C/C++ ④ ( 创建 tasks.json 编译器构建配置文件 | tasks.json 编译器构建配置文件分析 )
- JAVA容器之ArrayList集合详解
- Linux 内核 内存管理RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )
- Linux 内核线程调度示例一 ④ ( pthread_attr_init 初始化线程属性对象 | 完整代码示例 )