📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》
🎥 更多学习视频请关注 B 站:嵌入式Jerry


Linux 任务调度在进程管理中的关系和运行机制

Linux 内核中的“任务调度”是进程管理系统的核心部分,相互关联而且分工明确。本文通过概念分析、模型分布、行为模式、调度策略、管理工具、代码示例和流程总结,全面讲解 Linux 任务调度在进程管理中的作用和机制。


在这里插入图片描述

一、任务 vs 进程:基本概念分清

概念含义
进程 (Process)抽象的运行单元,拥有独立的虚拟地址空间和资源
线程 (Thread)进程内部的执行流
任务 (Task)Linux 内核中对进程和线程的通用统一概念,对应一个 task_struct 结构,是调度的基本单元

同一进程内的多个线程,将在内核中分别代表为多个 task


二、调度系统结构与模式

Linux 调度系统分为以下几个层级:

1. 调度器(Scheduler)

  • 核心模块,管理所有任务的调度逻辑。
  • 入口函数如 schedule()pick_next_task()context_switch()

2. 调度行为(Scheduling Behavior)

定义内核是否允许任务在运行中被中断(即“抢占”)。

模式名称说明
抢占式Preemptive当前任务可以随时被更高优先级任务抢占 CPU,适合响应敏感系统(Linux 默认支持)
非抢占式Non-preemptive当前任务必须主动放弃 CPU(如阻塞或退出),适合嵌入式、批处理任务等

注意:抢占式是一种调度行为,不是调度策略,它适用于不同调度策略下的调度逻辑实现。

3. 调度策略(Scheduling Policy)

调度器采用不同策略决定如何选择任务。

策略类型抢占行为说明
SCHED_NORMAL (CFS)非实时抢占式默认策略,基于虚拟运行时间(vruntime)公平调度
SCHED_FIFO实时非抢占式先来先服务,不自动让出 CPU,适合控制系统
SCHED_RR实时抢占式时间片轮转,适合需要时间约束的实时任务
SCHED_DEADLINE实时抢占式基于截止时间和周期调度,用于软/硬实时系统

三、任务调度流程:从状态到切换

任务状态:

状态说明
TASK_RUNNING可调度,或正在运行
TASK_INTERRUPTIBLE等待被中断唤醒
TASK_UNINTERRUPTIBLE不可被中断,用于硬件阻塞操作
TASK_DEAD任务结束,正在回收资源

调度进程切换流程:

正在运行的任务 A||规则触发 (CPU 用完 / 阻塞 / 有高优先级任务)|schedule()|pick_next_task()|context_switch(A, B)|
切换到 B 执行

四、调度管理工具

工具功能
ps / top / htop查看运行任务信息
chrt设置或查询任务的调度策略(如 FIFO、RR)
taskset设置 CPU 给任务的亲和性(CPU affinity)
schedtool更细化设置调度策略和优先级
/proc/[pid]/sched查看进程调度信息结构体

五、代码实战:两个线程设置不同调度策略

#include <pthread.h>
#include <sched.h>
#include <stdio.h>
#include <unistd.h>void *low_task(void *) {while (1) {printf("low priority running\n");sleep(1);}
}void *high_task(void *) {while (1) {printf("HIGH priority running\n");sleep(1);}
}int main() {pthread_t t1, t2;struct sched_param param;pthread_create(&t1, NULL, low_task, NULL);pthread_create(&t2, NULL, high_task, NULL);param.sched_priority = 10;  // lowpthread_setschedparam(t1, SCHED_RR, &param);param.sched_priority = 80;  // highpthread_setschedparam(t2, SCHED_RR, &param);pthread_join(t1, NULL);pthread_join(t2, NULL);return 0;
}

通过 pthread_setschedparam 分别设置不同线程的调度策略与优先级,可观察抢占调度行为,高优线程会频繁抢占 CPU。


六、调度模型补充说明:是否还有其他调度模式?

除了抢占式与非抢占式,还有以下相关概念值得补充:

1. 自愿抢占(Voluntary Preemption)

  • Linux 内核配置中 CONFIG_PREEMPT_VOLUNTARY
  • 表示仅在特定调度点(如 IO 阻塞、显式调用 schedule())才允许切换。
  • 优点是可控性好,适合桌面/服务器系统,缺点是实时性较差。

2. 强制抢占(Fully Preemptible)

  • CONFIG_PREEMPT
  • 表示内核大多数路径都允许被抢占,适合响应及时性高的系统。

