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

C|进程调度|单核CPU调度

CPU调度,决定了CPU执行进程策略,好调度policy需要兼顾进程首次被调度等待时间和进程结束执行等待时间,因此在算法设计上极其精妙。本章完全Copy自OSTEP,介绍了基础调度算法。...,按照剩余时间进行调度(可以看作把job分割) Metric II 首次被调度等待时间 Round Robin 时间切片,每次切片都轮换所有进程。...更慢,因此CPU需要等待I/O完成,此时CPU处于闲置,因此可以Switch给其他进程。...intensive,可以高优先级处理,反正大部分时间都是空闲) 问题: 1.starvation 大量I/O-intensive 挤占高优先级,导致CPU-intensive无法执行。...---- 疑惑 首次被调度等待时间 Round Robin 时间切片,每次都轮换所有进程。

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

    探索CPU调度原理

    说起CPU调度原理,很多人第一反应是基于时间片调度,也即每个进程都有占用CPU运行时间片,时间片用完之后,就让出CPU给其他进程。...其实,基于时间片调度只是众多CPU调度算法一类,本文将会从最基础调度算法说起,逐个分析各种主流调度算法原理,带大家一起探索CPU调度奥秘。...CPU上下文切换 在探索CPU调度原理之前,我们先了解一下CPU上下文切换,它是CPU调度基础。 如今OS几乎都支持"同时"运行远大于CPU数量任务,OS会将CPU轮流分配给它们使用。...准备工作已经做好,下面我们开始进入CPU调度算法奇妙世界。...CFS:Linux完全公平调度 本节我们将介绍一个平时打交道最多调度算法,Linux系统下CFS(Completely Fair Scheduler,完全公平调度)。

    87940

    几种CPU调度策略

    CPU调度 我们知道,程序需要获得CPU资源才能被调度和执行,那么当一个进程由于某种原因放弃CPU然后进入阻塞状态,下一个获得CPU资源去被调度执行进程会是谁呢?...下图中,进程1因为阻塞放弃CPU资源,此时,进程2刚IO操作结束,可以获得CPU资源去被调度,进程3时间片轮转结束,也同样可以获得CPU资源去被调度,那么,此时操作系统应该安排哪个进程去获得CPU资源呢...这就涉及到我们操作系统CPU调度策略了。 ?...那么,CPU调度策略如何做到合理呢? 首先得明白系统中有以下几种矛盾。...等等这些问题到现在都在疯狂地探讨和研究当中,有兴趣向这方面进行深入了解可以阅读相关文献,或者阅读以下linuxCPU调度算法源码。

    5.4K10

    linux内核调度算法(2)–CPU时间片如何分配

    内核在微观上,把CPU运行时间分成许多分,然后安排给各个进程轮流运行,造成宏观上所有的进程仿佛同时在执行。...双核CPU,实际上最多只能有两个进程在同时运行,大家在top、vmstat命令里看到正在运行进程,并不是真的在占有着CPU哈。...所以,一些设计良好高性能进程,比如nginx,都是实际上有几颗CPU,就配几个工作进程,道理就在这。...实际上,内核会对初始nice值有一个-5到+5动态调整。这个动态调整依据是什么呢?很简单,如果CPU用得多进程,就把nice值调高点,等价于优先级调低点。...CPU用得少进程,认为它是交互性为主进程,则会把nice值调低点,也就是优先级调高点。这样好处很明显,因为1、一个进程初始优先值设定未必是准确,内核根据该进程实时表现来调整它执行情况。

    6.9K40

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

    进程调度任务就是合理分配CPU时间给运行进程,创造一种所有进程并行运行错觉。这就对调度器提出了要求: 1、调度器分配CPU时间不能太长,否则会导致其他程序响应延迟,难以保证公平性。...Linux 系统为了提升响应速度,倾向于优先调度 I/O 消耗型。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程优先级越小 任何实时进程优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总调度结构...Linux 调度时机 ---- 一、进程切换 从进程角度看,CPU是共享资源,由所有的进程按特定策略轮番使用。...进行负载均衡时候 在多CPU系统上,进程调度器尽量使各个CPU之间负载保持均衡,而负载均衡操作可能会需要触发抢占。

    20.7K10

    Linux 性能调优之配置CPU调度策略和可调参数

    写在前面 考试整理,博文内容涉及: CPU 调度简单认知 不同进程优先级和不同调度策略认知 CPU调度内核调度可调参数介绍 理解不足小伙伴帮忙指正 人生不是书上故事,喜怒哀乐,悲欢离合,都在书页间,可书页翻篇何其易...虽然Linux系统似乎通过多任务同时运行多个进程,但当多个进程在单个CPU上同时运行时,是通过交替执行这些进程实现。...进程优先级认知 Linux 系统中调度器基于调度策略和调度优先级决定进程执行顺序。...了解优先级之前先简单了解下调度策略,Linux 调度策略分为两组: 非实时策略(non-real-time policies)适用于大多数通用计算系统和应用程序。...非实时调度策略配置 在systemd中,CFS调度器是默认调度器,它会根据任务优先级和虚拟运行时间来进行动态调度,以提供公平CPU时间分配给所有运行进程。

    88020

    基于调度 CPU 调频机制--schedutil

    然而,这样可能会有频率上提升延时。对于 CPU 负载,没有谁比调度器还清楚了。所以 cpufreq governor 完全没必要自己去做负载采样,应该从内核调度器那里获取。...而基于调度 cpufreq governor 就是这样引出来。...schedutil 内核调度器中 CFS 调度类是通过 PELT(per entity load tracking) 来统计各个 Task 负载(capacity),并映射到 0 ~ 1024(最大值可在编译时指定...而基于调度 cpufreq governor 主要原理就是把各个 CPU capacity 映射到 CPU 频率,来完成调频动作,capacity 越高,当前 CPU 负载越高,所以频率也调很高...并且schedutil 支持快速freq 切换(fast path),当调度器有loading 变化时,就及时callback schedutil ,schedutil计算下一个freq 并且把相关freq

    9.4K30

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

    我们可以把Linux下繁多进程状态,归纳为三种基本状态。 就绪(Ready): 进程已经获得了CPU以外所有必要资源,如进程空间、网络连接等。就绪状态下进程等到CPU,便可立即执行。...调度器是CPU时间管理员。Linux调度器需要负责做两件事:一件事是选择某些就绪进程来执行;另一件事是打断某些执行中进程,让它们变回就绪状态。不过,并不是所有的调度器都有第二个功能。...如果进程不经常跟用户交互,内核将会把进程Bonus设置成小于5数。 O(n)和O(1)调度器 下面介绍Linux调度策略。...当计算机中有大量进程在运行时,这个调度性能将会被大大降低。也就是说,O(n)调度器没有很好可拓展性。O(n)调度器是Linux 2.6之前使用进程调度器。...以上就是调度基本原理,以及Linux用过几种调度策略。调度器可以更加合理地把CPU时间分配给进程。现代计算机都是多任务系统,调度器在多任务系统中起着顶梁柱作用。

    2.1K21

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

    但是普通进程调度策略就比较麻烦了, 因为普通进程不能简单只看优先级, 必须公平占有CPU, 否则很容易出现进程饥饿, 这种情况下用户会感觉操作系统很卡, 响应总是很慢,因此在linux调度发展历程中经过了多次重大变动..., linux总是希望寻找一个最接近于完美的调度策略来公平快速调度进程. 1.4 linux调度演变 一开始调度器是复杂度为O(n)调度算法(实际上每次会遍历所有任务,所以复杂度为O(n))...CFS算法和实现都相当简单,众多测试表明其性能也非常优越 字段 版本 O(n)调度算法 linux-0.11~2.4 O(1)调度linux-2.5 CFS调度linux-2.6~至今...2 Linux调度器组成 2.1 2个调度器 可以用两种方法来激活调度 一种是直接, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性机制, 以固定频率运行, 不时检测是否有必要...早期内核中就绪队列是全局, 即即有全局唯一rq, 但是 在Linux-2.6内核时代,为了更好支持多核,Linux调度器普遍采用了per-cpurun queue,从而克服了多CPU系统中,全局唯一

    3.6K41

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

    Linux进程调度 发展历史 Linux从2.5版本开始引入一种名为调度器,后在2.6版本中将公平调度概念引入了调度程序,代替之前调度器,称为算法(完全公平调度算法)。...这样,进程所获得实际CPU时间就和系统负载密切相关。 Linux抢占时机取决于新可运行进程消耗了多少处理器使用比, 如果消耗使用比当前进程小,则立刻投入运行,否则将推迟其运行。...Linux调度算法 调度器类 Linux调度器是以模块方式提供,这样使得不同类型进程按照自己需要来选择不同调度算法。...Linux调度实现 下面我们来看看CFS是如何实现,一般我们把它分为4个主要部分来分析。...u64 prev_sum_exec_runtime; // 进程在切换CPUsum_exec_runtime,简单说就是上个调度周期中运行总时间 u64 nr_migrations

    14.9K113

    操作系统CPU调度策略---07

    操作系统CPU调度策略---07 多进程图像与CPU调度 CPU调度(进程调度)直观想法 面对诸多场景,如何设计调度算法? 如何做到合理?...如果一直有前台任务… 还有很多问题… 一个实际schedule函数 Linux 0.11调度函数schedule() counter作用: 时间片 counter另一个作用: 优先级 counter...进程2刚read完,进入就绪状态,而进程3是因为时间片到期,而进入就绪态 ---- CPU调度(进程调度)直观想法 ---- 面对诸多场景,如何设计调度算法? ---- 如何做到合理?...这样可以实现IO约束型和CPU约束型任务,二者并行局面 ---- 各种CPU调度算法 折中和综合让操作系统变得复杂, 但有效系统又要求尽量简单… 因此,对于CPU调度算法而言,一定要尽可能简单,执行尽可能快...这是未来信息… ---- 一个实际schedule函数 Linux 0.11调度函数schedule() kernel/sched.c schedule() 目的是找到下一个任务 next,切换到下一个任务

    74920

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

    有时用复杂算法求出进程当前优先级, 但最后结果是相同: 每个进程都与一个值(优先级)相关联, 这个值表示把进程如何适当地分配给CPU. 在linux中, 进程优先级是动态....2 linux进程分类 2.1 进程分类 当涉及有关调度问题时, 传统上把进程分类为”I/O受限(I/O-dound)”或”CPU受限(CPU-bound)”....), 也可能是CPU受限(比如图形绘制程序) 2.2 实时进程与普通进程 在linux中, 调度算法可以明确的确认所有实时进程身份, 但是没办法区分交互式程序和批处理程序(统称为普通进程), linux2.6...因此进程调度也包含了线程调度功能. linux进程调度算法其实经过了很多次演变, 但是其演变主要是针对与普通进程, 因为前面我们提到过根据进程不同分类Linux采用不同调度策略.实时进程和普通进程采用了不同调度策略...CFS调度linux-2.6~至今 4 Linux调度器设计 4 Linux调度器设计 2个调度器 可以用两种方法来激活调度 一种是直接, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性机制

    3.6K20

    linux进程调度

    假设当前CPU运行实时进程A优先级为a,而此时有个优先级为b实时进程B进入可运行状态,那么只要b<a,系统将中断A执行,而优先执行B,直到B无法执行(无论A,B为何种实时进程)。    ...总而言之,对于实时进程,高优先级进程先执行,它执行到没法执行了,才轮到低优先级进程执行。 2.非实时进程调度 Linux对普通进程,根据动态优先级进行调度。...Linux下,静态优先级是用户不可见,隐藏在内核中。...例如如果进程属于交互式进程,那么可以适当调高它优先级,使得界面反应地更加迅速,从而使用户得到更好体验。Linux2.6 在这方面有了较大提高。...Linux2.6认为,交互式进程可以从平均睡眠时间这样一个measurement进行判断。进程过去睡眠时间越多,则越有可能属于交互式进程。

    3.2K140

    Linux线程调度

    Linux中,线程是由进程来实现,线程就是轻量级进程( lightweight process ),因此在Linux中,线程调度是按照进程调度方式来进行调度,也就是说线程是调度单元...Linux这样实现线程好处之一是:线程调度直接使用进程调度就可以了,没必要再搞一个进程内线程调度器。...在Linux中,调度器是基于线程调度策略(scheduling policy)和静态调度优先级(static scheduling priority)来决定那个线程来运行。...下面介绍几种常见调度策略: SCHED_OTHER:该策略是是默认Linux分时调度(time-sharing scheduling)策略,它是Linux线程默认调度策略。...在Linux中,调度程序是一个叫schedule()函数,该函数调用频率很高,由它来决定是否要执行进程切换,如果要切换的话,切换到那个进程等。

    4.1K20

    linux进程调度

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

    8.1K20

    中断——操作系统进行CPU资源调度利器

    还在运行,因此程序A要中断运行直至程序B将数据返回给程序A,所以需要中断但是在操作系中,中断并不简单地用于程序之间通信,它对于CPU对于资源分配调度也有很大作用,如果一个程序不允许中断,那么它会一直独占...CPU,导致其他程序不能运行,这肯定不是我们希望看到,因此CPU在执行程序之前会开启中断保证CPU能够定时调度,让每个程序都可以有运行时间空间,比较典型例子就是在内核态到程序态转变,如果对这个不了解可以看我这篇文章...CPU能够抢占任务资源进行程序调度,使得CPU有运行多程序多进程能力中断产生问题我们知道,中断能够使得程序之间异步处理,提高运行效率,但是这里出现了一个问题,好比我们使用控制台输入命令,此时硬件设备正在等待我们输入指令...,使得缓冲区能够继续写入:由此可见,操作系统在底层处理不同程序因为中断导致异步调用是通过通信队列这种形式解决,而这种方式也使得程序之间无需有严格顺序上等待,让CPU能够在程序中断产生时充分调度CPU...资源,使得资源利用最大化好了,这就是有关于操作系统里中断全部讲解了,虽然中断并不会引起人们注意,可是它对CPU整个资源调度还是起关键作用,希望对你有所帮助,祝好!!!

    10710

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

    调度器面对情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行错觉, 该任务分为两个不同部分, 其中一个涉及调度策略, 另外一个涉及上下文切换. 1.2 进程分类 linux把进程区分为实时进程和非实时进程...2 O(n)调度算法 2.1 Linux2.4之前内核调度器 早期Linux进程调度器使用了最低设计,它显然不关注具有很多处理器大型架构,更不用说是超线程了。...2.2 Linux2.4调度器 2.2.1 概述 在Linux2.4.18中(linux-2.5)之前内核, 当很多任务都处于活动状态时, 调度器有很明显限制....Linux2.4调度器是如何提高交互式进程优先级呢?...与之前Linux调度器不同,CFS没有将任务维护在链表式运行队列中,它抛弃了active/expire数组,而是对每个CPU维护一个以时间为顺序红黑树。

    2.2K20

    Linux进程核心调度器之主调度器schedule--Linux进程管理与调度(十九)

    调度器 在内核中许多地方, 如果要将CPU分配给与当前活动进程不同另一个进程, 都会直接调用主调度器函数schedule, 从系统调用返回后, 内核也会检查当前进程是否设置了重调度标志TLF_NEDD_RESCHED...内核从cpu就绪队列中选择一个最合适进程来抢占CPU next = pick_next_task(rq); 全局pick_next_task函数会从按照优先级遍历所有调度器类pick_next_task...函数, 去查找最优那个进程, 当然因为大多数情况下, 系统中全是CFS调度非实时进程, 因而linux内核也有一些优化策略 其执行流程如下 如果当前cpu上所有的进程都是cfs调度普通非实时进程...prev是隶属于CFS普通非实时进程 * 而当前cpu全局就绪队列rq中进程数与cfs_rq进程数相等 * 则说明当前cpu所有进程都是由cfs调度普通非实时进程...内核中进程被堵塞时候 2 总结 2.1 schedule调度流程 schedule就是主调度函数, 在内核中许多地方, 如果要将CPU分配给与当前活动进程不同另一个进程, 都会直接调用主调度器函数

    3.8K31
    领券