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

Linux调度系统全景指南(上篇)

| 导语 本文主要是讲Linux调度系统, 由于全部内容太多,分三部分来讲,调度可以说是操作系统的灵魂,为了让CPU资源利用最大化,Linux设计了一套非常精细的调度系统,对大多数场景都进行了很多优化...这样代码(指令)执行存在不同的CPU上下文,而进行调度的时候,要进行相应的CPU上下文切换,Linux系统存在不同堆栈来保存CPU上下文,系统中每个进程都会拥有属于自己的内核栈,而系统中每个CPU都将为中断处理准备了两个独立的中断栈...合理的根据自己的生产环境和应用的特点来平衡 IRQ 中断有助于提高系统的整体吞吐能力和性能; Linux系统常见中断分类 时钟中断: 时钟芯片产生,主要工作是处理和时间有关的所有信息,决定是否执行调度程序以及处理下半部分...Linux系统中断处理 ? 由于中断会打断内核中进程的正常调度运行,所以要求中断服务程序尽可能的短小精悍;但是在实际系统中,当中断到来时,要完成工作往往需要进行大量的耗时处理。...想要获取linux调度全景指南精简版,关注公众号回复“调度”即可获取。回复其他消息,获取更多内容;

1.5K21

Linux调度系统全景指南(中篇)