3. 实时抢占补丁(PREEMPT_RT)

  • 加强版本的内核实时性特性,几乎所有内核上下文都可被中断。
  • 适合工业级/控制系统等严格实时场景。

七、总结:调度机制是进程管理的动态执行核心

  • 任务是调度的基本对象,所有进程/线程均由 task_struct 管理
  • 调度行为定义是否可打断当前任务(抢占与否)
  • 调度策略定义如何选择下一个任务(如 FIFO、RR、CFS)
  • 调度器通过 schedule/pick/context_switch 完成任务切换
  • 配套工具(如 chrt、schedtool)是日常开发/调试调度的关键武器


📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》
🎥 更多学习视频请关注 B 站:嵌入式Jerry


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89798.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89798.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/89798.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA后端开发—— JWT(JSON Web Token)实践

1. 什么是HTTP请求头 (Request Headers)&#xff1f;当你的浏览器或手机App向服务器发起一个HTTP请求时&#xff0c;这个请求并不仅仅包含你要访问的URL&#xff08;比如 /logout&#xff09;和可能的数据&#xff08;请求体&#xff09;&#xff0c;它还附带了一堆“元数据&am…

【SVM smote】MAP - Charting Student Math Misunderstandings

针对数据不平衡问题&#xff0c;用调整类别权重的方式来处理数据不平衡问题&#xff0c;同时使用支持向量机&#xff08;SVM&#xff09;模型进行训练。 我们通过使用 SMOTE&#xff08;Synthetic Minority Over-sampling Technique&#xff09;进行过采样&#xff0c;增加少数…

repmgr+pgbouncer实现对业务透明的高可用切换

本方案说明 PostgreSQL repmgr&#xff1a;实现主从自动故障检测与切换&#xff08;Failover&#xff09;。PgBouncer&#xff1a;作为连接池&#xff0c;屏蔽后端数据库变动&#xff0c;提供透明连接。动态配置更新&#xff1a;通过repmgr组件的promote_command阶段触发脚本…

查找服务器上存在线程泄露的进程

以下是一个改进的命令&#xff0c;可以列出所有线程数大于200的进程及其PID和线程数&#xff1a; find /proc -maxdepth 1 -type d -regex /proc/[0-9] -exec sh -c for pid_dir dopid$(basename "$pid_dir")if [ -f "$pid_dir/status" ]; thenthreads$(aw…

Facebook 开源多季节性时间序列数据预测工具:Prophet 饱和预测 Saturating Forecasts

文中内容仅限技术学习与代码实践参考&#xff0c;市场存在不确定性&#xff0c;技术分析需谨慎验证&#xff0c;不构成任何投资建议。 Prophet 是一种基于加法模型的时间序列数据预测程序&#xff0c;在该模型中&#xff0c;非线性趋势与年、周、日季节性以及节假日效应相匹配。…

从单线程到云原生:Redis 二十年演进全景与内在机理深剖

——从 1.0 到 7.2&#xff0c;一窥数据结构、网络模型、持久化、复制、高可用与生态协同的底层脉络&#xff08;一&#xff09;序章&#xff1a;为什么是 Redis 1999 年&#xff0c;Salvatore Sanfilippo 在开发一个实时访客分析系统时&#xff0c;发现传统磁盘型数据库无法在…

得了甲亢军队文职体检能过吗

根据军队文职体检现行标准&#xff0c;甲亢患者能否通过体检需分情况判定&#xff0c;核心取决于病情控制状态、治疗结果及稳定时长。结合《军队选拔军官和文职人员体检通用标准》及补充规定&#xff0c;具体分析如下&#xff1a;⚕️ 一、可直接通过体检的情况临床治愈满1年且…

【编程语言】C、C++、C#深度对比:三种语言的演进历程与应用场景

一、语言概述与历史背景 &#xff08;一&#xff09;C语言&#xff1a;系统编程的基石诞生背景 1972年由Dennis Ritchie在贝尔实验室开发为了重写UNIX操作系统而创造从B语言演化而来&#xff0c;增加了数据类型设计目标&#xff1a;简洁、高效、可移植设计哲学 “相信程序员”&…

《计算机网络》实验报告五 DNS协议分析与测量

目 录 1、实验目的 2、实验环境 3、实验内容 3.1 查看和配置本机的DNS系统 3.2 DNS信息测量 3.3 DNS协议分析 4、实验结果与分析 4.1 查看和配置本机的DNS系统 4.2 DNS信息测量 4.3 DNS协议分析 5、实验小结 5.1 问题与解决办法&#xff1a; 5.2 心得体会&#x…

