当前位置: 首页 > news >正文

014 Linux 2.6内核进程调度队列(了解)

🦄 个人主页: 小米里的大麦-CSDN博客
🎏 所属专栏: Linux_小米里的大麦的博客-CSDN博客
🎁 GitHub主页: 小米里的大麦的 GitHub
⚙️ 操作环境: Visual Studio 2022

在这里插入图片描述

文章目录

    • Linux 2.6内核进程调度队列(了解)
      • 1. 调度队列结构
      • 2. 调度流程
        • 1. 选择进程
        • 2. 时间片分配
        • 3. 数组切换
      • 3. 动态优先级调整
      • 4. 多核负载均衡
      • 5. 优缺点分析
        • 优点:
        • 缺点:
      • 6. 概念小结
    • 共勉

Linux 2.6内核进程调度队列(了解)

更多文章 | CSDN

更多文章 | 知乎

更多文章 | 腾讯云

Linux 2.6 内核在进程调度方面引入了 O(1) 调度器,该调度器的核心目标是保证调度决策的时间复杂度为恒定时间 O(1),即无论系统中有多少个进程,调度器的决策时间始终保持不变。这个设计对于大规模系统具有重要意义,可以有效避免调度决策的性能瓶颈。

1. 调度队列结构

Linux 2.6 内核的进程调度通过多个调度队列进行管理,核心数据结构是 运行队列(Runqueue),每个 CPU 核心都维护一个独立的运行队列。运行队列(Runqueue):每个 CPU 核心维护一个独立的运行队列,队列内包含当前可运行的进程。运行队列结构主要由以下几个组件组成:

  • 优先级数组:
    • 活跃数组(Active Array):存放当前可运行的进程,按优先级分为 140 个队列(0~139)。
      • 0~99:实时进程(RT进程,如硬实时任务)。
      • 100~139:普通进程(分时进程,如用户程序)。
    • 过期数组(Expired Array):存放已经用完时间片的进程,结构与活跃数组相同。
  • 时间片管理:每个进程被分配一个时间片(Time Slice),进程执行时消耗时间片,执行完毕后会被移到过期数组,活跃数组和过期数组会周期性交换角色。

image-20250323162106486
image-20250323162254808


2. 调度流程

1. 选择进程

调度器会从活跃数组的 最高优先级非空队列 中选择第一个进程执行。实时进程(优先级 0~99)总是优先于普通进程(优先级 100~139)。

2. 时间片分配
  • 高优先级的进程获得更长的时间片。例如,优先级 0 的进程可能获得 200ms 的时间片,而优先级 139 的进程仅获得 10ms。
  • 时间片用尽的进程会被移至过期数组,等待下一轮调度。
3. 数组切换

当活跃数组中的所有进程时间片耗尽时,调度器交换活跃数组和过期数组的角色,开始新一轮的调度。


3. 动态优先级调整

为了优化系统的响应速度,Linux 2.6 内核提供了动态优先级调整机制:

  • 交互式进程优化:长时间等待 I/O 操作的进程(例如用户界面程序)会被提升优先级,以确保系统响应更及时。
  • CPU 密集型进程惩罚:长时间占用 CPU 的进程会被降低优先级,防止其饿死其他进程。

4. 多核负载均衡

Linux 2.6 内核还引入了多核 CPU 的负载均衡机制:

  • 每个 CPU 独立队列:每个 CPU 核心都维护自己的运行队列,从而减少了锁竞争,提高了并发性能。
  • 负载均衡机制:当某个 CPU 核心空闲时,内核会从其他繁忙 CPU 核心的运行队列中迁移进程,保持多核负载均衡。

5. 优缺点分析

优点:
  • 调度时间复杂度为 O(1):在 Linux 2.6 的 O(1) 调度器中,不论系统中进程数量如何变化,调度决策的时间始终是常数时间 O(1),避免了大规模系统中的性能瓶颈。
  • 实时任务响应快:实时进程(RT 进程)的响应优先级高,系统能够确保它们能迅速获得 CPU 资源。
  • 交互式优化:内核会动态调整交互式进程的优先级,确保用户界面等任务能够得到优先响应,提高用户体验。
缺点:
  • 优先级划分复杂:调度器的优先级划分较为复杂,且需要根据系统的不同需求调节,调整过程不够灵活。
  • 参数调优困难:调度器的细节调整复杂,需要对系统进行大量的测试和调优,增加了内核维护的难度。
  • 被 CFS 替代:虽然 O(1) 调度器在许多场景下表现优秀,但它在处理公平性、灵活性等方面有局限,因此在 Linux 2.6.23+ 版本中被 完全公平调度器(CFS) 取代。

6. 概念小结

Linux 2.6 内核中的 O(1) 调度器通过 多级优先级队列动态数组切换 实现了高效的进程调度。其核心设计思想是 优先级驱动时间片轮转,确保了实时任务的快速响应,同时兼顾了普通任务的公平性。尽管在后来的版本中被 CFS 替代,但 O(1) 调度器的设计理念对现代调度器仍有深远的影响。

Linux 2.6 内核的调度器通过优化进程调度策略和结构设计,不仅提升了系统的调度效率,还增强了对多核系统和大规模进程的适应性,为更高效的操作系统调度奠定了基础。

共勉

在这里插入图片描述
在这里插入图片描述

相关文章:

  • 《哈希表》K倍区间(解题报告)
  • NVIDIA RTX 5090性能参数介绍 一文读懂
  • 构建高性能网络服务:从Reactor模式到现代服务器架构设计
  • SAP将指定EXCEL工作SHEET的数据上传到内表
  • 第一节 布局与盒模型-Flex与Grid布局对比
  • 什么是Sentinel
  • 使用Windows自带的WSL安装Ubuntu Linux系统
  • 1.2、CAN总线帧格式
  • 【c++八股文】Day3:inline与define与constexpr
  • Flotherm许可使用监控
  • Flink中的反压与背压:原理、检测与应对
  • Origin绘制三Y轴柱状图、点线图、柱状点线图
  • 单片机——浮点数转换4位数码管显示
  • inotify-cpp 使用
  • [特殊字符] OpenCV opencv_world 模块作用及编译实践完整指南
  • Node.js特训专栏-实战进阶:7.Express模板引擎选型与使用
  • uniapp打包apk后实现APP消息通知详细教程
  • 【Spring】系统化的 Spring Boot 全栈学习教程,涵盖基础配置、核心功能、进阶实战及文档自动生成
  • 在Springboot项目部署时遇到,centos服务器上,curl请求目标地址不通 ,curl -x 可以请求通的解决办法
  • Spring Bean生命周期(基于spring-beans-6.2.6分析)
  • js特效网站模板下载/宁德市住房和城乡建设局
  • 一键网站制作app/seo优化评论
  • 织梦后台怎么做网站地图/域名权重是什么意思
  • 广州建站公司网站/seo有哪些作用
  • 中文域名.网站/南京网络优化公司有哪些
  • 免费做logo的网站/在线教育