news 2026/4/17 8:58:09

linux内核 - 进程管理和调度(基于6.19内核)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
linux内核 - 进程管理和调度(基于6.19内核)

一:概述

所有现代操作系统都能够同时运行多个进程——至少在用户看来是这样。如果系统只有一个处理器,那么在任意时刻实际上只能运行一个程序。在多处理器系统中,真正能够并行运行的进程数量取决于物理 CPU 的数量。

内核和处理器通过以极快的速度在不同正在运行的应用程序之间反复切换,制造出一种多任务并行执行的假象。由于切换间隔非常短,用户几乎察觉不到中间这些极其短暂的停顿,从而感觉计算机仿佛在同时处理多项任务。

这种系统管理方式会引出一系列内核必须解决的问题,其中最重要的包括以下几点:一是应用程序之间必须相互隔离,除非明确允许相互干扰。例如,应用程序 A 中的错误不应传播到应用程序 B。由于 Linux 是一个多用户系统,还必须确保程序不能读取或修改其他程序的内存内容——否则,访问其他用户的私有数据将变得极其容易。二是CPU 时间必须尽可能公平地在各个应用程序之间进行分配,同时还要考虑到某些程序比其他程序更为重要。

内核必须决定为每个进程分配多少时间,以及何时切换到下一个进程。这就引出了一个问题:究竟哪个进程应该成为“下一个”?此类决策与平台无关。 当内核从进程 A 切换到进程 B 时,它必须确保 B 的执行环境与上次撤出处理器资源时完全相同。例如,处理器寄存器的内容以及虚拟地址空间的结构必须保持一致。这两项任务都由内核的一个子系统——调度器(scheduler)负责。CPU 时间的分配方式由调度策略(scheduler policy)决定。

二:进程优先级

并非所有进程的重要性都是相同的。除了大多数读者熟悉的进程优先级之外,还有不同的关键性类别(criticality classes)以满足不同的需求。粗略地说,进程可以分为实时进程和非实时进程两类。

硬实时(hard real-time)进程受到严格的时间限制,在规定的时间内必须完成特定任务。举例来说,如果计算机处理的是飞机的飞行控制指令,那么这些指令必须尽快转发——在保证的时间范围内。例如,如果飞机正在进近着陆,飞行员想拉起机头,计算机如果晚了几秒才转发指令就毫无意义。这时,飞机很可能已经“头朝下”撞到地面。硬实时进程的关键特征是,它们必须在保证的时间范围内被处理。需要注意的是,这并不意味着时间范围必须特别短,而是系统必须保证在任何情况下都不会超过这个时间限制,即使是在不太可能出现的或恶劣的条件下。

Linux 不支持硬实时处理,至少在原生(vanilla)内核中不支持。不过,有一些经过修改的版本,如 RTLinux、Xenomai 或 RTAI 提供了这一功能。在这些方案中,Linux 内核作为一个独立的“进程”运行,处理不太重要的软件,而实时任务则在内核之外完成。只有在没有实时关键操作执行时,内核才会运行。目前主线Linux支持配置为实时内核(PREEMPT_RT)

由于 Linux 被优化用于吞吐量(throughput),并尽可能快速地处理常见情况,因此要实现严格的响应时间保证非常困难。然而,近年来在减少整体内核延迟(即从发出请求到请求被完成之间的时间)方面已经取得了不少进展。这些努力包括:可抢占内核(preemptible kernel)机制、实时互斥锁(real-time mutexes),以及全新完全公平调度器(completely fair scheduler),中断和内核内部优化等。

未完待续。。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 0:48:59

驱动开发系列76 - Mesa NIR 通用中间语言表示

一:概述 NIR 是Mesa 的通用中间表示,适用于所有图形API和硬件后端。本文介绍下NIR的设计架构。包括NIR核心数据结构,NIR优化过程,NIR降级和验证。 二:架构概览 NIR 作为Mesa中所有着色器的汇聚点,提供了一种通用表示,使得不同前端语言(GLSL、SPIRV、TGSI)和后端(LLV…

作者头像 李华
网站建设 2026/4/18 4:02:00

AI 主导研发项目溢价评估与工作量核算的思考?

AI 主导研发(仅 5% 人工投入)的溢价评估 和 甲方评估工作量并推动乙方接受 的问题,核心逻辑是:溢价≠单纯按人工成本比例降低,而是基于「AI 提效带来的价值增量」和「人工投入的核心价值」双向定价;甲方评估…

作者头像 李华
网站建设 2026/4/8 9:59:22

Java面试场景:互联网大厂如何考核Spring Boot与Kafka应用能力

场景:互联网大厂Java小白求职者面试 超好吃是一位刚毕业的Java程序员,今天他来到了某互联网大厂参加面试,面试官是技术专家刘老师。以下是他们的对话:第一轮问题:Spring Boot与Web开发基础 面试官: “超好吃…

作者头像 李华
网站建设 2026/4/17 6:18:04

SpringBoot下获取resources目录下文件的常用方法

哈喽,大家好,今天给大家带来SpringBoot获取resources目录下文件的常用方法,示例中的方法是读取resources目录下的txt和xlsx文件,并将xlsx导出到excel的简单写法。完整代码放在最后。通过this.getClass()方法获取method1 - method4…

作者头像 李华