Python工厂方法模式详解:从理论到实战

一、工厂方法模式核心概念 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;属于经典23种设计模式之一。其核心思想是&#xff1a;定义一个创建对象的接口&#xff0c;但将具体对象的实例化过程延迟到子类中实现。这种模式通过引入…

python爬虫获取PDF

【前提&#xff1a;菜鸟学习的记录过程&#xff0c;如果有不足之处&#xff0c;还请各位大佬大神们指教&#xff08;感谢&#xff09;】 1.方法一&#xff1a;网站找到目标数据【单篇PDF】 https://bidding.sinopec.com/tpfront/xxgg/004005/ 按F12&#xff0c;----检查------…

IFN影视官网入口 - 4K影视在线看网站|网页|打不开|下载

IFN影视是一个专注于影视内容的网站&#xff0c;提供电影、电视剧、综艺等各类影视资源的在线观看服务。该网站以用户需求为导向&#xff0c;致力于为用户提供高清、流畅的观影体验&#xff0c;并不断更新内容以满足不同用户的观看习惯和偏好。IFN影视的特色在于其内容丰富、分…

《计算机网络》实验报告四 TCP协议分析

目 录 1、实验目的 2、实验环境 3、实验内容 3.1 利用wget下载新疆大学主页 3.2 使用wireshark分析TCP报文结构 3.3 使用wireshark分析建立连接的三次握手 3.4 使用wireshark分析释放连接的四次挥手 4、实验结果与分析 4.1 利用wget下载新疆大学主页 4.2 使用wiresh…

知识 IP 的突围:从 “靠感觉” 到 “系统 + AI” 的变现跃迁

越来越多的知识付费从业者陷入 “努力无成果” 的困局&#xff1a;做了内容、上了课程&#xff0c;却没人看、没人买。核心问题不在于能力不足&#xff0c;而在于仍在用 “靠感觉” 的原始方式打造 IP。在流量内卷、节奏加快的当下&#xff0c;“内容情怀” 已撑不起一门生意&a…

4.Java创建对象有几种方式?

1.使用 new 关键字&#xff08;最常用&#xff09;通过调用类的构造函数直接实例化对象Person person new Person(); // 调用无参构造 Person person new Person("Alice", 25); // 调用有参构造2.反射机制&#xff08;动态创建&#xff09;利用Java反射 API 在运行…

【好题】洛谷 P1600 [NOIP 2016 提高组] 天天爱跑步(倍增LCA+桶)

前言没做出来&#xff0c;看了很多篇题解后AC了&#xff0c;感觉大部分题解讲得不清楚。题目思路结果有两种求法模拟跑步过程&#xff0c;统计每个节点能观察到的人数考虑每条路径会对哪些节点作出贡献&#xff08;当前路径的玩家能被观察到&#xff09;尝试第一种求法必须遍历…

valkey之网络管理架构深度解析

一、连接类型实现体系 valkey通过ConnectionType结构体构建了灵活的网络连接抽象&#xff0c;支持多种连接类型的统一管理。每种连接类型都通过填充该结构体的函数指针来实现特定功能&#xff0c;形成了面向接口的设计模式。1.1 socket连接 Socket连接提供了最基础的TCP/IP通信…

【解码文本世界的“隐形分界线”:Windows与Linux回车换行之谜】

在计算机的文本世界里&#xff0c;回车&#xff08;Carriage Return&#xff0c;CR&#xff09;和换行&#xff08;Line Feed&#xff0c;LF&#xff09;是两个看似简单却意义非凡的字符。它们如同文本中的“隐形分界线”&#xff0c;默默地划分着段落与行&#xff0c;影响着文…

【Project】ELK 7.17.16 日志分析系统部署

ELK 日志分析系统集群部署 本文档基于 Rocky Linux 9.4 系统&#xff0c;部署 ELK 7.17.16&#xff08;长期支持版&#xff09;集群 案例准备 1. 节点规划IP主机名部署组件角色说明192.168.100.150kafka01Elasticsearch、Kibana主节点&#xff08;master&#xff09; 可视化192…

分布式定时任务系列13:死循环是任务触发的银弹?

传送门 分布式定时任务系列1&#xff1a;XXL-job安装 分布式定时任务系列2&#xff1a;XXL-job使用 分布式定时任务系列3&#xff1a;任务执行引擎设计 分布式定时任务系列4&#xff1a;任务执行引擎设计续 分布式定时任务系列5&#xff1a;XXL-job中blockingQueue的应用 …