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

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

Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...一、普通进程Linux 普通进程依赖称之为 nice 值 的东东来进行进程的优先级描述。nice 值的范围是 [-20, 19]。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程的优先级越小 任何实时进程的优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总的调度结构...Linux 调度时机 ---- 一、进程切换 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。...也可以用 pidstat -w 命令查看进程切换的每秒统计值: pidstat -w 1 Linux 3.10.0-229.14.1.el7.x86_64 (bj71s060) 02/01/2018

20.5K10

linux进程调度

进程提供了两种优先级,一种是普通的进程优先级,第二个是实时优先级。前者适用SCHED_NORMAL调度策略,后者可选SCHED_FIFO或SCHED_RR调度策略。...总而言之,对于实时进程,高优先级的进程先执行,它执行到没法执行了,才轮到低优先级的进程执行。 2.非实时进程调度 Linux对普通的进程,根据动态优先级进行调度。...Linux下,静态优先级是用户不可见的,隐藏在内核。...因为,不仅要考虑静态优先级,也要考虑进程的属性。例如如果进程属于交互式进程,那么可以适当的调高它的优先级,使得界面反应地更加迅速,从而使用户得到更好的体验。Linux2.6 在这方面有了较大的提高。...Linux2.6认为,交互式进程可以从平均睡眠时间这样一个measurement进行判断。进程过去的睡眠时间越多,则越有可能属于交互式进程

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

linux进程调度

调度策略 进程可以分为实时进程和普通进程,对于这两种不同类型的进程肯定有不同的调度策略,task_struct的policy就用来表示调度策略。...,还为每个进程的task_struct配有优先级,需要注意的是优先级数越小优先级越高,实时进程的优先级处于099之间,普通进程的优先级处于100139。...对于这些调度策略的执行逻辑都封装到task_struct的sched_class const struct sched_class *sched_class; seched_class的几个实现:...fair_sched_class:普通进程调度策略 CFS调度算法 CFS(completed fair Schedule)完全公平调度,适用于普通进程调度。...红黑树看做是一个队列,每次从中取进程。 完整调度 每颗cpu都有一个运行队列rq,这个队列又存在多个子队列例如rt_rq(实时运行队列),cfs_rq。

8K20

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

Linux进程调度 发展历史 Linux从2.5版本开始引入一种名为的调度器,后在2.6版本中将公平的的调度概念引入了调度程序,代替之前的调度器,称为算法(完全公平调度算法)。...Linux的抢占时机取决于新的可运行进程消耗了多少处理器使用比, 如果消耗的使用比当前进程小,则立刻投入运行,否则将推迟其运行。...Linux调度算法 调度器类 Linux调度器是以模块的方式提供的,这样使得不同类型的进程按照自己的需要来选择不同的调度算法。...睡眠和唤醒 睡眠和唤醒的流程在linux是这样的: 睡眠:进程将自己标记成休眠状态,然后从可执行红黑树移除,放入等待队列,然后调用选择和执行一个其他进程。...在Linux,只要重新调度是安全的,内核就可以在任何时间抢占正在执行的任务,这个安全是指,只要没有持有锁,就可以进行抢占。

14.7K113

Linux进程调度(三)

一、抢占式调度和主动调度: 前面我们说过,进程的切换总是通过 shedule 函数发生的,而 schedule 函数可以是在系统调用返回、中断返回等时机被调用,也可以进程在驱动程序主动调用 我们把在系统调用返回等时机调用...把进程在驱动程序主动调用 schedule 函数来发生进程切换的这种情况称为主动调度 本文将讨论主动调度,抢占式调度将在下一篇文章中讲解: 二、主动调度的发生的情况: 主动调度一般在应用程序读取某个设备时...又或者应用想读取按键,但是按键还没有被按下,此时驱动程序也会让进程睡眠,然后发生进程调度 在驱动程序,对应的实现如下: /* 网卡的驱动程序 */ tap_do_read(...) { ......} ... } 如果你看不懂 schedule 前的代码也没有关系,只需要知道那是进程睡眠前做的一些准备动作就行 真正的进程切换发生在 schedule 函数,调用 schedule 函数,会发生进程调度...第一件事是将通过调度类从运行队列挑选下一个运行的进程,第二件事是进行进程切换 进程切换会切换进程地址空间,重新加载页表,还有切换内核栈 进程切换涉及三个进程,新进程需要对上一个进程做一些清理工作 文章参考

2.3K10

Linux进程调度分析

linux实现公平调度基本上是两种思路: 1、给处于可执行状态的进程分配时间片(按照优先级),用完时间片的进程被放到“过期队列”。...有兴趣的朋友可以参考下面的链接: 《Linux 调度器发展简述》 《鼠眼看Linux调度器》 《鼠眼再看Linux调度器[1]》 《鼠眼再看Linux调度器[2]》 调度程序的效率 “优先级”明确了哪个进程应该被调度执行...调度程序跟内核的很多过程一样会频繁被执行,如果效率不济就会浪费很多CPU时间,导致系统性能下降。 在linux 2.4时,可执行状态的进程被挂在一个链表。...这样就大大提高了调度程序的效率,复杂度为O(1); 在linux 2.6近期的版本,可执行状态的进程按照优先级顺序被挂在一个红黑树(可以想象成平衡二叉树)。...每次调度调度程序需要从树找出优先级最高的进程。复杂度为O(logN)。 那么,为什么从linux 2.6早期到近期linux 2.6版本,调度程序选择进程时的复杂度反而增加了呢?

