news 2026/7/7 14:41:17

linux——进程调度(时间片+优先级轮转调度算法O(1))

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
linux——进程调度(时间片+优先级轮转调度算法O(1))


❀保持低旋律节奏->个人主页

专栏链接:《C++学习》、《Linux学习》



文章目录

  • 一、进程优先级前置知识1
    • 1.什么是优先级?
    • 2.为什么存在优先级?
    • 3.优先级的实现
      • 3.1优先级在内核里面的体现
      • 3.2优先级公式
      • 3.3代码
      • 3.4优先级范围
  • 二、进程的性质前置知识2
    • 1.进程四大性质
    • 2.寄存器
  • 👍三、内核进行O(1)进程调度——O(1)调度算法
  • requeue
    • 1.queue[140]优先级
    • 2.bitmap位图
    • 3.进程饥饿问题——acitve/expired queue 活跃队列/过期队列
    • 4.nr_active
    • 5.*active *expired
    • nice延迟修正优先级的妙处
    • 整个调度过程


本章着重介绍 内核调度进行的核心算法O(1)调度算法。 再次基础上我们需要先补充一些优先级的前置知识。以此来引出PRI(新) = PRI(旧)+NIC 这个公式。然后重点学习 CPU里面的requeue 的结构和组成。并学习requeue每一部分组成存在的必要性和价值。 以此来彻底弄懂 内核进行调度 ——O(1)调度算法整个工作过程。

一、进程优先级前置知识1

1.什么是优先级?

进程得到某种资源的先后顺序就叫做优先级

  • 优先级和权限的区别?
    优先级是进程得到某种资源的先后顺序,权限是进程能不能得到某种资源

2.为什么存在优先级?

这一点我们在后面 如何实现 分布操作系统具有相对的公平性的时候具体讲解

3.优先级的实现

3.1优先级在内核里面的体现

  • 优先级在内核里面的体现
    进程优先级,本质上是task_struck里面的整数
  • 优先级核心公式

3.2优先级公式

PRI(新) = PRI(旧)+NIC
NIC:nice:进程优先级修正数据

用户无法直接修改PRI 只能通过修改NIC以此来实现修改PRI的目的。

3.3代码

优先级修改方法

  • top的使用 着重掌握top!

top -> r ->输入pid -> 输入要修改的NIC

修改前与修改后的对比

[root@VM-0-12-centos ~]# ps -alF SUIDPIDPPIDC PRI NI ADDR SZ WCHAN TTY TIME CMD0S100120323157530800-3307hrtime pts/0 00:00:00 proc.exe4R020343156530800-38332- pts/1 00:00:00ps
[root@VM-0-12-centos ~]# ps -alF SUIDPIDPPIDC PRI NI ADDR SZ WCHAN TTY TIME CMD0S1001203231575309010-3307hrtime pts/0 00:00:00 proc.exe4R020417156530800-38332- pts/1 00:00:00ps
  • nice使用代码
nice-n10./test.sh#1. 基础用法:默认优先级启动程序sudonice-n -5 python3 server.py#2. 高优先级启动(需 root 权限)nice./app.exe#3. 默认优先级(省略 -n 0)
  • renice使用方法
renice81234#1. 按 PID 调整单个进程sudorenice15-u username#2. 调高新进程优先级(root 权限)sudorenice15-u username#3. 批量调整同一用户的所有进程

3.4优先级范围

细节:linux是一种分时操作系统(与之相对的是实时操作系统)
分时操作系统尽可能保证公平(多线程)
不能让用户随意设置优先级

因此 NIC的取值范围[-20,19]
PRI[60,99]
一共40个数字

二、进程的性质前置知识2

1.进程四大性质

进程具有四大特性

1.竞争性
2.独立性
3.并行性:进程在多个CPU下分别同时运行称之为并行性(一般大型服务器都存在多个CPU)
4.并发性:多个进程在一个CPU下采用进程切换的方式,在一段时间内,让多个进程的以推进称之为并发性。

  • 小问题:进程不断切换 为什么我们的电脑感受不到卡顿呢?
    因为每个进程切换的周期特别特别短,短到甚至可能到微妙 纳秒的级别。

时间片:每个进程拥有CPU的市场叫做时间片。在task_struct里——int counter

  • 小问题:CPU是频繁切换进程的,那假如进程a被切走、下一次再切回到进程a。是如何保证能正常访问到进程a想要的数据呢》

2.寄存器

CPU里面存在着寄存器。这些寄存器用来保存正在执行的临时数据。方便再次切换到原来的进程可以直接访问
这也是为什么 我们return 一个局部变量的时候。即使局部变量出作用域被销毁 也能正常return 它的值。本质return的不是局部变量而是存储再寄存器里的临时数据!

结论:寄存器!=寄存器内部的数据
寄存器内部的数据被叫做当前进程硬件的上下文
当前进程的硬件上下文保存再任务状态段里面,任务状态段再PCB内部。

