linux内核调度器⑦(调度器类型|停机调度类stop_sched_class|限期调度类dl_sched_class|实时调度类|公平调度类|空闲调度类)(代码片段)

韩曙亮 韩曙亮     2023-03-09     361

关键词:

文章目录





一、调度器类型



在 Linux 内核中 , sched_class 调度器 分为以下 5 5 5 种类型 :

  • stop_sched_class : 停机调度类 ;
  • dl_sched_class : 限期调度类 ;
  • rt_sched_class : 实时调度类 ;
  • fair_sched_class : 公平调度类 ;
  • idle_sched_class : 空闲调度类 ;

上述每种 " 调度类 " 都有自己的 调度策略 ;


调度类 优先级 由高到低排列为 :

停机调度类 > 限期调度类 > 实时调度类 > 公平调度类 > 空闲调度类





二、调度器类型源码定义



调度器类型 , 定义在 Linux 内核源码 linux-5.6.18\\kernel\\sched\\sched.h 头文件中的 1792 1792 1792 ~ 1796 1796 1796 行 ;

extern const struct sched_class stop_sched_class;
extern const struct sched_class dl_sched_class;
extern const struct sched_class rt_sched_class;
extern const struct sched_class fair_sched_class;
extern const struct sched_class idle_sched_class;





三、停机调度类 ( stop_sched_class )



停机调度类 ( stop_sched_class ) 优先级最高 , 用于 停止进程 , 该 调度类 可以抢占 系统进程 ;

" 停机进程 " 是 优先级最高的进程 ;

" 停机进程 " 可以 任意抢占 其它进程 , 但是 其它进程 不能抢占 停机进程 ;





四、限期调度类 ( dl_sched_class )



限期调度类 ( dl_sched_class ) 按照 优先算法 调度进程 , 将 进程 按照 绝对截止期限 从小到大红黑树 中进行排序 ;

调度时 , 每次都选择 截止期限 最小的 " 进程 " 执行 ;





五、实时调度类 ( rt_sched_class )



实时调度类 ( rt_sched_class ) 为每个 " 调度优先级 " 维护一个 队列 ;





六、公平调度类 ( fair_sched_class )



公平调度类 ( fair_sched_class ) , 引入 一个 完全公平调度算法 , 根据 " 虚拟运行时间 " 概念 , 调度进程 ;

虚 拟 运 行 时 间 = 实 际 运 行 时 间 ∗ N I C E _ 0 _ L O A D 进 程 权 重 \\rm 虚拟运行时间 = \\cfrac实际运行时间 * NICE\\_0\\_LOAD进程权重 =NICE_0_LOAD

其中 N I C E _ 0 _ L O A D \\rm NICE\\_0\\_LOAD NICE_0_LOADnice0 对应的权重 ;





七、空闲调度类 ( idle_sched_class )



空闲调度类 ( idle_sched_class ) , 每个 CPU 上都有一个 空闲线程 , 该空闲线程称为 0 号线程 ;

空闲调度类 优先级最低 , 只有在 其它类型的调度类进程都执行完毕后 , 才会执行 空闲调度类 对应的进程 ;

linux内核调度器③(sched_class调度类结构体分析|next字段|enqueue_task函数|dequeue_task函数)(代码片段)

...执行队列)三、dequeue_task函数(从执行队列中删除进程)Linux内核源码linux-5.6.18\\kernel\\sched\\sched.h中,定义的structsched_class调度类结构体,就是"调度器"对应的类;一、next字段(指向链表中的下一个调度类)整个L 查看详情

linux内核实时调度类⑦(实时调度类核心函数源码分析|dequeue_task_rt函数|从执行队列中移除进程)(代码片段)

...的各个函数指针指向的函数源码;rt_sched_class结构体在Linux内核源码的linux-5.6.18\\kernel\\sched\\rt.c源文件中定义,实时调度相关的核心 查看详情

万字详解linux内核调度器极其妙用

...真正的工作中,有什么用呢?这里我解析一下Linux内核调度器,以及使用它使得资源利用率翻倍的例子。一、调度器原理到底困惑在哪里?我们先从调度器的概念和原理入手。Linux为什么需要调度器呢? 查看详情

万字详解linux内核调度器极其妙用

...真正的工作中,有什么用呢?这里我解析一下Linux内核调度器,以及使用它使得资源利用率翻倍的例子。一、调度器原理到底困惑在哪里?我们先从调度器的概念和原理入手。Linux为什么需要调度器呢? 查看详情

