首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux进程及其调度策略

Linux调度器需要负责做两件事:一件事是选择某些就绪的进程来执行;另一件事是打断某些执行中的进程,让它们变回就绪状态。不过,并不是所有的调度器都有第二个功能。...我们可以用命令nice来修改一个进程默认优先级。例如有一个可执行程序叫app,执行命令: $nice -n -20 ./app 命令中的-20指的是从默认优先级上减去20。...O(n)和O(1)调度器 下面介绍Linux调度策略。最原始的调度策略是按照优先级排列好进程,等到一个进程运行完了再运行优先级较低的一个,但这种策略完全无法发挥多任务系统的优势。...O(n)调度器是Linux 2.6之前使用的进程调度器。 为了解决O(n)调度器的性能问题,O(1)调度器被发明了出来,并从Linux 2.6内核开始使用。...以上就是调度器的基本原理,以及Linux用过的几种调度策略调度器可以更加合理地把CPU时间分配给进程。现代计算机都是多任务系统,调度器在多任务系统中起着顶梁柱的作用。

2.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    进程调度策略

    读书笔记 根据优先级 根据优先级,进程分为实时进程和非实时进程(普通进程),Linux进程优先级范围为[0, 139],其中实时进程优先级的范围为[0, 99],非实时进程的优先级为[100,...进程和线程都用task_struct表示,这个结构体里面包含了用到的所有的信息,线程的信息比较少,主要是进程里的一些资源和线程信息,而进程里包含的字段比较多,主要有标识符,状态,优先级,程序计数器,内存指针...其中static_prio是普通进程的优先级,rt_priority是实时进程的优先级 对于实时进程调度策略 SCHED_FIFO:先来先服务算法,高优先级可以抢占低优先级,低优先级可以主动让出CPU...SCHED_RR:轮转调度,按优先级调度,但优先级相同时,每个任务分配相同的时间片 SCHED_DEADLINE:选择离deadline时间点最近的进程执行 对于非实时进程调度策略 SCHED_NORMAL...:根据进程优先级和当前可用时间片来给进程分配一个固定的时间片,使用的是CFS调度管理器 SCHED_BATCH:批处理,类似NORMAL,用来调度侧重吞吐量的任务 SCHED_IDLE:用于调度

    76220

    Linux进程调度策略的发展和演变--Linux进程的管理与调度(十六)

    调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换. 1.2 进程的分类 linux进程区分为实时进程和非实时进程...当然与批处理进程相比, 调度程序有偏爱交互式进程的倾向 1.3 不同进程采用不同的调度策略 根据进程的不同分类Linux采用不同的调度策略....对于实时进程,采用FIFO或者Round Robin的调度策略. 对于普通进程,则需要区分交互式和批处理式的不同。传统Linux调度器提高交互式应用的优先级,使得它们能更快地被调度。...Linux调度器使用了环形队列用于可运行的任务管理, 使用循环调度策略. 此调度器添加和删除进程效率很高(具有保护结构的锁)。简而言之,该调度器并不复杂但是简单快捷....此外Linux 2.6内核支持内核态抢占,因此更好地支持了实时进程。 相对于前任,O(1)调度器还更好地区分了交互式进程和批处理式进程Linux 2.6内核也支持三种调度策略

    2.2K20

    Linux 内核】进程优先级与调度策略 ① ( SCHED_FIFO 调度策略 | SCHED_RR 调度策略 | 进程优先级 )

    文章目录 一、Linux 内核调度策略 1、SCHED_FIFO 调度策略 2、SCHED_RR 调度策略 二、进程优先级 一、Linux 内核调度策略 ---- Linux 内核调度策略 : SCHED_OTHER...都可以执行一个时间片 ; 特别注意 : 进程的优先级计算出的 调度权重 是可以修改的 , 由开发者确定 ; 参考 【Linux 内核】调度器 ⑨ ( Linux 内核调度策略 | SCHED_NORMAL...策略 | SCHED_FIFO 策略 | SCHED_NORMAL 策略 | SCHED_BATCH策略 ) 博客 , 介绍了 Linux 内核相关的调度策略 ; 1、SCHED_FIFO 调度策略..., 只能 等待其它进程主动释放 CPU 资源 ; SCHED_FIFO 调度策略中 , 被 调度调度运行后的 进程 , 其运行时长不受限制 , 可以运行任意长的时间 ; 2、SCHED_RR 调度策略..., 优先级越高 ; 就绪状态 的 实时任务 , 可以 立刻抢占非实时任务 ; 如果 所有的 进程都采用 Linux 分时调度策略时 , 创建该进程时 , 必须 指定 优先级计算参数 nice 值 ,

    5.8K20

    Linux进程调度_linux进程的查看和调度

    没有太多的 I/O 需求,从系统响应的角度上来讲,调度器不应该经常让他们运行。对于处理器消耗型的进程调度策略往往是降低他们的执行频率,延长运行时间。...Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程的优先级越小 任何实时进程的优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总的调度结构...对于实时调度策略分为两种:SCHED_FIFO 和 SCHED_RR: 这两种进程都比任何普通进程的优先级更高(SCHED_NORMAL),都会比他们更先得到调度。...Linux 调度时机 ---- 一、进程切换 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。

    20.7K10

    linux进程调度

    调度策略 进程可以分为实时进程和普通进程,对于这两种不同类型的进程肯定有不同的调度策略,task_struct中的policy就用来表示调度策略。...实时调度策略有SCHED_RR, SCHED_FIFO, SCHED_DEADLINE。 SCHED_FIFO,对于高优先级可以抢占低优先级,对于同等优先级先来先服务。...普通调度策略有 SCHED_NORMAL, SCHED_BATCH,SCHED_IDLE SCHED_NORMAL:普通的进程 SCHED_BATCH:后台进程 SCHED_IDLE:空闲时运行的进程...stop_sched_class:优先级最高的进程使用该策略,可以打断所有其他进程,并且该进程不会被抢占 rt_sched_class:RR算法或者FIFO算法的调度策略,具体由该进程的task_struct...fair_sched_class:普通进程调度策略 CFS调度算法 CFS(completed fair Schedule)完全公平调度,适用于普通进程调度

    8.1K20

    linux进程调度

    进程提供了两种优先级,一种是普通的进程优先级,第二个是实时优先级。前者适用SCHED_NORMAL调度策略,后者可选SCHED_FIFO或SCHED_RR调度策略。...默认MAX_RT_PRIO配置为100,也即,默认的实时优先级范围是0~99。而nice值,影响的是优先级在MAX_RT_PRIO~MAX_RT_PRIO+40范围内的进程。   ...不同调度策略的实时进程只有在相同优先级时才有可比性:    1. 对于FIFO的进程,意味着只有当前进程执行完毕才会轮到其他进程执行;    2....总而言之,对于实时进程,高优先级的进程先执行,它执行到没法执行了,才轮到低优先级的进程执行。 2.非实时进程调度 Linux对普通的进程,根据动态优先级进行调度。...Linux2.6认为,交互式进程可以从平均睡眠时间这样一个measurement进行判断。进程过去的睡眠时间越多,则越有可能属于交互式进程

    3.2K140

    Linux内核调度分析(进程调度

    Linux进程调度 发展历史 Linux从2.5版本开始引入一种名为的调度器,后在2.6版本中将公平的的调度概念引入了调度程序,代替之前的调度器,称为算法(完全公平调度算法)。...策略 I/O消耗型和处理器消耗型 I/O消耗型进程是指那些大部分时间都在等待I/O操作的进程,处理器耗费型的进程则是指把大多数时间用于执行代码的进程,除非被抢占,他们一般都一直在运行。...为了保证交互式应用和桌面系统的性能,一般Linux更倾向于优先调度I/O消耗型进程进程优先级 Linux采用了两种不同的优先级范围。 使用nice值:越大的nice值意味着更低的优先级。...Linux调度算法 调度器类 Linux调度器是以模块的方式提供的,这样使得不同类型的进程按照自己的需要来选择不同的调度算法。...首先,在底层,在实际计算一个进程的处理器占比之前,内核会先把nice值转换为一个权重值weight,这个转换的公式如下: weight = 1024/(1.25^nice) 举个例子,默认nice值的进程得到的权重就是

    14.9K113

    Linux进程调度分析

    实时进程的优先级都高于普通进程,除此之外,它们的调度策略也有所不同。 实时进程调度 实时,原本的涵义是“给定的操作一定要在确定的时间内完成”。...在linux下,用户程序可以通过sched_setscheduler系统调用来设置进程调度策略以及相关调度参数;sched_setparam系统调用则只用于设置调度参数。...进程的优先级和调度策略都由用户定死了,内核只需要总是选择优先级最高的实时进程调度执行即可。唯一稍微麻烦一点的只是在选择具有相同优先级的实时进程时,要考虑两种调度策略。...进程的优先级被动态调整后,就出现了两个优先级: 1、用户程序设置的优先级(如果未设置,则使用默认值),称为静态优先级。...有兴趣的朋友可以参考下面的链接: 《Linux 调度器发展简述》 《鼠眼看Linux调度器》 《鼠眼再看Linux调度器[1]》 《鼠眼再看Linux调度器[2]》 调度程序的效率 “优先级”明确了哪个进程应该被调度执行

    2.4K31

    Linux进程调度(三)

    一、抢占式调度和主动调度: 前面我们说过,进程的切换总是通过 shedule 函数发生的,而 schedule 函数可以是在系统调用返回、中断返回等时机被调用,也可以进程在驱动程序中主动调用 我们把在系统调用返回等时机调用...schedule 函数的这种非进程自愿情况称为抢占式调度。...把进程在驱动程序中主动调用 schedule 函数来发生进程切换的这种情况称为主动调度 本文将讨论主动调度,抢占式调度将在下一篇文章中讲解: 二、主动调度的发生的情况: 主动调度一般在应用程序读取某个设备时...,设备此时数据还没有准备好,进程就进入睡眠,发生进程调度切换到其它进程运行 例如应用想从网卡读取数据,但是此时网卡没有数据,那么驱动程序就会让进程睡眠,然后发生进程调度。...四、总结: 进程发生切换总是调用 schedule 函数进行的,进程调度分抢占式调度和主动调度,主动调度表示的是进程主动调用 schedule 函数发生进程切换 schedule 函数主要做了两件事,

    2.5K10

    Linux内核】进程调度

    Linux 提供了抢占式的多任务模式。在此模式下,由调度程序来决定什么时候停止一个进程的运行以便其他进程能够得到执行机会。这个强制的挂起动作就叫抢占(preemption)。...但是,因为它们不属于I/O驱动类型,所以从系统响应速度考虑,调度器不应该经常让它们运行。对于这类处理器消耗型的进程调度策略是尽量降低它们的运行频率,而将它们的运行时间拖长一些。...优先级高的进程先运行,低的后运行,相同优先级的进程按轮转方式进行调度(一个接一个,重复进行)。在包括Linux在内的某些系统中,优先级高的进程使用的时间片也较长。...调度策略必须规定一个默认的时间片,但这并不是一个简单的事。 时间片过长会导致系统对交互的响应表现欠佳,让人觉得系统无法并发执行应用程序。...很多操作系统中都特别重视这一点,所以默认的时间片很短如20毫秒。 注意,进程并不是一定非要一次就用完它所有的时间片。

    2.9K20

    Linux进程调度学习!

    没有太多的 I/O 需求,从系统响应的角度上来讲,调度器不应该经常让他们运行。对于处理器消耗型的进程调度策略往往是降低他们的执行频率,延长运行时间。...Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...Linux 调度算法: Linux 中有一个总的调度结构,称之为 调度器类(scheduler class),它允许不同的可动态添加的调度算法并存,总调度器根据调度器类的优先顺序,依次去进行调度器类的中的进程进行调度...: 对于实时调度策略分为两种: SCHED_FIFO 和 SCHED_RR 这两种进程都比任何普通进程的优先级更高(SCHED_NORMAL),都会比他们更先得到调度。...Linux 调度时机: 1、进程切换: 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。

    1.9K30

    Linux进程调度器概述--Linux进程的管理与调度(十五)

    当然与批处理进程相比, 调度程序有偏爱交互式进程的倾向 根据进程的不同分类Linux采用不同的调度策略. 对于实时进程,采用FIFO或者Round Robin的调度策略....因此进程调度也包含了线程调度的功能. linux进程调度算法其实经过了很多次的演变, 但是其演变主要是针对与普通进程的, 因为前面我们提到过根据进程的不同分类Linux采用不同的调度策略.实时进程和普通进程采用了不同的调度策略...)) 并且每个调度器包括两个内容:调度框架(其实质就是两个函数框架)及调度器类 6种调度策略 linux内核目前实现了6种调度策略(即调度算法), 用于对不同类型的进程进行调度, 或者支持某些特殊的功能...基于Earliest Deadline First (EDF) 调度算法 DL linux内核实现的6种调度策略, 前面三种策略使用的是cfs调度器类,后面两种使用rt调度器类, 最后一个使用DL调度器类...也存储了其对应的调度实体标识 linux实现了6种调度策略, 依据其调度策略的不同实现了5个调度器类, 一个调度器类可以用一种或者多种调度策略调度某一类进程, 也可以用于特殊情况或者调度特殊功能的进程.

    3.6K20

    Linux进程调度器的设计--Linux进程的管理与调度(十七)

    当然与批处理进程相比, 调度程序有偏爱交互式进程的倾向 1.3 不同进程采用不同的调度策略 根据进程的不同分类Linux采用不同的调度策略...., linux总是希望寻找一个最接近于完美的调度策略来公平快速的调度进程. 1.4 linux调度器的演变 一开始的调度器是复杂度为O(n)的始调度算法(实际上每次会遍历所有任务,所以复杂度为O(n))...:调度框架(其实质就是两个函数框架)及调度器类 2.2 6种调度策略 linux内核目前实现了6中调度策略(即调度算法), 用于对不同类型的进程进行调度, 或者支持某些特殊的功能 比如SCHED_NORMAL...也存储了其对应的调度实体标识 linux实现了6种调度策略, 依据其调度策略的不同实现了5个调度器类, 一个调度器类可以用一种或者多种调度策略调度某一类进程, 也可以用于特殊情况或者调度特殊功能的进程....参照 linux调度器源码分析 - 概述(一) 通过的调度策略对象–调度linux下每个进程都由自身所属的调度类进行管理, sched_class结构体表示调度类, 调度类提供了通用调度器和各个调度器之间的关联

    3.6K41

    图解Linux进程调度(一)

    本篇文章讲解Linux如何管理进程进程调度是怎么转起来的,为了实现进程调度维护了哪些数据结构,实现了哪些算法 至于一个进程如何实现抢占,进程调度的时机等细节将放到后面的文章讲解 二、进程调度整体框架...很明显,这一部分需要具体的调度算法来实现,Linux调度算法的实现抽象成调度类 在滴答定时器的中断处理中,通过调度类去实现相应的计算,然后判断current进程是否需要被抢占,如果需要被抢占,那么就在...current进程设置需要重新调度的标志,如下图所示: 实时上,Linux内核的调度类不仅仅只有一个,因为内核同时实现了多种调度算法,但是我们这里强调总体框架,暂不讨论这里细节问题 到此,进程切换的第一步设置...schedule函数会通过调度类,从运行队列中选取下一个要运行的进程,然后抢占current进程,成为新的current进程,如下图所示: 到这里,你应该明白了整个进程调度机制是怎么运行起来的,以及为了实现进程调度...current进程进程调度解决的问题就是合理地切换current进程 进程发生切换需要两步,第一步在current进程设置需要重新调度的标志。

    1.4K20

    图解Linux进程调度(二)

    优先级与调度策略: 在内核中,肯定不能对所有的进程一视同仁,有的进程需要优先运行,有的进程需要运行更长的时间 为了更好地实现进程调度,每个进程都有自己的优先级和调度策略 所谓优先级,就是表示这个进程的重要性...想一想,进程调度其实是一个非常复杂的问题,想使用一种算法来实现良好的进程调度是不可能的,Linux内核实现了好几种调度算法。...表示该进程采用哪种调度策略,内核提供了以下几种调度策略policy 表示该进程采用哪种调度策略,内核提供了以下几种调度策略: #define SCHED_NORMAL 0 #define SCHED_FIFO...CPU SCHED_RR:这也是实时进程调度策略,RR是时间片轮转调度,每个使用该调度策略进程都有自己的时间片,进程运行直到时间片耗尽,再将其添加到运行队列尾部,如此循环 SCHED_NORMAL:...内核中在某时刻可以去唤醒某个进程,如果这个进程调度策略是SCHED_BATCH,那它就不会去抢占当前正在运行的进程 SCHED_IDLE:是用于特别空闲的进程使用的调度策略 讲完调度策略,我们来将优先级

    1.7K10

    调度器简介,以及Linux调度策略

    Linux调度器需要负责做两件事:一件事是选择某些就绪的进程来执行;另一件事是打断某些执行中的进程,让它们变回就绪状态。不过,并不是所有的调度器都有第二个功能。...我们可以用命令nice来修改一个进程默认优先级。例如有一个可执行程序叫app,执行命令: $nice -n -20 ./app 命令中的-20指的是从默认优先级上减去20。...O(n)和O(1)调度器 下面介绍Linux调度策略。最原始的调度策略是按照优先级排列好进程,等到一个进程运行完了再运行优先级较低的一个,但这种策略完全无法发挥多任务系统的优势。...O(n)调度器是Linux 2.6之前使用的进程调度器。当Java语言逐渐流行后,由于Java虚拟机会创建大量进程调度器的性能问题变得更加明显。...以上就是调度器的基本原理,以及Linux用过的几种调度策略调度器可以更加合理地把CPU时间分配给进程。现代计算机都是多任务系统,调度器在多任务系统中起着顶梁柱的作用。

    2.1K21
    领券