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

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

CPU调度,决定了CPU执行进程的策略,好的调度policy需要兼顾进程首次被调度的等待时间和进程结束执行的等待时间,因此在算法设计上极其精妙。本章完全Copy自OSTEP,介绍了基础的调度算法。...执行后必须执行到底,无法优化 条件三 假设条件3取消,可以进行Process Switch Shortest Time-to-Completion First (STCF) 每次新job进入,重新进行调度...,按照剩余时间进行调度(可以看作把job分割) Metric II 首次被调度等待的时间 Round Robin 时间切片,每次切片都轮换所有进程。...更慢,因此CPU需要等待I/O完成,此时CPU处于闲置,因此可以Switch给其他进程。...---- 疑惑 首次被调度等待的时间 Round Robin 时间切片,每次都轮换所有进程。

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

    几种CPU调度策略

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

    5.4K10

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

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

    6.9K40

    探索CPU调度原理

    说起CPU调度原理,很多人的第一反应是基于时间片的调度,也即每个进程都有占用CPU运行的时间片,时间片用完之后,就让出CPU给其他进程。...其实,基于时间片的调度只是众多CPU调度算法的一类,本文将会从最基础的调度算法说起,逐个分析各种主流调度算法的原理,带大家一起探索CPU调度的奥秘。...CPU的上下文切换 在探索CPU调度原理之前,我们先了解一下CPU的上下文切换,它是CPU调度的基础。 如今的OS几乎都支持"同时"运行远大于CPU数量的任务,OS会将CPU轮流分配给它们使用。...CFS:Linux的完全公平调度 本节我们将介绍一个平时打交道最多的调度算法,Linux系统下的CFS(Completely Fair Scheduler,完全公平调度)。...给任务分配权重 有时候,我们希望给系统中某个重要的业务进程多分配些时间片,而其他不重要的进程则少分配些时间片。

    87940

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

    写在前面 考试整理,博文内容涉及: CPU 调度简单认知 不同进程优先级和不同调度策略认知 CPU调度内核调度可调参数介绍 理解不足小伙伴帮忙指正 人生不是书上的故事,喜怒哀乐,悲欢离合,都在书页间,可书页翻篇何其易...虽然Linux系统似乎通过多任务同时运行多个进程,但当多个进程在单个CPU上同时运行时,是通过交替执行这些进程实现的。...进程优先级认知 Linux 系统中调度器基于调度策略和调度优先级决定进程执行的顺序。...了解优先级之前先简单了解下调度策略,Linux 调度策略分为两组: 非实时策略(non-real-time policies)适用于大多数通用计算系统和应用程序。...PS命令查看调度策略和优先级: pri是静态优先级,rtprio是实时优先级,ni是nice值(动态优先级),cls是调度策略,其中TS代表非实时策略,FF代表实时策略 进程优先级限制 可以通用 Linux

    88020

    限定某个目录禁止解析php+限制 user_agent

    限定某个目录禁止解析php : 实例解析: 有这样一种情况,有些站点和论坛是允许上传图片到服务器,但是这就给黑客留下了可进入服务器的大门,他们上传一些php或者js到服务器,然后被我们执行加载,有些函数可以让黑客获取最大的权限...---- 限制 user_agent : User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、...*baidu.com.* [NC] RewriteRule .* - [F] // F:Forbidden 禁止 只要使用curl和baidu.com来攻击,就会直接也不跳转了,就直接禁止!...2017:14:15:37 +0800] "HEAD HTTP://www.test3.com/ HTTP/1.1" 200 - "-" "haha browser" ---- 实用扩展: apache 禁止

    2.8K70

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

    Linux进程调度 发展历史 Linux从2.5版本开始引入一种名为的调度器,后在2.6版本中将公平的的调度概念引入了调度程序,代替之前的调度器,称为算法(完全公平调度算法)。...为了保证交互式应用和桌面系统的性能,一般Linux更倾向于优先调度I/O消耗型进程。 进程优先级 Linux采用了两种不同的优先级范围。 使用nice值:越大的nice值意味着更低的优先级。...时间片:Linux中并不是以固定的时间值(如10ms)来分配时间片的,而是将处理器的使用比作为“时间片”划分给进程。这样,进程所获得的实际CPU时间就和系统的负载密切相关。...Linux调度算法 调度器类 Linux调度器是以模块的方式提供的,这样使得不同类型的进程按照自己的需要来选择不同的调度算法。...为此,内核为每个进程设置了一个标志来表明是否需要重新执行一次调度,当某个进程应该被抢占时,会设置这个标志,当一个优先级高的进程进入可执行状态的时候,也会设置这个标志位,内核检查到此标志位就会调用重新进行调度

    14.9K113

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

    操作系统CPU调度策略---07 多进程图像与CPU调度 CPU调度(进程调度)的直观想法 面对诸多场景,如何设计调度算法? 如何做到合理?...如果一直有前台任务… 还有很多问题… 一个实际的schedule函数 Linux 0.11的调度函数schedule() counter的作用: 时间片 counter的另一个作用: 优先级 counter...然后,前台任务队列的执行优先级要高于后台任务队列 ---- 如果一直有前台任务… 上面给出的场景,可能会导致后台任务队列中某个进程饥饿,长期捞不到CPU资源。...为了解决后台进程饥饿的问题,采用了后台任务优先级动态升高的策略,但是一旦某个后台任务捞到了CPU资源,但是该后台任务会持续执行,那么此时前台任务就会迟迟得不到响应。...这是未来的信息… ---- 一个实际的schedule函数 Linux 0.11的调度函数schedule() kernel/sched.c schedule() 的目的是找到下一个任务 next,切换到下一个任务

    74920

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

    Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程的优先级越小 任何实时进程的优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总的调度结构...Linux 调度时机 ---- 一、进程切换 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。...发生进程切换的场景有以下三种: 1、进程运行不下去了: 比如因为要等待IO完成,或者等待某个资源、某个事件,典型的内核代码如下: //把进程放进等待队列,把进程状态置为TASK_UNINTERRUPTIBLE...抢占(Preemption)是指内核强行切换正在CPU上运行的进程,在抢占的过程中并不需要得到进程的配合,在随后的某个时刻被抢占的进程还可以恢复运行。

    20.7K10

    linux进程调度

    前者适用SCHED_NORMAL调度策略,后者可选SCHED_FIFO或SCHED_RR调度策略。...假设当前CPU运行的实时进程A的优先级为a,而此时有个优先级为b的实时进程B进入可运行状态,那么只要b<a,系统将中断A的执行,而优先执行B,直到B无法执行(无论A,B为何种实时进程)。    ...2.非实时进程的调度 Linux对普通的进程,根据动态优先级进行调度。而动态优先级是由静态优先级(static_prio)调整而来。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中,在什么情况下要执行这个调度程序呢?我们把这种情况叫作调度时机。

    4.1K20

    linux进程调度

    调度策略 进程可以分为实时进程和普通进程,对于这两种不同类型的进程肯定有不同的调度策略,task_struct中的policy就用来表示调度策略。...fair_sched_class:普通进程的调度策略 CFS调度算法 CFS(completed fair Schedule)完全公平调度,适用于普通进程调度。...se; //完全调度实体 struct sched_rt_entity rt; // 实时调度实体 struct sched_dl_entity dl; // deadline调度实体 CFS算法中将...完整调度 每颗cpu都有一个运行队列rq,这个队列中又存在多个子队列例如rt_rq(实时运行队列),cfs_rq。...当cpu需要一个任务执行时,其会先按照优先级选择不同的调度类,不同的调度类操作不同的队列,例如rt_sched_class先被调用,其会在rt_rq中找下一个任务,只有找不到时才轮到fair_sched_class

    8.1K20

    Node节点禁止调度(平滑维护)方式- cordon,drain,delete

    cordon、drain和delete三个命令都会使node停止被调度,后期创建的pod不会继续被调度到该节点上,但操作的暴力程度却不一样。...一、cordon 停止调度(不可调度,临时从K8S集群隔离) 影响最小,只会将node标识为SchedulingDisabled不可调度状态。 之后K8S再创建的pod资源,不会被调度到该节点。...禁止调度命令"kubectl cordon node_name"。 恢复调度命令"kubectl uncordon node_name"。...禁止调度命令"kubectl drain node_name --force --ignore-daemonsets --delete-local-data" 恢复调度命令"kubectl uncordon...drain禁止调度的操作步骤: 确定要排空的节点的名称 # kubectl get nodes 查看pod # kubectl get po 命令node节点开始释放所有pod,并且不接收新的pod

    3.4K40

    基于调度器的 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
    领券