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

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

内核在微观上,把CPU的运行时间分成许多分,然后安排给各个进程轮流运行,造成宏观上所有的进程仿佛同时在执行。...双核CPU,实际上最多只能有两个进程在同时运行,大家在top、vmstat命令里看到的正在运行的进程,并不是真的在占有着CPU哈。...CPU时间片了。...换句话说,内核是偏心的,它喜欢的是IO消耗型进程,因为这类进程如果不能及时响应,用户就会很不爽,所以它总会下意识的多分配CPU运行时间给这类进程。而CPU消耗进程内核就不太关心了。这有道理吗?...很简单,如果CPU用得多的进程,就把nice值调高点,等价于优先级调低点。CPU用得少的进程,认为它是交互性为主的进程,则会把nice值调低点,也就是优先级调高点。

6.5K40

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

Linux是一个支持多任务的操作系统,而多个任务之间的切换是通过 调度器 来完成,调度器 使用不同的调度算法会有不同的效果。...Linux2.4版本使用的调度算法的时间复杂度为O(n),其主要原理是通过轮询所有可运行任务列表,然后挑选一个最合适的任务运行,所以其时间复杂度与可运行任务队列的长度成正比。...而Linux2.6开始替换成名为 O(1)调度算法,顾名思义,其时间复杂度为O(1)。...虽然在后面的版本开始使用 CFS调度算法(完全公平调度算法),但了解 O(1)调度算法 对学习Linux调度器还是有很大帮助的,所以本文主要介绍 O(1)调度算法 的原理与实现。...每个CPU都需要维护一个 runqueue 结构,runqueue 结构主要维护任务调度相关的信息,比如优先队列、调度次数、CPU负载信息等。

4.6K81
您找到你想要的搜索结果了吗?
是的
没有找到

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

CPU调度,决定了CPU执行进程的策略,好的调度policy需要兼顾进程首次被调度的等待时间和进程结束执行的等待时间,因此在算法设计上极其精妙。本章完全Copy自OSTEP,介绍了基础的调度算法。...,按照剩余时间进行调度(可以看作把job分割) Metric II 首次被调度等待的时间 Round Robin 时间切片,每次切片都轮换所有进程。...更慢,因此CPU需要等待I/O完成,此时CPU处于闲置,因此可以Switch给其他进程。...,尽可能优化 以历史预测未来(这个思想在很多算法中都有使用,隔壁线性分配的内存再分配算法里也用了 ,此外还有cache,hardware branch)。...---- 疑惑 首次被调度等待的时间 Round Robin 时间切片,每次都轮换所有进程。

1.1K40

几种CPU调度策略

那么,面对诸多的场景,如何设计调度算法呢? 首先,我们要明白我们的算法应该让什么更好呢?面对客户:银行调度算法的设计目标应该是用户满意;而面对进程:CPU调度的目标应该是进程满意。...由此,产生了以下一些CPU调度算法。 各种CPU调度算法 1.First Come,First Served(FCFS) 就是先来先服务的调度算法,哪个任务先进来,就为哪个任务先服务。 ?...我们可以尝试着把短任务提前,短任务提前了,减少以短任务为主的系统的平均周转时间,由此我们产生了短作业优先的CPU调度算法。...等等这些问题到现在都在疯狂地探讨和研究当中,有兴趣向这方面进行深入了解的可以阅读相关文献,或者阅读以下linuxCPU调度算法源码。...单单一个CPU调度算法就要考虑这么多东西了,可以看到,我们的操作系统真的是人类的一项很伟大的发明。

5.1K10

Linux 完全公平调度算法

Linux 进程调度算法经历了以下几个版本的发展: 基于时间片轮询调度算法。(2.6之前的版本) O(1) 调度算法。(2.6.23之前的版本) 完全公平调度算法。...(2.6.23以及之后的版本) 之前我写过一篇分析 O(1)调度算法 的文章:O(1)调度算法,而这篇主要分析 Linux 现在所使用的 完全公平调度算法。...为了解决上面两个问题,Linux内核的开发者创造了 完全公平调度算法。...完全公平调度的两个对象 Linux 内核为了实现 完全公平调度算法,定义两个对象:cfs_rq (可运行进程队列) 和 sched_entity (调度实体)。...完全公平调度算法实现 有了上面的基础,现在可以开始分析 Linux 内核中怎么实现 完全公平调度算法 了。 我们先来看看怎么更新一个进程的虚拟运行时间。 1.

