Linux---进程调度及CFS调度器

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

Linux调度算法

1O(N)调度器

O(N)调度器发布于1992年,从就绪队列中比较所有进程的优先级,然后选择一个最高优先级的进程作为下一个调度进程

  • 优点:操作简单,便于理解。
  • 缺点:时间消耗太大,在众多可运行进程或者多处理器的环境下都难以胜任

2O(1)调度器

O(1)调度器在Linux2.5系列内核开始至Linux2.6.23版本之前,优化了选择下一个进程的事件,为每个CPU维护一组进程优先级队列,每个优先级一个队列,这样在选择下一个进程时,只需要查询优先级队列相应的位图即可知道哪个队列中有就绪进程,所以查询时间为常数O(1)

  • 优点:适合于大型服务器的负载场景。
  • 缺点:处理桌面系统的交互式进程时存在问题,进程反应缓慢,并且对NUMA支持也不完善

 3CFS调度器

Con Kolivas(麻醉师)提出了RSDLRotating Staircase Deadline Scheduler, 翻转楼梯最后期限调度算法),该算法吸收了队列理论算法,将公平调度的概念引入了Linux调度程序中,但没有被社区所采纳Ingo Molnar(RedHat)借鉴了RSDL的思想,提出了CFS调度算法。CFS算法在Linux2.6.23后的版本使用。

进程的行为

  • I/O密集型:进程的大部分时间用来提交I/O请求或是等待I/O请求。多数的用户界面程序(GUI)在多数的时间里等待鼠标或键盘的交互操作。
  • CPU密集型:进程把时间大多数用在执行代码上,除非被抢占,否则一至不停地运行。例如编译代码、MATLAB等。

当然这种分法不是绝对的,进程可以同时展示这两种行为,比如X Window服务器及时I/O密集型,也是CPU密集型。进程也可以一会是I/O密集型,一会又是CPU密集型通常I/O密集型的进程优先级比CPU密集型高。Linux作为通用系统,因此需要在调度策略上对I/O密集型、CPU密集型的两个矛盾中寻找平衡:进程响应迅速最大系统利用率

进程优先级

进程PCB描述符struct task_struct数据结构中有4个成员描述进程的优先级prio static_prio normal_prio normal_prio

  • 1prio保存着进程的动态优先级,是调度类考虑的优先级,有些情况下需要暂时提高进程优先级,例如实时互斥量等
Linux 内核源码分析】进程调度 -CFS 调度器 CFS(Completely Fair Scheduler)调度器中,任务的权重值由其nice值决定,通过对比不同任务的权重值,CFS会分配合理的CPU时间片给每个任务。这种方式实现了一种类似于多态的效果,即不同的任务可以使用不同的调度法,而调度器的函数指针则根据具体的调度器类型来指向对应的函数。通过这种方式,Linux 内核可以根据任务的调度器类型来调用相应的调度函数,实现了灵活的调度策略,并且能够方便地扩展和切换不同的调度器。高优先级的任务会获得更多的虚拟运行时间,在排序和选择调度时更容易被选中。 阅读详情

相关推荐

Linux进程调度-CFS调度器原理分析及实现,懂了

1. 概述 (1) Completely Fair Scheduler,完全公平调度器,用于Linux系统中普通进程调度。 (2) CFS采用了红黑树法来管理所有的调度实体 sched_entity,法效率为O(log(n))。CFS跟踪调度实体sched_entity的虚拟运行时间vruntime,平等对待运行队列中的调度实体sched_entity,将执行时间少的调度实体sched_entity排列到红黑树的左边。 (3) 调度实体sched_entity通过 enqueue_entity()和

Linuxhus的博客 1715

linux获取线程调度时间,linux下调用sleep或者usleep函数的CPU线程调度情况?

