linux进程调度策略详解

linux内核学习9:Linux的进程调度 一、什么是进程调度 出现背景: 无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。 进程调度,是确保进程能有效工作的一个内核子系统。 调度程序负责决定将哪些进程投入到运行,何时进行以及运行多长时间。 进程调度程序(通常简称为调度程序)可看成是可运行态进程之间分配有限的处理器时间资源的内核子系统。 进程调度是对TASK_RUNNING状 阅读详情

Linux进程的进程级别分类

  1. 普通进程
  2. 实时进程

实时进程的优先级都高于普通进程,除此之外,它们的调度策略也有所不同。

实时进程

  1. 硬实时

实时,原本的涵义是“给定的操作一定要在确定的时间内完成”。重点并不在于操作一定要处理得多快,而是时间要可控(在最坏情况下也不能突破给定的时间)。
这样的“实时”称为“硬实时”,多用于很精密的系统之中(比如什么火箭、导弹之类的)。一般来说,硬实时的系统是相对比较专用的。

  1. 软实时

linux实现的是“软实时”,即尽可能地满足进程的实时需求。

实施进程的调度

优先级策略

如果一个进程有实时需求(它是一个实时进程),则只要它是可执行状态的,内核就一直让它执行,以尽可能地满足它对CPU的需要,直到它完成所需要做的事情,然后睡眠或退出(变为非可执行状态)。
而如果有多个实时进程都处于可执行状态,则内核会先满足优先级最高的实时进程对CPU的需要,直到它变为非可执行状态。
于是,只要高优先级的实时进程一直处于可执行状态,低优先级的实时进程就一直不能得到CPU;只要一直有实时进程处于可执行状态,普通进程就一直不能得到CPU。

如果多个相同优先级的实时进程都处于可执行状态呢?这时就有两种调度策略可供选择

先进先出策略

SCHED_FIFO:先进先出。直到先被执行的进程变为非可执行状态,后来的进程才被调度执行。在这种策略下,先来的进程可以执行sched_yield系统调用,自愿放弃CPU,以让权给后来的进程;

轮转策略

SCHED_RR:轮转。内核为实时进程分配时间片,在时间片用完时,让下一个进程使用CPU;

再次强调一下,这两种调度策略仅仅针对于相同优先级的多个实时进程同时处于可执行状态的情况

在linux下,用户程序可以通过sched_setscheduler系统调用来设置进程的调度策略以及相关调度参数;sched_setparam系统调用则只用于设置调度参数。这两个系统调用要求用户进程具有设置进程优先级的能力(CAP_SYS_NICE,一般来说需要root权限)
通过将进程的策略设为SCHED_FIFO或SCHED_RR,使得进程变为实时进程。而进程的优先级则是通过以上两个系统调用在设置调度参数时指定的。

对于实时进程,内核不会试图调整其优先级。因为进程实时与否?有多实时?这些问题都是跟用户程序的应用场景相关,只有用户能够回答,内核不能臆断。
综上所述,实时进程的调度是非常简单的。进程的优先级和调度策略都由用户定死了,内核只需要总是选择优先级最高的实时进程来调度执行即可。唯一稍微麻烦一点的只是在选择具有相同优先级的实时进程时,要考虑两种调度策略。

普通进程的调度

实时进程调度的中心思想是,让处于可执行状态的最高优先级的实时进程尽可能地占有CPU,因为它有实时需求;而普通进程则被认为是没有实时需求的进程,于是调度程序力图让各个处于可执行状态的普通进程和平共处地分享CPU,从而让用户觉得这些进程是同时运行的。与实时进程相比,普通进程的调度要复杂得多。内核需要考虑两件麻烦事:

##动态调整进程的优先级

按进程的行为特征,可以将进程分为“交互式进程”和“批处理进程”:

  • 交互式进程

如桌面程序、服务器、等,主要的任务是与外界交互。这样的进程应该具有较高的优先级,它们总是睡眠等待外界的输入。而在输入到来,内核将其唤醒时,它们又应该很快被调度执行,以做出响应。比如一个桌面程序,如果鼠标点击后半秒种还没反应,用户就会感觉系统“卡”了;

  • 批处理进程

