Linux内核进程管理与调度:策略优化与实践分析

news/2024/4/25 9:16:43/文章来源:https://blog.csdn.net/qq_45172832/article/details/130319635

Linux内核进程管理与调度

    • 一、前言
    • 二、进程管理和多进程调度
      • 2.1 进程标识符和控制块
      • 2.2 进程状态和转换
      • 2.3 进程间通信
    • 三、单处理器下的Linux进程调度
      • 3.1 Linux进程调度器
      • 3.2 时间片轮转调度算法
      • 3.3 最短剩余时间优先调度算法
      • 3.4 其他调度算法的不足
    • 四、多处理器下的Linux进程调度
      • 4.1 对称多处理架构下的负载均衡
      • 4.2 非对称多处理架构下的优化
      • 4.3 多队列调度算法
    • 五、CFS完全公平调度
      • 5.1 CFS设计思路和原理
      • 5.2 CFS特性和表现优劣
      • 5.3 CFS结合调试分析工具的使用技巧

一、前言

今天给大家上点硬货,关于Linux的进程管理和调度是学习和理解Linux的必学知识。为协调多个进程 “同时” 运行,现代操作系统通常使用进程优先级这一基本手段。每个进程都有一个与之相关的优先级,如果有多个可执行的进程等待CPU资源,那么具有更高优先级的进程将优先被调度执行。今天就给大家讲解一下Linux内核中的进程管理和调度,文章内容较长,大家记得先赞后看。

二、进程管理和多进程调度

2.1 进程标识符和控制块

进程标识符是一个唯一的数字,表示每个运行的进程。在Linux中,进程ID(PID)通常从1开始自增。在系统中,内核会为每个进程维护一个数据结构,叫做进程控制块(PCB),也称作进程描述符。PCB存储了所有与进程有关的信息,包括进程的状态、PID、进程优先级、页表和资源使用情况的统计数据等等。

2.2 进程状态和转换

在Linux中,每个进程都有一个状态机,它可以处于就绪态、运行态、阻塞态或者僵死态。其中:

  • 就绪态:指一个进程已经准备好被分配CPU并开始执行了。
  • 运行态:指正在占用CPU资源的当前进程。
  • 阻塞态:指因为某些原因而被挂起、无法占用CPU资源的进程。
  • 僵尸态:指此进程已结束,但是其父进程还未回收该进程的资源。

进程状态之间经常会发生改变。例如一个从阻塞状态变为就绪状态的进程,需要一个事件去释放阻塞,在这个时候进程的状态就会随之改变。

2.3 进程间通信

不同进程间需要进行信息交换和数据共享,因此Linux中提供了多种进程间通信机制,如管道(pipe)、消息队列、信号量、共享内存等。这些机制可以让进程安全地交换数据,并通过各种同步方式来协调不同进程的行为。

在Linux系统中,通过管道实现进程间通信时,发送者进程将数据放入管道缓冲区,接收者进程从该缓冲区读取数据。消息队列是一个消息赖容器,发送进程可以将数据放入容器中,并设置一个特定的类型,接收者进程则根据类型从容器中获取数据。共享内存允许不同的进程访问同一块物理内存,从而方便进程间共享数据。

三、单处理器下的Linux进程调度

3.1 Linux进程调度器

在Linux内核中,进程调度器(Scheduling Class)是负责选择下一个要被执行的进程的模块。Linux 2.6 内核中提供了 CFS(Completely Fair Scheduler)作为默认的进程调度算法。该算法将CPU公平地分配给所有“可运行”或者“准备运行”的进程。这意味着即使有一个长时间运行的进程,其他进程仍然可以获得足够的机会使用CPU。

3.2 时间片轮转调度算法

时间片轮转调度算法(Round Robin Scheduling)又称为循环赛制调度算法,是一种基于时间片的调度方法。在该算法中,操作系统将每个待执行的进程排列成一个队列,每个进程被分配一个固定大小的时间片,在时间片用完后,就将该进程放到队列的末尾,等待下一次调度。

轮转调度算法的特点是简单易实现,能够保证所有进程都有机会被调度执行。但是由于现代计算机的速度越来越快,时间片可能变得过小,导致过多的进程切换,影响CPU性能。