👍三、内核进行O(1)进程调度——O(1)调度算法

requeue

每个CPU都拥有一个requeue

1.queue[140]优先级

queue[MAX_PRIO]最大就是140
每一个queue[i] 都是一个队列
后40个是针对于分时操作系统
前100针对于实时操作系统

我们现在着重讲解后40个

40个队列:我们可以把不同的进程放到不同的队列中。一个队列可以拥有多个进程。但是一个队列里的优先级都是一样的。
对相同优先级进程中选择FIFO的做法

2.bitmap位图

标记 “存在 / 不存在”(经典场景:去重、判重)
比如要记录 “1000 万个整数是否出现过”:
不用位图:用数组 / 哈希表,至少占 1000 万 × 4 字节 = 40MB 内存。
用位图:仅需 1000 万 ÷ 8 = 约 1.2MB 内存(1 个 bit 对应 1 个整数的 “是否存在”)。

3.进程饥饿问题——acitve/expired queue 活跃队列/过期队列

我们都知道 进程是按照 优先级来调度的
那么如果队列a的优先级高于 队列b的优先级。那队列b 不久永远不会被调用了吗?

  • 活跃队列/过期队列
    再runqueue里面存在2个[140]d的队列
    分别是active queue——活跃队列 和 expired queue——过期队列
    如果一个进程被调度过 那么他就会被放在过期队列。过期队列不会被调用。 与此对应 过期队列里的一个进程进入到活跃队列里面来 (通过swap实现)

4.nr_active

记录活跃进程的个数

5.*active *expired

保证能够从 avtive queue ——> expired queue 持续时间片轮转

nice延迟修正优先级的妙处

假如我们想要修改一个进程a优先级80->90,那么正常情况下 我们需要先修改优先级 然后再把这个进程 从80队列里面抽离出来 然后再放到90队列里面。 这本质上是一个非常浪费时间和空间的行为。

因此我们使用nice 延迟修正。先修改优先级,不进行原队列抽离。 等活跃队列和过期队列进行swap交时进行 两个进程的交换。这样就大大节省了时间效率。

整个调度过程

*acitve ——> avtivequeue ——> 查看nr_avtive 不为0 ——> bitmap[]查数组下标存在 ——> 选择进程 ——> 拿去active queue 头一个

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

Open-AutoGLM数据保护全链路方案(从备份到自动恢复的实践指南)

第一章:Open-AutoGLM 失败恢复数据保护在大规模语言模型推理系统 Open-AutoGLM 的运行过程中,任务执行可能因硬件故障、网络中断或服务异常而中断。为确保数据完整性与任务可恢复性,系统设计了多层级的失败恢复与数据保护机制。持久化检查点机…

作者头像 李华
网站建设 2026/7/7 8:01:40

Excalidraw支持量子计算线路图绘制

Excalidraw 支持量子计算线路图绘制 在量子算法设计的研讨会上,一位研究员正通过共享链接邀请团队成员进入一个虚拟白板——画布上并非传统意义上规整冷峻的电路图,而是一幅带有轻微“手绘抖动”的量子线路草图:H门像被铅笔轻轻勾勒出的圆圈&…

作者头像 李华
网站建设 2026/7/7 16:21:51

脑机接口+AI:万亿美元市场的前夜,将如何重塑医疗与教育?

引言 当人工智能不再是科幻小说的专属,当意念控制逐渐走出实验室,一场由“脑机接口(BCI)人工智能(AI)”共同掀起的科技海啸正奔涌而至。据麦肯锡等权威机构预测,到2030-2040年,全球脑…

作者头像 李华
网站建设 2026/7/7 12:50:02

发展中国家的AI弯道超车:医疗AI的低成本本土化之路

引言 在2025年的今天,人工智能技术正以前所未有的速度改变全球医疗健康领域的格局。对于资源有限的发展中国家而言,如何在西方主导的AI医疗发展模式之外,探索出一条符合本国国情、成本可控、可持续发展的医疗AI本土化路径,已成为关…

作者头像 李华
网站建设 2026/7/7 11:31:47

Open-AutoGLM手势控制进阶指南,精准触发率提升至99.8%

第一章:Open-AutoGLM手势控制技术概述Open-AutoGLM 是一种基于视觉感知与大语言模型融合的智能手势控制系统,旨在实现自然、低延迟的人机交互体验。该系统通过摄像头实时捕捉用户手势动作,结合深度学习模型进行关键点识别,并将语义…

作者头像 李华
网站建设 2026/7/7 17:48:57

计算机毕设Java奖学金管理信息系统 基于Java的高校奖学金管理平台设计与实现 Java技术驱动的奖学金管理系统开发

计算机毕设Java奖学金管理信息系统3b2sg9(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。在当今数字化时代,高校奖学金管理面临着诸多挑战。传统的管理方式不仅效率低…

作者头像 李华