如编译程序,主要的任务是做持续的运算,因而它们会持续处于可执行状态。这样的进程一般不需要高优先级,比如编译程序多运行了几秒种,用户多半不会太在意;

如果用户能够明确知道进程应该有怎样的优先级,可以通过nice、setpriority系统调用来对优先级进行设置。(如果要提高进程的优先级,要求用户进程具有CAP_SYS_NICE能力。)

然而应用程序未必就像桌面程序、编译程序这样典型。程序的行为可能五花八门,可能一会儿像交互式进程,一会儿又像批处理进程。以致于用户难以给它设置一个合适的优先级。
再者,即使用户明确知道一个进程是交互式还是批处理,也多半碍于权限或因为偷懒而不去设置进程的优先级。(你又是否为某个程序设置过优先级呢?)

于是,最终,区分交互式进程和批处理进程的重任就落到了内核的调度程序上。

调度程序关注进程近一段时间内的表现(主要是检查其睡眠时间和运行时间),根据一些经验性的公式,判断它现在是交互式的还是批处理的?程度如何?最后决定给它的优先级做一定的调整。

进程的优先级被动态调整后,就出现了两个优先级:

  • 用户程序设置的优先级(如果未设置,则使用默认值),称为静态优先级。这是进程优先级的基准,在进程执行的过程中往往是不改变的;
  • 优先级动态调整后,实际生效的优先级。这个值是可能时时刻刻都在变化的;

##调度的公平性

在支持多进程的系统中,理想情况下,各个进程应该是根据其优先级公平地占有CPU。而不会出现“谁运气好谁占得多”这样的不可控的情况。

linux实现公平调度基本上是两种思路:

  • 给处于可执行状态的进程分配时间片(按照优先级),用完时间片的进程被放到“过期队列”中。等可执行状态的进程都过期了,再重新分配时间片;

  • 动态调整进程的优先级。随着进程在CPU上运行,其优先级被不断调低,以便其他优先级较低的进程得到运行机会;
    后一种方式有更小的调度粒度,并且将“公平性”与“动态调整优先级”两件事情合而为一,大大简化了内核调度程序的代码。因此,这种方式也成为内核调度程序的新宠。

强调一下,以上两点都是仅针对普通进程的。而对于实时进程,内核既不能自作多情地去动态调整优先级,也没有什么公平性可言

无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。

这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。

请关注我的订阅号

订阅号.png

Linux进程优先级管理与调度策略详解 进程优先级是操作系统资源分配的核心机制,通过数值化标识决定CPU时间片的获取顺序。Linux采用动态优先级(0-99实时任务)和静态nice值(100-139普通任务)的双轨制,其中实时优先级数值越大优先级越高,而nice值则相反。通过nice()、setpriority()等系统调用可以调整进程调度权重,而sched_setscheduler()则专用于实时任务管理。合理设置优先级能有效解决多媒体处理时的资源竞争问题,并预防实时系统中的优先级反转现象。结合cgroups和chrt等工具,开发者可以优化视频 阅读详情

相关推荐

Linux进程调度策略详解与性能调优实战

进程调度是操作系统核心功能,决定了CPU资源的分配效率。Linux采用完全公平调度器(CFS)和实时调度策略相结合的方式,通过红黑树管理进程队列,实现O(logN)时间复杂度的高效调度。CFS调度器基于虚拟运行时间(vruntime)确保公平性,而实时调度策略(SCHED_FIFO/SCHED_RR)则满足低延迟需求。合理配置调度策略能显著提升数据库、音视频处理等场景的性能,如通过nice值调整进程优先级,或使用chrt设置实时策略。在生产环境中,需特别注意实时进程可能导致系统锁死的问题,建议通过cgrou

weixin_30702441的博客 281

DAY10-进程优先级与调度策略