【推荐阅读】 Linux调度系统全景指南(上篇) | 导语本文主要是讲Linux调度系统, 由于全部内容太多,分三部分来讲,本篇是中篇(主要讲抢占和时钟),上篇请看(CPU和中断):Linux调度系统全景指南...(上篇),调度可以说是操作系统的灵魂,为了让CPU资源利用最大化,Linux设计了一套非常精细的调度系统,对大多数场景都进行了很多优化,系统扩展性强,我们可以根据业务模型和业务场景的特点,有针对性的去进行性能优化...上篇请看(CPU和中断):Linux调度系统全景指南(上篇) 抢占 ? 早期的Linux核心是不可抢占的。它的调度方法是:一个进程可以通过schedule()函数自愿地启动一次调度。...时钟框架 时钟芯片提供节拍(tick),Linux系统设计一套时钟软件系统,满足应用对时间的各种需求:比如时间片调度系统时间,日期,定时器,睡眠等: ?...Linux中的时间运作机制 Linux时间系统实现 ?

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

    Linux 内核】CFS 调度器 ④ ( 调度系统组件模块 | 主调度器、周期性调度器 | 调度器类 )

    文章目录 一、调度系统组件模块 二、主调度器、周期性调度器 三、调度器类 一、调度系统组件模块 ---- 调度器 需要对 被调度的进程 进行 排序 和 调度管理 , 进程管理过程需要 调度器 的 组件模块..., 自动调用 scheduler_tick() 函数 , 完成调度 , 这是根据 进程 运行时间 , 自动触发进程调度 ; 三、调度器类 ---- 主调度器 或 周期性调度器 根据 不同的 " 选择进程..." 选择不同的 调度器类 , 可选的调度类参考 【Linux 内核】调度器 ⑦ ( 调度器类型 | 停机调度类 stop_sched_class | 限期调度类 dl_sched_class | 实时调度类...| 公平调度类 | 空闲调度类 ) 博客 , 在 Linux 内核中 , sched_class 调度器 分为以下 5 种类型 : stop_sched_class : 停机调度类 ; dl_sched_class...: 限期调度类 ; rt_sched_class : 实时调度类 ; fair_sched_class : 公平调度类 ; idle_sched_class : 空闲调度类 ; 每个 调度器类

    3.2K10

    linux 操作系统的进程调度(上) -- 进程调度算法的演进

    引言 上一篇文章中,我们介绍了内核调度的基本概念,知道了调度器设计中最核心的两个指标 -- 周转时间与响应时间: linux 操作系统的进程调度(上) -- 进程调度的基本概念 本文,我们就继续顺着上文的思路...,来看看在操作系统的进程调度设计中,都有哪些调度算法,他们的思路和优劣又分别体现在哪些方面。...时间片轮转算法 RR Round-Robin 算法是现代操作系统调度器诞生的基石。它按照 CPU 时钟芯片产生的若干个时钟脉冲为单位,将 CPU 时间进行切分,每个分片就是 CPU 调度的时间片。...由于 IO 密集型任务具有更高的优先级,那么进程编写者可能会通过故意进行 IO 操作来骗取操作系统的误判,从而将本是 CPU 密集型的任务被故意包装成 IO 密集型任务,进而被错误地优先调度。...结语 正是有了多级反馈队列算法,现代生产级操作系统中的进程调度器才得以真正建立起来。 下一篇文章,我们就来深入 linux,来了解具体的 linux 进程调度器的发展历史和实现机制,敬请期待。

    1.8K10

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

    多任务 并发和并行 Linux作为一个多任务操作系统,必须支持程序的并发执行。 分类 非抢占式多任务 除非任务自己结束,否则将会一直执行。...Linux进程调度 发展历史 Linux从2.5版本开始引入一种名为的调度器,后在2.6版本中将公平的的调度概念引入了调度程序,代替之前的调度器,称为算法(完全公平调度算法)。...为了保证交互式应用和桌面系统的性能,一般Linux更倾向于优先调度I/O消耗型进程。 进程优先级 Linux采用了两种不同的优先级范围。 使用nice值:越大的nice值意味着更低的优先级。...Linux调度算法 调度器类 Linux调度器是以模块的方式提供的,这样使得不同类型的进程按照自己的需要来选择不同的调度算法。...简单来说有以下两种情况会发生用户抢占: 从系统调用返回用户空间 从中断处理程序返回用户空间 内核抢占 Linux和其他大部分的Unix变体操作系统不同的是,它支持完整的内核抢占。

    14.9K113

    linux 操作系统的进程调度(上) -- 进程调度的基本概念

    Linux 操作系统中,系统会为每个进程打一个分,这个分就是 PR 值,它是 Priority 的前两个字母。...但有时,用户可能会不认可操作系统的优先级数值,而是想要去手动调整进程的优先级。此时,如果让用户直接干预 PR 值,那风险就显得很大。Linux 为用户层设计了一个 Nice 值,翻译为“谦让值”。...操作系统调度策略 在调度进程时,操作系统有两种选择: 协作式调度 -- 进程一旦被调度运行,除非他运行结束或主动释放 CPU,否则它将一直占用 CPU。...而抢占式调度的模式下,操作系统尽管增加了进程切换的开销以及调度算法设计的复杂度,但却可以更加灵活地分配 CPU 的时间资源,所以常见的操作系统一般都采用抢占式调度的策略。 5....结语 本文,我们从操作系统的整体层面,了解了操作系统进程调度的基本概念和设计思想,但我们尚未触及核心部分,到底 linux 系统中的调度器是如何设计的,又有着怎样的历史沿革,出现了哪些算法?

    1.1K10

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

    进程调度含义 ---- 进程调度决定了将哪个进程进行执行,以及执行的时间。操作系统进行合理的进程调度,使得资源得到最大化的利用。 在单片机上,常常使用的方式是:系统初始化—->while(1){}。...没有太多的 I/O 需求,从系统响应的角度上来讲,调度器不应该经常让他们运行。对于处理器消耗型的进程,调度策略往往是降低他们的执行频率,延长运行时间。...Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程的优先级越小 任何实时进程的优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总的调度结构...Linux 调度时机 ---- 一、进程切换 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。

    20.7K10

    Linux下定时任务(系统任务调度、用户任务调度)crontab使用详解

    欢迎转载,转载请注明出处,谢谢 一、简介 crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,在CentOS Linux release...Linux下的任务调度分为两类,系统任务调度和用户任务调度系统任务调度系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。/etc/crontab文件就是系统任务调度的配置文件。...用户任务调度我们一般通过crontab命令来进行配置,用户任务调度的配置保存/var/spool/cron/目录下,并以用户名称命名。系统任务调度可以通过直接修改/etc/crontab来配置。...01:15 /home/crontab/GeekDevOps.txt [root@GeekDevOps ~]# cat /home/crontab/GeekDevOps.txt GeekDevOps 系统任务调度与用户任务调度不一样...通过crontab -l 命令是查看不到系统任务调度任务的。

    2.1K10

    Go 语言调度(一): 系统调度

    介绍 Go 调度器使你编写的 Go 程序并发性更好,性能更高。这主要是因为 Go 调度器很好的运用了系统调度器的机制原理。...想要正确的设计一个优秀的高并发服务,对操作系统和 Go 的调度机制的一定的理解是很重要的。 这一系列的文章主要专注在调度器的一些宏观机制上。...尽管在并发编程中你还有很多其他知识点要了解,但在调度器的机制是其中比较基础的一部分。。 操作系统调度 操作系统调度器是软件开发中很复杂的一块。他们必须考虑硬件设施的布局和设计。...常见于通过网络请求资源,或者进行了系统调用。一个需要访问数据库的线程属于 IO密集的。互斥锁的使用也属于这种。 上下文切换 Linux,Mac 或者 Windows 系统上都拥有抢占式调度器。...这就是系统调度在做调度决策时需要考虑的一个有趣的问题。答案是,如果有空闲的核,那就直接用。我们的目标是,如果有工作要做,就决不让 CPU 闲着。

    1.3K50

    linux进程调度

    不同与普通进程,系统调度时,实时优先级高的进程总是先于优先级低的进程执行。知道实时优先级高的实时进程无法执行。实时进程总是被认为处于活动状态。...2.非实时进程的调度 Linux对普通的进程,根据动态优先级进行调度。而动态优先级是由静态优先级(static_prio)调整而来。Linux下,静态优先级是用户不可见的,隐藏在内核中。...系统调度时,还会考虑其他因素,因而会计算出一个叫进程动态优先级的东西,根据此来实施调度。因为,不仅要考虑静态优先级,也要考虑进程的属性。...Linux2.6 在这方面有了较大的提高。Linux2.6认为,交互式进程可以从平均睡眠时间这样一个measurement进行判断。进程过去的睡眠时间越多,则越有可能属于交互式进程。...则系统调度时,会给该进程更多的奖励(bonus),以便该进程有更多的机会能够执行。奖励(bonus)从0到10不等。

    3.2K140

    Linux线程调度

    Linux中,线程是由进程来实现,线程就是轻量级进程( lightweight process ),因此在Linux中,线程的调度是按照进程的调度方式来进行调度的,也就是说线程是调度单元...Linux这样实现的线程的好处的之一是:线程调度直接使用进程调度就可以了,没必要再搞一个进程内的线程调度器。...下面介绍几种常见的调度策略: SCHED_OTHER:该策略是是默认的Linux分时调度(time-sharing scheduling)策略,它是Linux线程默认的调度策略。...在Linux中,对于SCHED_FIFO和SCHED_RR调度策略其优先级为1到99,其他调度策略优先级为0。注意在不同系统上,这个优先级范围可能不一样。...系统创建线程时,默认的线程调度策略是SCHED_OTHER。

    4.1K20

    linux进程调度

    调度策略 进程可以分为实时进程和普通进程,对于这两种不同类型的进程肯定有不同的调度策略,task_struct中的policy就用来表示调度策略。...fair_sched_class:普通进程的调度策略 CFS调度算法 CFS(completed fair Schedule)完全公平调度,适用于普通进程调度。...vruntime = 实际运行时间 * NICE_0_LOAD / 权重 使用调度算法首先得有包含vruntime的调度实体,task_struct中有如下调度实体的成员变量: struct sched_entity...se; //完全调度实体 struct sched_rt_entity rt; // 实时调度实体 struct sched_dl_entity dl; // deadline调度实体 CFS算法中将...当cpu需要一个任务执行时,其会先按照优先级选择不同的调度类,不同的调度类操作不同的队列,例如rt_sched_class先被调用,其会在rt_rq中找下一个任务,只有找不到时才轮到fair_sched_class

    8.1K20

    linux 系统调度器(四) -- 利用 chrt 命令查询与修改进程调度

    引言 上一篇文章中,我们介绍了 linux 调度器的演进: linux 进程调度器(下) -- 调度器演进 在上一篇文章中,我们知道,到 Linux 2.6.23 版本后,linux 实际上维护了一组调度器来实现不同的调度需要...那么,我们怎么才能让我们的进程被不同层的调度调度呢?那就需要使用 linux 提供的十分有用的工具 -- chrt 来实现了,本文我们就来介绍一下这个命令的使用。...2. chrt 命令的介绍 chrt 命令是 linux 提供的一个底层应用指令,它可以在运行时设置进程的某些属性,还可以更改调度策略和调度优先级。...4. chrt 的 options chrt 的 options 有五种选择,分别对应了上一篇文章中介绍的四层调度器的五个策略: SCHED_DEADLINE:仅供系统使用的 DL 调度器使用的策略,用户不能选择...SCHED_FIFO 和 SCHED_RR 两个调度器可以让我们去指定,因为 RT 调度器是采用传统的 O(1) 调度算法来实现的基于时间片调度的策略的。

    4.7K30

    linux内核调度算法(3)–多核系统的负载均衡

    Linux内核是如何在多核间调度进程的呢?又是内核又是CPU核,两个核有点绕,下面称CPU处理器来代替CPU核。...实际上,如果你没有对你的进程做过特殊处理的话,LINUX内核是有可能把它放到多个CPU处理器上运行的,这是内核的负载均衡。...假设我们的系统是双核的,父进程运行在cpu0上,那么这个fork出来的进程也是在cpu0的runqueue中。 那么,什么时候会发生负载均衡呢?...当然,多核CPU也有许多种,例如INTEL的超线程技术,而LINUX内核对一个INTEL超线程CPU会看成多个不同的CPU处理器。...内核提供了这样的系统调用。系统调用sched_getaffinity会返回当前进程使用的cpu掩码,而sched_setaffinity则可以设定该进程只能在哪几颗cpu处理器上执行。

    3.9K30

    图解|Linux调度

    本文基于 Linux-2.6.26 版本 什么是进程调度 一般来说,在操作系统中会运行多个进程(几个到几千个不等),但一台计算机的 CPU 资源是有限的,如 8 核的 CPU 只能同时运行 8 个进程。...如下图所示: 什么是组调度 一般来说,操作系统调度的实体是 进程,也就是说按进程作为单位来调度。...但如果按进程作为调度实体,就会出现以下情况: Linux 是一个支持多用户的操作系统,如果 A 用户运行了 10 个进程,而 B 用户只运行了 2 个进程,那么就会出现 A 用户使用的 CPU 时间是...如下图所示: cgroup 相关的知识点可以参考文章:《cgroup介绍》 和 《cgroup实现原理》 在 Linux 系统启动时,会创建一个根进程组 init_task_group。...在分析之前,为了对 完全公平调度算法 有个大体了解,建议先看看这篇文章:《Linux完全公平调度算法 》。 1. 进程组 在 Linux 内核中,使用 task_group 结构表示一个进程组。

    3.4K10

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

    实时进程由Linux操作系统创造,普通用户只能创建普通进程。两种进程的优先级不同,实时进程的优先级永远高于普通进程。进程的优先级是一个0到139的整数。数字越小,优先级越高。...O(n)和O(1)调度器 下面介绍Linux调度策略。最原始的调度策略是按照优先级排列好进程,等到一个进程运行完了再运行优先级较低的一个,但这种策略完全无法发挥多任务系统的优势。...因此,随着时间推移,操作系统调度器也多次进化。 先来看Linux 2.4内核推出的O(n)调度器。O(n)这个名字,来源于算法复杂度的大O表示法。大O符号代表这个算法在最坏情况下的复杂度。...表1 进程 Linux操作系统中的进程队列(run queue),如表2所示。 ? 表2 进程队列 那么在一个执行周期,被选中的进程依次是先A,然后B和C,随后是D,最后是E。...以上就是调度器的基本原理,以及Linux用过的几种调度策略。调度器可以更加合理地把CPU时间分配给进程。现代计算机都是多任务系统调度器在多任务系统中起着顶梁柱的作用。

    2.1K21

    Linux 进程调度之schdule主调度

    至于CFS调度算法的实现后面后专门写一篇文章,这里只要记住调度时选择一个优先级最高的任务执行 一、调度单位简介 1.1 task_struct 结构体简介 对于Linux内核来说,调度的基本单位是任务,...还有一个来源就是0号进程(又叫 idle 进程),每个逻辑处理器上都有一个,属于内核态线程,只有在没有其他的任务处于TASK_RUNNING状态时(系统此时处于空闲状态),任务调度器才会选择0号进程,然后重复执行...Linux采用的是每个CPU都有自己的运行队列,这样做的好处: (1)每个CPU在自己的运行队列上选择任务降低了竞争 (2)某个任务位于一个CPU的运行队列上,经过多次调度后,内核趋于选择相同的CPU...在这里我只讨论普通任务的调度,因为linux大部分情况下都是在运行普通任务,普通任务选择的调度器是CFS完全调度。 在调度时,调度器去 CFS 运行队列找是否有任务需要运行。...这个清理工作的完成是第三个任务,系统中随机的某个其它任务。同时通知我们任务被重新调度(sched_in)。 这里其实也有点复杂,我们后面在 context_switch 篇重点描述。

    1.8K20

    Linux进程调度之 - O(1)调度算法

    Linux是一个支持多任务的操作系统,而多个任务之间的切换是通过 调度器 来完成,调度器 使用不同的调度算法会有不同的效果。...Linux2.4版本使用的调度算法的时间复杂度为O(n),其主要原理是通过轮询所有可运行任务列表,然后挑选一个最合适的任务运行,所以其时间复杂度与可运行任务队列的长度成正比。...而Linux2.6开始替换成名为 O(1)调度算法,顾名思义,其时间复杂度为O(1)。...虽然在后面的版本开始使用 CFS调度算法(完全公平调度算法),但了解 O(1)调度算法 对学习Linux调度器还是有很大帮助的,所以本文主要介绍 O(1)调度算法 的原理与实现。...由于在 Linux 内核中,任务和进程是相同的概念,所以在本文混用了任务和进程这两个名词。

    4.8K81

    Linux进程调度分析

    尽管我们平常接触的很多计算机(如桌面系统、网络服务器、等)负载都比较低,但是linux作为一个通用操作系统,不能假设系统负载低,必须为应付高负载下的进程调度做精心的设计。...而linux在缺页异常的处理代码中试图分配内存时,又可能由于系统内存紧缺而分配失败,导致进程进入睡眠; 2、代码执行过程中硬件产生中断,linux进入中断处理程序而搁置当前进程。...在linux下,用户程序可以通过sched_setscheduler系统调用来设置进程的调度策略以及相关调度参数;sched_setparam系统调用则只用于设置调度参数。...有兴趣的朋友可以参考下面的链接: 《Linux 调度器发展简述》 《鼠眼看Linux调度器》 《鼠眼再看Linux调度器[1]》 《鼠眼再看Linux调度器[2]》 调度程序的效率 “优先级”明确了哪个进程应该被调度执行...调度程序跟内核中的很多过程一样会频繁被执行,如果效率不济就会浪费很多CPU时间,导致系统性能下降。 在linux 2.4时,可执行状态的进程被挂在一个链表中。

    2.4K31

    Linux进程调度(三)

    一、抢占式调度和主动调度: 前面我们说过,进程的切换总是通过 shedule 函数发生的,而 schedule 函数可以是在系统调用返回、中断返回等时机被调用,也可以进程在驱动程序中主动调用 我们把在系统调用返回等时机调用...把进程在驱动程序中主动调用 schedule 函数来发生进程切换的这种情况称为主动调度 本文将讨论主动调度,抢占式调度将在下一篇文章中讲解: 二、主动调度的发生的情况: 主动调度一般在应用程序读取某个设备时...当网卡有数据的时候,它又被唤醒重新开始运行,然后返回用户态 当进程A发生系统调用的时候,会将进程A在用户态运行的时候的寄存器保存下来(栈顶指针、指令指针等等) 还记得内核栈的模样吗?...它长下面这个样子: 其中的 pt_regs 就用来保存进程在用户态运行时寄存器的值 发生系统调用进入内核态后,进程最终会调用到网卡驱动的读函数 网卡的读函数大概是这个样子 /* 网卡的驱动程序 */...四、总结: 进程发生切换总是调用 schedule 函数进行的,进程调度分抢占式调度和主动调度,主动调度表示的是进程主动调用 schedule 函数发生进程切换 schedule 函数主要做了两件事,

    2.5K10
    领券