3.3 最短剩余时间优先调度算法

在最短剩余时间优先调度算法(Shortest Remaining Time First)中,调度器会根据每个进程所需要的CPU运行时间来决定下一个调度哪个进程。如果当前正在运行的进程所需的时间比另一个就绪进程所需的时间更长,则抢占当前进程并将执行权转交给新进程。

这种方法可以确保每个进程都获得它所需的运行时间,但当有很多短进程时,长时间运行的进程可能会被明显忽略。即使使用这样的调度算法,也无法消除“饥饿”现象。具体而言,某些进程可能永远不会获得足够的CPU时间,在最坏情况下甚至可能对系统性能造成严重影响。

3.4 其他调度算法的不足

时间片轮转调度算法 和 最短剩余时间优先调度算法的问题在于,它们都无法保证公平性,因此可能导致某些进程处于饥饿或拖延状态。此外,这些算法通常都是为单处理器设计的,无法充分利用现代计算机系统中的多核和多线程特性。看起来这两个算法的优缺点都比较明显,并且相互补充。因此,Linux进程管理和多进程调度需要其他更具有适应性的算法,比如可以基于线程数量或者负载平衡调度策略等。

四、多处理器下的Linux进程调度

4.1 对称多处理架构下的负载均衡

在对称多处理架构(Symmetric Multi-Processor, SMP)中,所有处理器都是相等的,每个处理器都可以访问共享内存。在这种架构下,Linux内核通常使用负载均衡算法来平衡多个处理器的工作量,以提高系统效率。例如,在CFS算法中,Linux内核使用红黑树来维护等待执行的进程队列,并通过最小化整个系统的最小负载差异来保持负载均衡。

4.2 非对称多处理架构下的优化

在非对称多处理架构(Asymmetric Multi-Processor, AMP)中,处理器通常被分配到不同的任务上,因此无法直接访问共享内存。在这种情况下,为了发挥系统的最大性能,需要考虑在多个处理器之间更好地分配任务。

一种通用的方法是使用“领导者”或“主节点”来协调各个处理器的任务。主节点将任务分配给每个处理器,并监视它们的运行情况。如果某个处理器出现故障或变得过于繁忙,则主节点会重新分配任务,从而保持系统处于最佳状态。

4.3 多队列调度算法

多队列调度算法是一种可用于多处理器系统的调度算法。它通过将每个处理器分配给一个独立的运行队列,实现最大化利用多处理器系统资源。在多队列调度算法中,调度器把任务动态地分发到这些运行队列中,并执行所需操作。这种算法能够减少不同进程共享处理器核心导致出现的竞争情况,在满足负载均衡的同时,还能够保持高效性和公平性。

需要指出的是,由于现代计算机通常都有多个CPU核心,因此多处理器下的Linux进程调度和管理仍然是一个广泛和活跃的领域,研究人员一直在探索不同的技术和算法,以解决新问题并提升系统性能。

五、CFS完全公平调度

5.1 CFS设计思路和原理

CFS(Completely Fair Scheduler)是Linux内核默认的进程调度算法,它的设计目标是实现“完全公平”的调度。CFS达成该目标的方式是为每个进程分配一个虚拟运行时间,然后根据进程所请求的cpu的份额对其进行调度。如果某个进程正在占用的CPU时钟比其他进程少,则CFS会将其优先级提高以确保其能及时获得更多的CPU时间。相反,如果进程正在使用的CPU时钟超过其所请求的份额,则其优先级将降低,从而腾出CPU并让其他等待调度的进程有机会获得CPU执行权。

在CFS中,进程排成一个红黑树并且被称作“基于各自累计运行时间”排队。一个较短累积运行时间的进程在队列中的优先级高于一个累积运行时间较长的低优先级进程。计算红黑树中每个节点的长度需要经过复杂的树重新统计。

5.2 CFS特性和表现优劣