SCHED_OTHER: 不支持优先级使用,而SCHED_RR/SCHED_FIFO支持优先级使用,他们分别为1-99, 数值越大,优先级越高。普通调度策略(SCHED_NORMAL/SCHED_BATCH/SCHED_IDLE),始终返回0,即普通任务调度的函数。//获取实时优先级的最大值。//获取实时优先级的最小值。

qiubinwei的博客 215

Linux应用程序设置进程调度策略

在用户空间,调用sched_setscheduler()函数,函数原型如下: int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param); 参数说明: pid:

别来几向梦中看 梦觉尚心寒 3009

linux进程的调度

进程状态 进程主要有7种状态:就绪状态、运行状态、轻度睡眠、中度睡眠、深度睡眠、僵尸状态、死亡状态。它们之间状态变迁如下: 进程描述符task_struct结构体中有个成员state专门用来描述进程的状态。 就绪状态:state为TASK_RUNNING,正在运行队列中等待调度器调度。 运行状态:state为TASK_RUNNING,被调度器命中,正在处理器中运行。 轻度睡眠:称为可打断的睡眠状态。state为TASK_INTERRUPTIBLE,可以被信号打断。 中度睡眠:state为TASK_KIL

m0_65931372的博客 6407

linux系统中调度策略(SCHED_BATCH、SCHED_DEADLINE、SCHED_IDLE、SCHED_FIFO、SCHED_RR、SCHED_OTHER)的介绍

在 Linux 系统中,除了常见的 `SCHED_FIFO`、`SCHED_RR` 和 `SCHED_OTHER` 调度策略外,还有 `SCHED_BATCH`、`SCHED_DEADLINE` 和 `SCHED_IDLE` 等调度策略,它们各自适用于不同的场景。以下是对这些调度策略的介绍以及如何更改它们的方法

gkxg001的博客 1496

Linux进程调度机制

Linux进程的调度进制一共有三种方法:时间片轮转调度,优先级调度,完全公平调度。本篇文章就讲解到这里。

m0_49476241的博客 2707

linux进程调度策略

转载—Linux 线程调度与优先级设置 Linux内核的三种调度策略: 1.SCHED_OTHER 分时调度策略, 2.SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃 3.SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平 L...

1716

Linux内核进程管理子系统有什么第七十六回 —— 进程调度(3)

Linux内核进程管理子系统有什么第七十六回 —— 进程调度(3)

phmatthaus的专栏 1081

Linux进程调度策略详解与应用场景

进程调度是操作系统核心功能之一,决定了CPU资源的分配方式。Linux内核提供了多种调度策略,包括SCHED_NORMAL(完全公平调度)、SCHED_FIFO(实时先到先服务)、SCHED_RR(实时轮转)等,每种策略采用不同的算法实现特定场景下的性能优化。通过调整调度策略和优先级,可以显著提升系统响应速度和处理能力,特别是在实时系统、多媒体处理和高性能计算等场景中。合理使用chrt命令和sched_setparam等系统调用进行调度策略配置,能够有效平衡系统吞吐量和实时性需求。本文重点解析了Linux

weixin_33835103的博客 334

快乐8 Ai大模型XGBoost LightGBM预测系统

随机森林回归:通过集成多个决策树模型,提高预测的准确性和稳定性。XGBoost:一种基于梯度提升的强大模型,擅长处理结构化数据。LightGBM:一种高效的基于决策树算法的分布式梯度提升框架,具有快速的训练速度和低内存消耗。高预测准确率:通过集成多种模型,提供更为精准的预测结果。多种预测方法:支持同尾号、重号、温号、连号和综合预测等多种预测策略,满足不同用户的需求。实时日志:在预测过程中,用户可以实时查看系统的预测进度和结果。

m0_72636583的博客 1万+

LeRobot SO-ARM100 学习笔记(2) diffusion module

对 lerobot 中的 diffusion policy 进行基本的代码阅读

mikhailbran的博客 1586

linux 进程调度 编程,详解Linux进程调度策略