1.3K20

linux进程调度算法-Completely Fair Scheduler

从多个可用的可运行任务中一次选择一个任务的算法称为调度器,选择下一个任务的过程称为调度调度程序是任何操作系统最重要的组件之一。由于几个原因,实现调度算法很困难。...调度算法必须在所有这些相互竞争的需求之间取得平衡。 像大多数现代操作系统一样,Linux 是一个多任务操作系统,因此它有一个调度程序。 Linux 调度程序随着时间的推移而发展。 1....O(1) 调度器 随着内核 2.6 的发布,Linux 调度程序被彻底改革。这个新的调度器被称为 O(1) 调度器——O(…) 被称为“大 O 表示法”。...选择这个名称是因为调度程序的算法需要恒定的时间来做出调度决策,而不管任务数量如何。 O(1) 调度器使用的算法依赖于活动和过期的进程数组来实现恒定的调度时间。...调度类/模块化调度器 在内核 2.6.23 中,Linux 调度程序也已模块化。每个调度策略(SCHED_FIFO、SCHED_RR、SCHED_OTHER 等)都可以独立于基本调度程序代码实现。

1.2K10

探索CPU调度原理

其实,基于时间片的调度只是众多CPU调度算法的一类,本文将会从最基础的调度算法说起,逐个分析各种主流调度算法的原理,带大家一起探索CPU调度的奥秘。...假设4:所有任务只使用CPU资源(比如不产生I/O操作)。 假设5:预先知道所有任务的运行时长。 准备工作已经做好,下面我们开始进入CPU调度算法的奇妙世界。...接下来,我们将介绍一个能够在所有工作负载假设被打破的情况下依然表现良好,被许多现代操作系统采用的CPU调度算法,MLFQ。...CFS:Linux的完全公平调度 本节我们将介绍一个平时打交道最多的调度算法Linux系统下的CFS(Completely Fair Scheduler,完全公平调度)。...写在最后 本文花了很长的篇幅讲解了几种常见CPU调度算法的原理,每种算法都有各自的优缺点,并不存在一种完美的调度策略。

75040

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

虽然Linux系统似乎通过多任务同时运行多个进程,但当多个进程在单个CPU上同时运行时,是通过交替执行这些进程实现的。...要快速确定下一个进程并确保公平性、响应性、可预测性和可扩展性,操作系统通常会采用调度算法。内核通过进程调度器决定哪个进程在特定的时间运行。 一个常用的满足这些要求的算法是基于优先级的抢占式调度算法。...进程优先级认知 Linux 系统中调度器基于调度策略和调度优先级决定进程执行的顺序。...带时间片的轮询算法,每个进程耗尽自己的时间片让出CPU重新排队. ps o cls的输出结果为RR 对于实时调度策略的任务而言,内核不会计算动态优先级。...sched_rr_timeslice_ms sched_rr_timeslice_ms是一个用于定义轮转调度算法(RR)的变量。它指定了当一个进程被执行后,再次被抢占并返回到CPU队列的时间。

28920

处理器调度一、CPU调度的相关概念三、批处理系统中常用的调度算法四、交互式系统的调度算法五、多级反馈队列调度算法(重点)七、多处理器调度算法设计

一、CPU调度的相关概念 1.1 cpu调度 其任务是控制、协调进程对cpu的竞争,即按一定的调度算法从就绪队列中选择一个进程,把cpu的使用权交给被选中的进程。...1.3 cpu调度要解决的三个问题 1、按什么原则选择下一个要执行的进程:调度算法 2、何时进行选择:调度时机 3、如何让被选中的进程上cpu中运行:调度过程(进程的上下文切换) 1.3.1 调度的时机...1.3.3 cpu调度算法的设计 什么情况下需要仔细斟酌调度算法? 批处理系统-->多道程序设计系统-->批处理与分时的混合系统-->个人计算机-->网路服务器。...各种调度算法的比较 七、多处理器调度算法设计 不仅要决定选择哪一个进程执行,还需要决定在哪一个cpu上执行 要考虑进程在多个cpu之间迁移时的开销 1、高速缓存失效、TLB失效 2、尽可能使进程总是在同一个...考虑负载均衡问题 7.1 典型系统所采用的调度算法 UNIX: 动态优先数法 BSD5.3:多级反馈队列法 Linux:抢占式调度 Windows:基于优先级的抢占式多任务调度 Solaris:综合调度算法