CFS具有以下主要特征:

  • 完全公平:CFS试图让所有进程都能够获得尽可能相等的CPU时间。
  • 延迟敏感型:CFS通过控制时间分配来保证数据结构的实时性,从而延迟敏感的应用程序可以获得稳定的响应时间。
  • 可扩展性好:CFS易于扩展到多核处理器和大规模系统中。
  • 不会产生饥饿:CFS为每个进程预先计算了所需的时间片,以确保所有进程都获得合适的执行时间。

然而,CFS也有一些局限性。由于CFS采用基于红黑树的动态公平调度策略,因此每次遍历红黑树时都需要进行耗时的计算,这可能会降低系统性能和响应能力。另外,CFS不能完全消除CPU资源控制不当或CPU使用过高等问题。

5.3 CFS结合调试分析工具的使用技巧

在实际使用CFS时,还需要结合相关调试分析工具来优化性能并解决问题。例如,通过top命令可以检查当前系统中的进程数量、CPU占用率以及内存使用情况,如下图所示:
在这里插入图片描述
另一种有用的调试工具是schedstat,它会显示CFS调度器的统计值。通过这些显示项,可以了解每个进程在系统中消耗的时间和资源情况。最后需要注意的是,CFS虽然是Linux内核默认的进程调度算法之一,但只适用于 Linux 2.6 及更高版本,其他操作系统或版本可能不支持该算法。

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

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

相关文章

Layui 2.8.0 正式发布,朴实归来

Layui 是一套开源的 Web UI 组件库,采用自身轻量级模块化规范,遵循原生态的 HTML/CSS/JavaScript 开发模式,极易上手,拿来即用。其风格简约轻盈,而内在雅致丰盈,甚至包括文档在内的每一处细节都经过精心雕琢…

【Linux网络】PXE高效批量网络装机