本文通过Linux进程调度的5类方式详细分析了策略以及实现过程中的详细讲解。1、Linux 下进程分为5种类别,分别是停止类、截止类、实时类、公平类、空闲类,每种类别都有一个运行队列,每次调度时,就是先按照类别优先级排序,再按照每个类别内的最高优先级任务调度运行。文件:core.c (linux-4.6\kernel\sched)解读:先看下面的for循环,可以看到实现思路是,遍历每种类别,选择下...

weixin_28756833的博客 319

麒麟信安3.3-6C电网版虚拟机安装避坑指南:从ISO下载到SSH配置全流程

本文提供麒麟信安3.3-6C电网版虚拟机的详细安装与配置指南。针对电力行业仿真测试需求,重点解析从ISO镜像获取、虚拟机环境准备、安装过程中的三大“雷区”(如多管理员密码逻辑、分区方案、网络配置)到首次启动后的网络、SSH及root策略配置的全流程避坑要点,帮助技术人员高效、安全地完成部署。

rainy的博客 853

linux进程调度cfs,Linux进程调度策略(CFS调度)详解

java中list和map的区别是什么?结构特点List是存储单列数据的集合,Map是存储键值对这样的双列数据的集合;List中存储的数据是有顺序的,并且值允许重复;Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的。实现ios14有什么新功能?ios14新功能1、通话弹窗显示功能iOS14系统,在拨打电话时,会在顶部以悬浮窗口的形式展示。这样,可以通过顶部的悬浮窗口,接听或者挂...

weixin_42114580的博客 266

RT-Thread精通PM功耗调优 - Tickless篇

背景 让别人的思想装到自己的脑袋里,这不仅需要威逼利诱,还需要讲清楚原理。喜欢才能接受。 功耗基本的调试手段,估计前面讲了很多,或许只有少数人群可以接受。 更有极少的人,了解了整个功耗管理的体系、原理,愿意接受这样的【安排】。 这里的功耗调优思路,其实只是解决功耗问题的一种思路,并不是框架。 解决问题,自古以来,都是千奇百怪,秒在【奇】。 介绍 本篇介绍下Tickless的工作原理。 Tickless 可以理解为:tick-less,tick or little tick。 tick定.

坚韧与专注 1529

44、单级静态电流消耗最小化方法及功率优化比较器设计

本文探讨了单级静态电流消耗最小化方法及功率优化的多米诺逻辑比较器设计。通过分析类“AB”输入CMOS差分对电路,提出利用补偿电流源实现高低电流模式切换,提升运算放大器性能;结合VTCMOS与时钟门控技术,在90nm CMOS中设计低功耗比较器,并采用多米诺逻辑提高速度与能效。通过对比传统与改进型多米诺逻辑的静态功耗、动态功耗、延迟和PDP,验证了所提方案在高性能与低功耗方面的优势,适用于便携式设备等对能效要求严苛的应用场景。

pp12345的博客 120

Linux进程调度策略详解与性能优化实践

进程调度是操作系统核心功能,决定了CPU资源的分配效率。Linux内核通过完全公平调度器(CFS)和实时调度策略(SCHED_FIFO/SCHED_RR)等机制,实现了从公平性到实时性的多样化需求。CFS采用红黑树管理进程,通过虚拟运行时间(vruntime)确保公平性;而实时策略则通过优先级队列满足硬实时要求。合理选择调度策略能显著提升系统性能,特别是在音视频处理、高频交易等场景。通过chrt命令调整策略、taskset设置CPU亲和性,以及监控工具如perf和ftrace的使用,开发者可以优化关键进程的

weixin_32705179的博客 84

Kubeflow系统性学习教程:从入门到高级实践

Kubeflow学习教程摘要(150字): Kubeflow是基于Kubernetes的云原生MLOps平台,提供端到端机器学习解决方案。核心功能包括Jupyter Notebooks开发环境、Pipelines工作流编排、分布式训练支持和模型服务部署。教程采用三阶段学习路径:初学者搭建Kind集群体验Notebooks;中级开发自定义Pipeline组件;高级实现企业级应用。通过容器化和K8s CRD深度集成,解决环境一致性、实验跟踪和资源调度等MLOps痛点,相比MLflow/Airflow更适合大规模