2.3K80

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

引言 上一篇文章中,我们介绍了内核调度的基本概念,知道了调度器设计中最核心的两个指标 -- 周转时间与响应时间: linux 操作系统的进程调度(上) -- 进程调度的基本概念 本文,我们就继续顺着上文的思路...时间片轮转算法 RR Round-Robin 算法是现代操作系统调度器诞生的基石。它按照 CPU 时钟芯片产生的若干个时钟脉冲为单位,将 CPU 时间进行切分,每个分片就是 CPU 调度的时间片。...CPU,实现了调度算法的公平性。...如果进程是 IO 密集型,那么就频繁调度,但每次调度给与少量时间片。 如果进程是 CPU 密集型,那么就降低调度频率,但每次调度过于多个时间片。...下一篇文章,我们就来深入 linux,来了解具体的 linux 进程调度器的发展历史和实现机制,敬请期待。

1.6K10

进程调度算法设计_三种调度算法

(3)进程调度算法 进程调度算法用于确定就绪队列中的哪一个进程即将获得CPU。常用的进程调度算法有先来先服务法、时间片轮转法、优先数法等。...采用这种算法时,应该这样来管理就绪队列:到达的进程的PCB总是排在就绪队列末尾;调度程序总是把CPU分配给就绪队列中的第一个进程使用。...在所等待的事件出现时,仍回到原队列末尾,参与下一轮调度(也就是每个队列实行先来先服务调度算法);如果用完了时间片还没有完成自己的工作,那么只能放弃对CPU的使用,降到低一级队列的末尾,参与那个队列的调度...可以看出,多级队列调度算法优先照顾I/O繁忙的进程。I/O繁忙的进程在获得一点CPU时间后就会提出输入/输出请求,因此它们总是被保持在1、2级等较前面的队列中,总能获得较多的调度机会。...对于CPU繁忙的进程,它们需要较长的CPU时间,因此会逐渐地由级别高的队列往下降,以获得更多的CPU时间,它们“沉”得越深,被调度到的机会就越少。但是,一旦被调度到,就会获得更多的CPU时间。

1K10

常用进程调度算法_进程调度算法例题

但“剥夺”不是一种任意的行为,必须遵循一定的原则,主要有优先权、段进程优先和时间片原则等 调度的基本评价准则 CPU利用率 系统吞吐量:单位时间内CPU完成作业的数量 周转时间:作业完成时间 – 作业提交时间...FCFS 调度算法的特点是算法简单,但效率低;对长作业比较有利,但对短作业不利(相对SPF和高响应比);有利于CPU繁忙型作业,而不利于I/0繁忙型作业。...【跨考解答】:为什么CPU繁忙型是长作业,因为长短是使用CPU的长短,I/O繁忙型使用CPU比较短。...动态调整优先级的主要依据有进程占有CPU 时间的长短、就绪进程等待CPU 时间的长短。 一般来说,进程优先级的设置可以参照以下原则: 系统进程>用户进程。...I/0 型进程>计算(CPU)型进程。

1.3K11

磁盘调度算法