PEX高效批量网络装机 一、部署PXE远程安装服务1.1PXE的优点1.2搭建PXE网络体系的前提条件 二、实现Kincksatrt无人值守安装2.1实验思路,2.2实验:无人值守远程安装2.2.1实现 Kickstart 无人值守安装 一、部署PXE远程安装服务 PXE(预启动执行环…

Flutter ListView组件详解

今天是2023年4月24日 今天重新复习了一下关于ListView的内容,现在就重新整理一下关于ListView的内容和理解 : (1)ListView和Column之间有什么区别? 在我理解中ListView和Column都是可以有很多子组件的组件,它们之间区别在于它们排列的形式和…

100天涨薪4k,从功能测试到自动化测试,我整理的3000字超全学习指南

去年6月份,由于经济压力让我下定决心进阶自动化测试,已经24的我做了3年功能测试,坐标广州薪资定格在8k,可能是生活过的太安逸,觉得8000的工资也够了,但是生活总是多变的,女朋友的突然怀孕&#…

Bsah shell的操作环境

文章目录 Bsah shell的操作环境路径与命令查找顺序使用案例 bash的登录与欢迎信息:/etc/issue、/etc/motdbash的环境配置文件如下login与non-login shell/etc/profile(login shell 才会读)~/.bash_profile(login shell 才会读)source:读入环境配置文件的…

上新了丨高性价比5G智能模组,美格智能SRM700正式发布

伴随着5G、AI、云计算等技术与物联网技术的融合发展,一个万物智联的智能世界正在到来。5G已经成为数字经济重要的基础设施,千行百业的用户都需要依靠高速率、大带宽、低延时的5G技术来构建数字化转型能力。 作为全球领先的无线通信模组及解决方案提供商…

51单片机(一)软硬件环境和单片机介绍

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其实STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

HDCTF 2023 复盘

web yamiyami 当时考虑直接读的/proc/self/environ 读到flag是not_flag 就没考虑过/proc/1/environ了 然后不知道py3URL二次编码的特性,读不到源码,无从下手 做flask算pin码的题做多了,还以为pid是1的就是self,难顶 上面那种是非预期 预期是yaml反序列化 先读源码 /read?u…

银行数字化转型导师坚鹏:宏观经济趋势与资本行业机遇和挑战

2023年宏观经济趋势与资本行业机遇和挑战 课程背景: 很多学员存在以下问题: 不知道我国目前的宏观经济形势? 不清楚宏观环境对我国经济的影响? 不知道资本行业未来主要发展趋势? 课程特色: 精彩解…

小案例CSS

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" content"widthde…

QMS-云质说质量 - 4 为什么有的质量人不属于质量部?

想管理好质量&#xff0c;首先就要把质量人员放在合适的组织架构中。 对人进行管理&#xff0c;基本原则是&#xff1a;尽量让员工的利益与企业的利益保持同步&#xff0c;虽然无法做到完全重合&#xff0c;但出发点肯定要战略一致。 俗话说“屁股决定脑袋”&#xff0c;因此&a…

IS210AEBIH3BED包含逻辑集成电路、存储器集成电路、专用集成电路

IS210AEBIH3BED包含逻辑集成电路、存储器集成电路、专用集成电路 什么是集成电路测试仪   集成电路测试仪是对集成电路进行测试的专用仪器设备。集成电路测试是保证集成电路性能、质量的关键手段之一。集成电路测试技术是发展集成电路产业的三大支撑技术之一&#xff0c;因此…

ChatGPT课程送账号啦,让你成为新生代AI程序员

ChatGPT能帮助程序员 解决哪些具体问题&#xff1f; 程序员在日常工作中可能会遇到各种各样的问题&#xff0c;如语法错误、逻辑问题、性能问题等等。 不同业务场景的问题&#xff0c;都可以利用ChatGPT获取各自场景下的知识&#xff0c;并使用ChatGPT提供的代码示例和问题解…

Kerberos设计和落地长常识

Kerberos 处理三类安全对象 票证 kerberos票证授予服务给每个客户发一张标记&#xff0c;该标记发送给一个特殊的服务器&#xff0c;证实kerberos最近已经认证了发送者&#xff0c;票证包括过期时间和新生成的会话密钥供客户和服务器使用。 认证 由客户构造的一个标记&#xff…

震惊!为了4680锂电池溯源,竟然做出这种事情

电池溯源&#xff0c;一直都是国家尤为重视的话题。 中国电子技术标准化研究院更是一再强调了&#xff1a;锂电编码标准编制和溯源平台初步建设方案。参会代表围绕锂电编码溯源体系建设有关问题开展了研讨&#xff0c;表示依托行业通用编码标准&#xff0c;建立完善的锂电全生…

OSCP-Sirol(docker容器到宿主机)

目录 扫描 WEB 提权 扫描 sudo nmap 192.168.64.54 -p- -sS -sVPORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u7 (protocol 2.0) 53/tcp closed domain 80/tcp open http Apache httpd 2.4.25 ((Debian)) 3306…

leetcode重点题目分类别记录(四)图论深入

文章目录 入度出度最大网络秩可以到达所有点的最少点数目 并查集省份数量等式方程的可满足性按字典序排列最小的等效字符串以图判树 二分图判断二分图 深度优先搜索封闭岛屿数量太平洋大西洋水流问题 广度优先搜索树上逃逸最短路径多源最短路径 拓扑排序DFS解决拓扑排序BFS解决…

【C++关联容器】set的成员函数

目录 set 1. 构造、析构和赋值运算符重载 1.1 构造函数 1.2 析构函数 1.3 赋值运算符重载 2. 迭代器 3. 容量 4. 修改器 5. 观察者 6. 操作 7. 分配器 set set是按照特定顺序存储唯一元素的容器。 在一个set中&#xff0c;一个元素的值也是它的标识&#xff08;值…

mybatis中大数据量foreach插入效率对比

1.controller代码 RequestMapping("/testInsert")public String testInsert(Integer sum){testService.testInsert(sum);return "发送成功";}2.service代码 Overridepublic void testInsert(Integer sum) {long start System.currentTimeMillis();List<…

修炼汇编语言第一章:汇编基础知识概述

目录 前言 一、汇编语言的组成 二&#xff1a;存储器 三&#xff1a;指令和数据 四&#xff1a;存储单元 五&#xff1a;CPU对存储器的读写 地址总线 控制总线 数据总线 前言 汇编语言是数据结构&#xff0c;操作系统&#xff0c;微机原理等重要课程的基础&#xff0…