1.在嵌入式linux平台下调用sleep或者usleep函数的CPU线程调度情况?2.开发板上使用的时at91sam9261ARM9CPU芯片,主频240M,操作系统是linux2.6.28.10版本,那么在该操作系统下的线程调度的切换CPU时间片是多长,网上有地方说是linux2.6是线程切换CPU时间片默认是10ms,不知是否准确,不提升线程优先级的情况下能否将线程切换时间片改变(如改为...

weixin_36040584的博客 539

linux调度器(五)——进程管理与CFS

进程调度初始化          由于该过程涉及到进程的管理模块,这个模块的详细过程我们将在以后的机会介绍,所以这里,我们主要扣出与调度相关的内容。进程的创建内核入口为do_fork,首先我们简单的看一下它的主要行为: 图 do_fork与CFS的交互          上图我们只是画了do_fork最普通的fork操作,及正常的启动状态,上面的三个sched_class函数调用就是

阿罗 7208

四种进程调度法的时间计

四种进程调度法的时间计

weixin_74052912的博客 4454

Linux多线程编程中的调度策略编程

调度策略编程应该在多线程编程中拥有一席之地

一把菜刀行江湖 357

linux内核分析一CFS (完全公平调度法)

进程优先级,进程nice值和%nice的解释 用top或者ps命令会输出PRI/PR、NI、%ni/%nice这三种指标值,这些到底是什么东西?先给出大概的解释如下: PRI :进程优先权,代表这个进程可被执行的优先级,其值越小,优先级就越高,越早被执行 NI :进程Nice值,代表这个进程的优先值 %nice :改变过优先级的进程的占用CPU的百分比 (呵呵,这句好难理解是吧,不急慢慢来_) PRI是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。那N

weixin_46048542的博客 4044

CFS调度周期调度粒度、时间片分析

CFS调度周期调度粒度、时间片等基本概念的分析

OS Developer的博客 1930

看一看Linux CFS 完全公平进程调度器工作原理

看一看Linux CFS调速器工作原理

m0_66753473的博客 1330

Linux进程管理:CFS调度器

目录:(1)进程的诞生(2)CFS调度器(3)SMP负载均衡(4)HMP调度器(5)NUMA调度器(6)EAS绿色节能调度器(7)实时调度(8)最新更新与展望(篇外)内核线程根据进程的特性可以将进程划分为:交互式进程、批处理进程、实时进程。O(N)调度器从就绪队列中比较所有进程的优先级,然后选择一个最高优先级的进程作为下一个调度进程。每个进程都一个固定时间片,当进程时间片用完之后,调度器会选择下一个调度进程,当所有进程都运行一遍后再重新分配时间片。

m0_74282605的博客 508

Linux CFS调度器之选择下一个需要调度进程

前言 CFS调度器选择下一个要执行的进程时,基本原则是选择vruntime最小的进程,vruntime小意味着应该受到CPU的优待。但是在某些情况下,会对该原则有所违背,比如某个进程睡眠了一段时间,时间到了以后理应尽可能快的被调度,这个过程可能会导致当前进程被抢占,好端端的被抢占了,CPU在补偿了刚刚醒来的进程后,理应再补偿下被抢占的进程。 发生在进程唤醒过程中的抢占事件 进程睡眠和进程唤醒的...

liuhangtiant的博客 930

Linux 进程管理之CFS调度器

调度的发展历史 字段版本O(n) 调度器linux0.11 - 2.4O(1) 调度器linux2.6CFS调度器linux2.6至今O(n) 调度器是在内核2.4以及更早期版本采用的法...

Peter的专栏 1003

Linux内核学习——进程管理之调度器基本原理(基于CFS调度器

进程管理学了那么久,该不会还不知道Linux操作系统是如何进行进程调度的吧?一文带你弄懂Linux内核进程管理之CFS调度法。

weixin_42230753的博客 1135

深入剖析 Linux 进程调度机制:聚焦完全公平调度器 (CFS)

LinuxCFS 调度器是一个工程杰作,它通过创新的虚拟运行时间 (vruntime) 概念和高效的红黑树数据结构,在理论公平性、实际交互性、吞吐量和实现简洁性之间取得了卓越的平衡。它摒弃了复杂的启发式规则,用统一、简洁的模型 (vruntime增长速率反比于权重) 自然地实现了对不同优先级 (nice)、不同类型(交互式/批处理)进程的公平调度和良好响应。模块化的调度类设计确保了实时任务能够得到及时处理。组调度 () 的引入则完美适应了云计和容器化时代对资源隔离和精确控制的需求。

JarVis的博客 1121

(五)Linux进程调度-CFS调度器

1. 概述 Completely Fair Scheduler,完全公平调度器,用于Linux系统中普通进程调度CFS采用了红黑树法来管理所有的调度实体sched_entity,法效率为O(log(n))。CFS跟踪调度实体sched_entity的虚拟运行时间vruntime,平等对待运行队列中的调度实体sched_entity,将执行时间少的调度实体sched_entity排列到红黑树的左边。 调度实体sched_entity通过enqueue_entity()和dequeue_enti

weixin_38428439的博客 809

Linux CFS调度器之判断当前进程是否应该调度出去

前言 之前有说到过,定时器会周期性的产生中断,在其中断处理函数中,会更新当前进程的时间信息,并依此判断是否抢占当前进程。不过当时只是简单的介绍说,如果当前进程用完了分给他的时间片,就需要被调度器调出出去,今天我们来分析一下细节。 调度延时 我们先来说几个基本概念,调度延时,最小调度粒度,以及调度延时进程数。 1. 调度延时 unsigned int sysctl_sched_latency =...

liuhangtiant的博客 447

linux nice值_Linux进程调度:完全公平调度器CFS

对于分时操作系统来说,表面上看起来同时多个进程在运行,其实系统内部同一时间只有一个进程在运行,但进程是以比较快的速度在切换。这样就引入了进程切换和进程调度的概念了。进程调度应该是操作系统的核心功能了,它非常的复杂。尽管刚出Linux开发为的是桌面操作系统,但现在服务器,嵌入式设备,个人pc都会使用它,不同领域对进程调度的差异非常大,所以要考虑整体的平衡性。Linux进程调度器中被分为三种:交互式...

weixin_34237700的博客 1145

linux cfs 源码,Linux內核——進程管理之CFS調度器(基於版本4.x)

《奔跑吧linux內核》3.2筆記,不足之處還望大家批評指正進程大致可以分為交互式進程,批處理進程和實時進程。對於不同的進程采用不同的調度策略,目前Linux內核中默認實現了4種調度策略,分別是deadline、realtime、CFS和idle,分別適用struct sched_class來定義調度類。4種調度類通過next指針串聯在一起,用戶空間程序可以使用調度策略API函數(sched_se...

weixin_36347877的博客 162

彻底搞懂Linux内核CFS调度器:让每个进程都公平运行的秘密

你是否曾经遇到过这样的情况:电脑明明配置很高,却在同时打开多个程序时变得卡顿?或者运行视频编辑软件时,后台下载任务总是抢占CPU资源导致编辑卡顿?这些问题的背后,都与操作系统的进程调度机制密切相关。在Linux系统中,**CFS(Completely Fair Scheduler,完全公平调度器)** 就是解决这些问题的核心机制之一。今天,我们就来深入探讨Linux内核中最重要的调度类——`fai...

gitblog_01096的博客 1069

Linux CFS调度器之唤醒抢占--Linux进程的管理与调度(三十)

原文链接:https://blog.csdn.net/gatieme/article/details/52068061 日期 内核版本 架构 作者 GitHub CSDN 2016-0729 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 CFS负责处理普通非实时进程, 这类进程是我们linux中最普遍的进程 1 前景回顾 1.1 CFS调度CFS

weixin_39094034的博客 339
上一篇: Linux---进程管理基础知识和创建流程
下一篇: BES音频框架分析---Audioflinger
田_田_田
博客等级 码龄11年 54粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值