linux内核调度器④(sched_class调度类结构体分析|yield_task函数|heck_preempt_curr函数|task_struct函数)(代码片段)

...程是否可以被抢占)三、task_struct函数(选择运行进程)Linux内核源码linux-5.6.18\\kernel\\sched\\sched.h中,定义的structsched_class调度类结构体,就是"调度器"对应的类;一、yield_task函数(放弃CP 查看详情

linux-linux内核-进程调度

文章目录Linux内核-进程调度一、进程调度的原理(1)多任务分类(2)进程分类(3)优先级二、进程状态(1)三状态模型(2)进程的切换(3)状态字段定义(4)psaux中的stat... 查看详情

实时调度类(代码片段)

...实时调度类。调度器结构使得实时进程可以平滑地集成到内核中,而无需修改核心调度器,这显然是调度类带来的好处。现在比较适合于回想一些很久以前讨论过的事实。实时进程的特点在于其优先级比普通进程高,对应地,其... 查看详情

cfs调度器

一、前言随着内核版本的演进,其源代码的膨胀速度也在递增,这让Linux的学习曲线变得越来越陡峭了。这对初识内核的同学而言当然不是什么好事情,满腔热情很容易被当头浇灭。我有一个循序渐进的方法,那就是先不要看最... 查看详情

《clrviac#》之线程处理——任务调度器

《CLRviaC#》之线程基础——任务调度器《CLRviaC#》之线程基础——任务调度器线程池任务调度器设置线程池限制如何管理工作者线程同步上下文任务调度器自定义TaskScheduler派生类FCL提供了两个派生子TaskScheduler的类型:线程池任务... 查看详情

深入理解linux内核之主调度器(下)

4.进程上下文切换接前文:深入理解Linux内核之主调度器(上)前面选择了一个合适进程作为下一个进程,接下来做重要的上下文切换动作,来保存上一个进程的“上下文”恢复下一个进程的“上下文”,... 查看详情

cfsscheduler(cfs调度器)(代码片段)

...解决O(n)调度器不能解决的问题,而O(1)调度器在Linux2.4内核的在服务器的变形是可行的,但是Linux2.4以后随着移动设备的逐渐普遍,面临的卡顿问题逐渐明晰,这才导致后来的CFS调度器的出现。 本节我们重点来关... 查看详情

linux内核调度问题分析(代码片段)

目录一、调度场景分析不支持内核抢占的内核支持内核抢占二、如何让新进程执行三、调度的本质一、调度场景分析假如内核只有3个线程,线程0创建线程1和线程2.当系统时钟到来时,时钟中断处理函数会检查是否有进程... 查看详情

调度算法

参考:OS中常用的调度算法总结调度算法的介绍及优缺点linux进程(任务)调度算法进程类型:IO消耗型(交互)处理器消耗型(计算)进程两种不同的优先级:nice值,普通进程实时优先级,实时进程调度器,目的是允许不同类... 查看详情

简述lvs集群类型及调度算法

Lvs的的介绍:Lvs:LinuxVirtualServer,负载调度器,集成内核,是一套开源软件;用于实现负载均衡,工作在内核空间,四层转发和四层路由,即在传输层转发,由于工作在内核空间,突破了套接字数量的限制,工作性能极强,经测... 查看详情

rt-thread内核之线程调度器

http://www.cnblogs.com/King-Gentleman/p/4278012.html一、前言RT-Thread中提供的线程调度器是基于全抢占式优先级的调度,在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢... 查看详情

linux-linux内核-进程调度

文章目录Linux内核-进程调度一、进程调度的原理(1)多任务分类(2)进程分类(3)优先级二、进程状态(1)三状态模型(2)进程的切换(3)状态字段定义(4)psaux中的stat... 查看详情

linux内核的4大io调度算法

Linux内核包含4个IO调度器,分别是NoopIOscheduler、AnticipatoryIOscheduler、DeadlineIOscheduler与CFQIOscheduler。anticipatory,预期的;提早发生的;期待着的通常磁盘的读写影响是由磁头到柱面移动造成了延迟,解决这种延迟内核主要采用两种策... 查看详情

linux内核调度器⑥(task_woken函数|set_cpus_allowed函数|rq_online函数|rq_offline函数)(代码片段)

...ne函数(启动执行队列)四、rq_offline函数(禁止执行队列)Linux内核源码linux-5.6.18\\kernel\\sched\\sched.h中,定义的structsched_class调度类结构体,就是"调度器"对应的类;一、task_woken函数(唤醒阻塞进程)sched_class调度类结构体中的task_woken函... 查看详情