2.3K31

Linux内核】进程调度

Linux 提供了抢占式的多任务模式。在此模式下,由调度程序来决定什么时候停止一个进程的运行以便其他进程能够得到执行机会。这个强制的挂起动作就叫抢占(preemption)。...进程优先级 调度算法中最基本的类就是基于优先级的调度。 这是一种根据进程的价值和其对处理器时间的需求来对进程分级的想法。...优先级高的进程先运行,低的后运行,相同优先级的进程按轮转方式进行调度(一个接一个,重复进行)。在包括Linux在内的某些系统,优先级高的进程使用的时间片也较长。...从上面的争论可以看出,任何长时间片都将导致系统交互表现欠佳。很多操作系统中都特别重视这一点,所以默认的时间片很短如20毫秒。 注意,进程并不是一定非要一次就用完它所有的时间片。...进程抢占 像前面所说的,Linux 系统是抢占式的。当-个进程进入TASK_RUNNING状态,内核会检查它的优先级是否高于当前正在执行的进程

2.8K20

Linux进程调度学习!

Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...普通进程:在 Linux 普通进程依赖称之为 nice 值 的东东来进行进程的优先级描述。nice 值的范围是 [-20, 19]。...Linux 调度算法: Linux 中有一个总的调度结构,称之为 调度器类(scheduler class),它允许不同的可动态添加的调度算法并存,总调度器根据调度器类的优先顺序,依次去进行调度器类的进程进行调度...Linux 调度时机: 1、进程切换: 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。...也可以用 pidstat -w 命令查看进程切换的每秒统计值: pidstat -w 1 Linux 3.10.0-229.14.1.el7.x86_64 (bj71s060) 02/01/2018

1.8K30

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

有时用复杂的算法求出进程当前的优先级, 但最后的结果是相同的: 每个进程都与一个值(优先级)相关联, 这个值表示把进程如何适当地分配给CPU. 在linux, 进程的优先级是动态的....), 也可能是CPU受限的(比如图形绘制程序) 2.2 实时进程与普通进程linux, 调度算法可以明确的确认所有实时进程的身份, 但是没办法区分交互式程序和批处理程序(统称为普通进程), linux2.6...此外如何进程如果存在实时进程, 则实时进程总是在普通进程之前被调度 3 linux调度器的演变 一开始的调度器是复杂度为O(n)的始调度算法(实际上每次会遍历所有任务,所以复杂度为O(n)), 这个算法的缺点是当内核中有很多任务时...ca=drs-cn-0125 另外内核文档sched-design-CFS.txt也有介绍 字段 版本 O(n)的始调度算法 linux-0.11~2.4 O(1)调度linux-2.5.... linux针对当前可调度的实时和非实时进程, 定义了类型为seched_entity的3个调度实体 调度实体 名称 描述 对应调度器类 sched_dl_entity DEADLINE调度实体 采用

3.5K20

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

调度器的一般原理是, 按所需分配的计算能力, 向系统每个进程提供最大的公正性, 或者从另外一个角度上说, 他试图确保没有进程被亏待. 1.2 进程的分类 linux进程区分为实时进程和非实时进程,...并且他们的响应时间要尽可能的短 视频音频应用程序, 机器人控制程序以及从物理传感器上收集数据的程序 在linux, 调度算法可以明确的确认所有实时进程的身份, 但是没办法区分交互式程序和批处理程序,...当然与批处理进程相比, 调度程序有偏爱交互式进程的倾向 1.3 不同进程采用不同的调度策略 根据进程的不同分类Linux采用不同的调度策略....:调度框架(其实质就是两个函数框架)及调度器类 2.2 6种调度策略 linux内核目前实现了6调度策略(即调度算法), 用于对不同类型的进程进行调度, 或者支持某些特殊的功能 比如SCHED_NORMAL...(比如, 所有进程按照所有者分组)之间分配, 接下来分配的时间再在组内进行二次分配. linux针对当前可调度的实时和非实时进程, 定义了类型为seched_entity的3个调度实体 调度实体 名称

3.4K41

图解Linux进程调度(二)

优先级与调度策略: 在内核,肯定不能对所有的进程一视同仁,有的进程需要优先运行,有的进程需要运行更长的时间 为了更好地实现进程调度,每个进程都有自己的优先级和调度策略 所谓优先级,就是表示这个进程的重要性...想一想,进程调度其实是一个非常复杂的问题,想使用一种算法来实现良好的进程调度是不可能的,Linux内核实现了好几种调度算法。...所谓调度策略,你可以理解为使用哪种算法来管理进程 每个进程都使用 task_struct 结构来表示,在这个结构体,关于调度策略的定义如下: unsigned int policy; policy...内核在某时刻可以去唤醒某个进程,如果这个进程调度策略是SCHED_BATCH,那它就不会去抢占当前正在运行的进程 SCHED_IDLE:是用于特别空闲的进程使用的调度策略 讲完调度策略,我们来将优先级...,这四个变量之间的关系相当复杂,不过没关系,我会尽量地解释清楚: prio:动态优先级,进程调度判断一个进程的优先级都是使用此变量 normal_prio:这个变量也表示动态优先级,它表示正常的优先级

