Linux的调度算法

一:内部结构

今天我们解决这么几个问题在我们一个Linux系统中,要调度那么多进程,那先调度谁,如果有新进程加进来该怎么办,内部到底是怎么处理的

1.runqueue(此图片来自网络)

这个是我们Linux系统的runqueue,听名字就知道,这个就是调度运行中的程序的,也就是管理进程的一个队列,我们看到红圈里,有个queue140,这个queue一共有140 个元素,前一百个是其他种类进程应用的,这些进程优先级大于我们要运行的程序,他们会保护电脑的安危,前一百个我们现在不用管,以后学习到了再说,后四十个,四十这个正好和nice的那-20,19的取值范围正好对应,就是保存了四十个PCB--task_struct ,都是对进程的描述,也就是每个进程的结构体。

这个runqueue用的哈希桶的数据结构,相同优先级的进程会被挂在一起,也就是在哈希桶中的同一个链表里(每个桶都是一个链表)。

2.在Linux的系统中存在两个队列,一个叫活跃队列(active),一个是过期队列(expired),这两个队列是对所有要调度的进程一个管理。

2.1首先回答为什么的问题?为什么要有两个队列,负责全部管理进程

当我们只有一个队列的时候,如果我们的进程被人恶意调度,保持大量程序运行,大量进程需要调度,且这些进程的优先级都很高,而那些已经调度过的进程,也会排队,造成大量拥挤,而那些一直没有调度的,一直需要等待,那么电脑是不是出现了问题。

而当我们有了两个队列的时候,将调度过的进程全部依次放到过期队列,新的进程也要放到过期队列,然后,这就会让active队列一直保持越调度越少的状态,即使有新的进程不断累加,也都会在过期队列乖乖等待下一次的调度。

为什么active队列会越来越少:1.时间片会到,2.进程会退出

2.2接着回答怎么做的问题?两个队列,当活跃队列的全部进程全部都被调度了,活跃队列为空了该怎么做了?两个队列的指针直接交换就可以了。

交换之前:按照优先级调度

交换之后:给了其他优先级进程调度的机会

如何决定什么时候交换:,这里有一个活跃队列进程的数量,当队列里为空,就会进行交换。

3.位图:进行确认位置。

首先声明Linux的内核算法 是O(1)的算法

位图是如何查找位置的:优先级有许多,只能一个一个查有没有进程,会非常浪费,然后就有了位图,位图一共是40个比特位,一共五个字节,一个字节八个比特位。而我们调度的进程是40个,所以每个比特位代表的就是此队列(哈希桶的桶)为不为空。可以通过比特位确定是哪个位置,确定有几个哈希桶里面存了进程。

二:其他概念

竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。
独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰。
并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行。
并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发

三:补充知识

1.进程都要进链表

链表的结构是双向链表结构,但并不是这样的结构,因为上面的结构拓展性非常差,Linux链表是这样的结构,没有数据。。

而且PCB里面的属性,把它们连接在了一起,用的是内部的数据结构,属性是在数据结构外部的。

,在PCB中,每每成了链表。

这样做的意义是什么?一个进程,既可以在全局的链表中,又可以在任何一个其他数据结构中,只要加节点字段就可以。所以就到了下面的第二点,它也在调度队列,也可以在阻塞队列,既不脱离全局队列,也可以保持在其他数据结构。

2.进程在调度队列,阻塞队列中

相关推荐
张小姐的猫2 天前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节
工业HMI实战笔记3 天前
印刷电路板HMI:SMT贴装的元件定位界面
制造·设计规范·设计语言·1024程序员节
Martina_03214 天前
AI生成3D模型一合并网格,材质就串色?用6步检查材质槽、UV与图集重映射
图像处理·人工智能·3d·材质·uv·游戏策划·1024程序员节
橙光成长4 天前
android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送
android·1024程序员节
燃烧的枫5 天前
Windows 下 YOLO11 Pose 的 TensorRT C++ 部署
windows·yolo·tensorrt·1024程序员节·yolo11-pose
AI日报派送佬5 天前
2026年11月02日 AI 行业日报|商汤开源 Loop-9B、Pika 发布 H3 Flex 音视频模型、Meta× 傅利叶推出人形机器人 Max
人工智能·微软·开源·音视频·openai·1024程序员节·ai日报
avi91115 天前
【AI教人】UnityEditor扩展Spine动画,Spine骨骼,预览Preview一切
spine·骨骼动画·1024程序员节·editor扩展·spine动画·spine骨骼
开开心心就好5 天前
网页图片批量下载工具,输入链接就保存
服务器·算法·leetcode·支持向量机·pdf·ocr·1024程序员节
Martina_03215 天前
AI生成的3D模型打印后沿层纹开裂?用6步检查方向、壁厚与填充
图像处理·人工智能·数学建模·3d·自然语言处理·游戏策划·1024程序员节