平均寻道长度 平均寻道长度是磁盘调度算法的性能指标之一,用于评估磁头在访问磁盘上的数据时的平均移动距离。...最短寻道时间优先(SSTF)算法: 平均寻道长度 = 所有相邻磁道移动距离之和 / 磁头移动的请求数量 扫描算法 对于扫描算法,其平均寻道长度计算方法如下: 假设有n个请求,分别位于不同的楼层...先来先服务算法(FCFS) 根据进程请求访问磁道的先后顺序进行调度 优点:对每个进程都是公平的 缺点:请求访问的磁盘很分散的话,性能很差,寻道时间长 例题: 假设磁头的初始位置是100号磁道,有多个进程先后陆续地请求访问...(SCAN)(电梯调度算法) 由于最短寻道时间优先算法会产生饥饿现象。...扫描算法优先考虑的磁头当前移动方向,若磁头自里向外移动时,扫描算法考虑下一个访问对象应是其欲访问的磁道即在当前磁道之外,又距离最近。这样避免“饥饿”,又称电梯调度算法

30940

进程调度算法;先来先服务调度算法、短作业优先调度算法、时间片轮转调度算法「建议收藏」

了解进程调度算法的特点 2....掌握进程调度算法,如先来先服务调度算法(first come first served,FCFS)、短作业优先调度算法(shotjob first,SJF)、时间片轮转调度算法。...二、 实验内容 设计模拟实现FCFS、SJF、时间片轮转调度算法的C语言程序 1. FCFS算法:按照作业/进程进入队列的先后顺序进行挑选,先进入的将先进行后续步骤的处理。 2....SJF算法:以进入系统的作业所要求的CPU运行时间的长短为挑选依据,优先选取预计所需服务时间最短的作业进行调度,可以分别用于高级调度和低级调度。 3....: 短作业优先调度算法: 时间片轮转调度算法: 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

1.8K20

进程调度算法

先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度, 也可用于进程调度。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。...由此可知,本算法适合于CPU繁忙型作业, 而不利于I/O繁忙型的作业(进程)。 2. 短进程优先调度算法 2. 短作业(进程)优先调度算法。...短作业(进程)优先调度算法(SJ/PF)是指对短作业或短进程优先调度算法,该算法既可用于作业调度, 也可用于进程调度。...基于时间片的轮转调度算法 1. 时间片轮转法。时间片轮转法一般用于进程调度,每次调度,把CPU分配队首进程,并令其执行一个时间片。...多级反馈队列调度算法 多级反馈队列调度算法多级反馈队列调度算法,不必事先知道各种进程所需要执行的时间,它是目前被公认的一种较好的进程调度算法

1K20

进程调度算法

一、进程调度算法的评价指标 cpu利用率: 利用率=cpu忙碌时间/总时间 系统吞吐量: 系统吞吐量=总共完成了多少道作业/总共花费的时间 周转时间: 周转时间: 周转时间=作业完成时间...(早期批处理系统) Tips:各种调度算法的学习思路 算法思想 算法规则 这种调度算法是用于**作业调度**还是**进程调度**?...\*\*\*如果时间片太大\*\*\*,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法\*\*退化为先来先服务\*\*调度算法,并且会\*\*增大进程响应时间\*\*。...优先级调度算法 \*\*\*算法规则:\*\*\*每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程 \*\*\*抢占式的优先级调度算法:\*\*\*每次调度时选择\*\*当前已到达...+ 注:与I/O型进程相对的是\*\*计算型进程(或称CPU繁忙型进程)\*\* [image-20200325171035937] 3.

1.9K00

LVS调度算法

内核中的连接调度算法 IPVS在内核中的负载均衡调度是以连接为粒度的。...在内核中的连接调度算法上,IPVS已实现了以下八种调度算法: 轮叫调度(Round-Robin Scheduling) 加权轮叫调度(Weighted Round-Robin Scheduling) 最小连接调度...当请求的服务时间变化很大,单独的加权轮叫调度算法依然会导致服务器之间负载不平衡 3、最小连接调度算法是将新的连接请求分配到当前连接数最小的服务器,最小调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况...在这一轮查找中是个常数,所以判断条件可以简化为 C(Sm) / W(Sm) = min { C(Si) / W(Si)} (i=0, 1, . , n-1) 其中W(Si)不为零 因为除法所需的CPU...周期比乘法多,且在Linux内核中不允许浮点除法,服务器的 权值都大于零,所以判断条件C(Sm) / W(Sm) > C(Si) / W(Si) 可以进一步优化 为C(Sm)*W(Si) > C(Si)

1.3K100
领券