1.5K10

图解Linux进程调度(一)

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

1.3K20

Linux进程及其调度策略

Linux调度器需要负责做两件事:一件事是选择某些就绪的进程来执行;另一件事是打断某些执行进程,让它们变回就绪状态。不过,并不是所有的调度器都有第二个功能。...我们可以用命令nice来修改一个进程的默认优先级。例如有一个可执行程序叫app,执行命令: $nice -n -20 ./app 命令的-20指的是从默认优先级上减去20。...通过这个命令执行app程序,内核会将app进程的默认优先级设置成100,也就是普通进程的最高优先级。命令的-20可以被换成-20至19任何一个整数,包括-20 和 19。...先来看Linux 2.4内核推出的O(n)调度器。O(n)这个名字,来源于算法复杂度的大O表示法。大O符号代表这个算法在最坏情况下的复杂度。字母n在这里代表操作系统的活跃进程数量。...以上就是调度器的基本原理,以及Linux用过的几种调度策略。调度器可以更加合理地把CPU时间分配给进程。现代计算机都是多任务系统,调度器在多任务系统起着顶梁柱的作用。

2.3K20

Linux查看进程、杀死进程、进入进程命令

2.杀死进程    使用kill命令结束进程:kill xxx    常用:kill -9 324    Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:...# killall -9 NAME 进程杀死 HUP 1 控制的终端/程序中断 INT 2 键盘的插入指令(同 Ctrl + C) QUIT 3 键盘的中断指令(同 Ctrl + \) TERM...324的进程: #kill -9 324 (2)解除Linux系统的死锁 在Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。...(4)killall命令 Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如: # killall -HUP inetd *杀死进程最安全的方法是单纯使用kill...如下: # kill -HUP PID 该命令Linux和缓的执行进程关闭,然后立即重启。 *绝杀 kill -9 PID 同意的 kill -s SIGKILL 。

11.2K30

Linux 进程调度之schdule主调度

至于CFS调度算法的实现后面后专门写一篇文章,这里只要记住调度时选择一个优先级最高的任务执行 一、调度单位简介 1.1 task_struct 结构体简介 对于Linux内核来说,调度的基本单位是任务,...用 struct task_struct 表示,定义在include/linux/sched.h文件,这个结构体包含一个任务的所有信息,结构体成员很多,在这里我只列出与本章内容有关的成员: struct...3.唤醒不会真正马上调用schedule(),只是将一个任务添加到运行队列,设置任务标志位为TIF_NED_RESCHED,也就是将唤醒的进程加入的CFS就绪队列(将唤醒的进程调度实体加入到红黑树...具体请参考:Linux 进程调度通知机制 struct preempt_ops { void (*sched_in)(struct preempt_notifier *notifier, int cpu...,即一个运行进程主动调用 _schedule 让出 CPU,总结来说就是: (1)通过调度算法选择一个优先级最高的任务。

1.7K20

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

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

4.6K81

Linux进程调度-组调度及带宽控制

概述 组调度(task_group)是使用Linux cgroup(control group)的cpu子系统来实现的,可以将进程进行分组,按组来分配CPU资源等。...组调度就可以解决这个问题,分别将A、B用户进程划分成组,并将两组的权重设置成占比50%即可。...2. task_group 组调度,在内核是通过struct task_group来组织的,task_group本身支持cfs组调度和rt组调度,本文主要分析cfs组调度。...CFS调度器管理的是sched_entity调度实体,task_struct(代表进程)和task_group(代表进程组)中分别包含sched_entity,进而来参与调度; 关于组调度的相关数据结构...2.2 task_group权重 进程进程组都有权重的概念,调度器会根据权重来分配CPU的时间。

1.6K30

linux 进程调度器(下) -- 调度器演进

引言 通过此前的两篇文章,我们系统介绍了 linux 操作系统调度算法与其演进: linux 操作系统的进程调度(上) -- 进程调度的基本概念 linux 操作系统的进程调度) -- 进程调度算法的演进...本文,我们就来介绍 Linux 操作系统实际使用的进程调度器以及它们的演进。...O(n) 调度器 在早期的 linux 操作系统,2.4 版本到 2.6 版本之间,linux 采用了实现起来十分简单的 O(n) 调度器。...每当一个尚未分配时间片的进程出现在队列时,调度器都会为这个进程分配固定数量的时间片。...后记 本文介绍了 linux 操作系统调度器和调度算法的演进,这当然是非常大略的介绍,有兴趣还是建议去阅读相关的内核源码,这里包括对操作系统调度器实际使用的辅助性的数据结构的缺省,都是为了提高文章可读性的需要

2K20
领券