首页
学习
活动
专区
工具
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.1K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    探索CPU调度原理

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

    85840

    几种CPU调度策略

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

    5.3K10

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

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

    6.8K40

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

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

    20.6K10

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

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

    75420

    基于调度 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

    9K30

    调度器简介,以及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,切换到下一个任务

    73420

    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.5K20

    linux进程调度

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

    3.2K140

    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

    Linux线程调度

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

    4.1K20

    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.7K31

    Linux进程线程及调度

    本文为宋宝华《Linux进程、线程以及调度》学习笔记。 1 进程概念 1.1 进程与线程定义 操作系统中经典定义: 进程:资源分配单位。 线程:调度单位。...6) 共享内存 需要通信进程间共享一块内存进行数据交换。 2 进程线程实现本质 Linux调度器实际是识别task_struct进行调度。...每个线程都有自己task_struct,因为每个线程可被CPU调度。多线程间又共享同一进程资源。这两点刚好满足线程定义。 Linux就是这样用进程实现了线程,所以线程又称为轻量级进程。...进程动态优先级则是根据静态优先级实时计算出来调度算法奖励IO消耗性(调高优先级增加实时性)、处罚CPU消耗型(调低优先级减小实时性) 3.2.2 CFS:完全公平调度(新内核) 红黑树,左边节点小于右边节点值...运行到目前为止vruntime最小进程 同时考虑了CPU/IO和nice 总是找vruntime最小线程调度

    4.1K41
    领券