自可乐的博客 886

Linux 学习笔记—进程调度及算法

5 进程调度 Linux进程调度的目标 1.高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效; 2.加强交互性能:在系统相当的负载下,也要保证系统的响应时间; 3.保证公平和避免饥渴; 4.SMP调度:调度程序必须支持多处理系统; 5.软实时调度:系统必须有效的调用实时进程,但不保证一定满足其要求; 5.1 多任务 1、多任务操作系统就是能同时并...

c+c++的博客 470

A.特定领域知识图谱知识推理方案:知识图谱推理算法综述[五]-GeniePath会自动过滤多度“邻居“的图神经网络算法。

构图对于GNN格外重要。那么怎样构图才有信息、有意义呢?如果节点的邻居只有自己,即邻接矩阵为对角阵时,GNN会退化成一个DNN模型。图中每个节点都是孤立的,相当图信息并不能相比其他方法带来增益。如果图特别稠密,比如是一个clique,即每个节点都和所有其他节点有边连接。同样的,这样的图信息同样是信息熵为0。经验上讲,节点度分布有区分度的图是相对有价值的。查看图的节点度分布。比如二类分类,分析正负例的图拓扑当然,构图和实际场景强相关。

丨汀、的博客 437

运行codex时出现登录失败:failed to start login server: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 (os error 10013) 解决方案

的本质是Windows 系统端口保留策略而非代码 bug。推荐使用方案一(调整动态端口范围),一劳永逸解决。如果你安装了 Docker Desktop 或启用了 WSL2,调整端口范围后记得检查相关服务是否正常运行。

一键难忘的博客 4152

linux 进程rt,RTLinux进程调度策略总结

实时调度策略介绍实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,普通分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调度。实时任务按照可抢占优先级调度算法进行,就绪态的实时任务可以立即抢占非实时任务。1,SCHED_FIFO:First Input First Output,优先级范围1-...

weixin_31368213的博客 1530

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux调度策略实战:如何用chrt命令优化你的后台任务性能

本文通过实战演示如何使用chrt命令调整Linux进程调度策略,重点介绍SCHED_BATCH和SCHED_IDLE如何优化后台任务性能。通过具体测试对比,展示这两种策略在提升系统响应性与任务吞吐量方面的平衡技巧,帮助开发者和运维人员精细控制系统资源分配。

beer8的博客 305

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

标题深入解析Linux进程调度策略从CFS到实时进程的优先级管理

Linux操作系统作为一个多任务系统,其核心功能之一就是进程调度。调度器负责决定哪个进程在何时使用CPU资源,其设计目标是在吞吐量、响应时间、公平性以及功耗等多个维度上取得平衡。随着Linux内核的不断演进,其调度器也经历了从简单的轮转调度到如今复杂且高效的多重调度类并存的结构,特别是完全公平调度器的引入,彻底改变了普通进程的调度方式,并与实时调度策略共同构成了现代Linux优先级管理体系。

TTNNttnn的博客 436

ps ax详解:从进程状态到Linux调度排查实战

在Linux运维中,进程管理是系统调优与故障排查的基础。理解进程的运行、睡眠、停止或僵尸等不同状态,是与内核调度器对话的前提。STAT字段中的R、S、D、Z等状态,直接映射着进程在调度队列中的真实处境,而nice值与CFS调度策略则决定了谁能优先获得CPU资源。当系统负载异常时,借助ps ax命令快速获取全局进程快照,并结合作业调度机制定位瓶颈,是提升定位效率的关键路径。本文从进程概念与调度原理出发,展开ps ax输出的字段含义、状态解码及实战排查方法,帮助工程师在面对高CPU、D状态等待或僵尸进程堆积时,

weixin_32715349的博客 290
上一篇: 关于c++的一些知识点
下一篇: 爬虫-nutch
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值