【Linux 系统】进程优先级 - 实践

news/2025/10/16 13:31:12/文章来源:https://www.cnblogs.com/tlnshuju/p/19145414

【Linux 系统】进程优先级 - 实践

2025-10-16 13:29  tlnshuju  阅读(0)  评论(0)    收藏  举报

文章目录

  • 前言
  • 1. 进程优先级
  • 2. 根据优先级进行调度
    • 进程调用的其它算法
  • 3. 了解进程切换

前言

本篇文章,小编会和大家分享进程的优先级部分的知识内容,同时包含简单介绍进程的调度算法以及和进程的切换等方面的知识。

如果有哪方面不够正确,希望大家能够指出。

1. 进程优先级

CPU资源是有限的,在单核场景下,CPU资源只有一份,但是一台机器上有多数的进程需要被调度。所以这就决定了进程之间存在着CPU资源的竞争

Linux在解决这样的问题的时候,就给每一个进程添加了一个属性字段:优先级。Linux在描述进程的时候,采用了一个结构体:struct task_struct。或许在这个进程启动的时候,Linux操作系统就会在struct task_struct中添加进程优先级的描述字段。我们也可以通过ps命令来查看一个进程的优先级属性:

这就为我们透露出来一个信息:

2. 根据优先级进行调度

  • 那么Linux操作系统是如何根据进程的优先级在进行调用的呢?

操作系统的实现,只会更加复杂不会像我们说的这样简单,我们这里仅仅是谈到优先级影响调用。

  • 结论位图结构 + 哈希。实现趋近于O(1)时间复杂度的调度算法。

我们可以理解,Linux中维护了一个struct runqueue的结构体:

struct runqueue
{
struct task_struct **running;
struct task_struct **waiting;
struct task_struct *run[140];
struct task_struct *wait[140];
}
  • 我们会为运行队列维护两个数组,每一个数组存放的就是struct task_struct*的指针,这样指针指向一个进程PCB。而进程的优先级决定着这个进程的PCB的连接位置,例如,一个准备运行的进程优先级为60,那么他就被存储在下标为100的,后面同样的优先级可以采用链表的形式链入数组结构中。

    如果你对数据结构比较敏感,你一定会发现,这不就是哈希桶吗?

    1. [0, 99]的范围是被操作系统内置的一些进程使用的,一般用户的进程是不在这个区间的。
    2. [100, 139]的范围恰好就是一个进程nice值的修改范围[-20, 19]。恰好范围相同

两个队列的的哈希桶

  1. run哈希桶:管理的是运行中的进程,随时准备被CPU进行调度。
  2. wait哈希桶:管理的是等待中的进程。一个刚刚启动的进程/一个刚刚被CPU切换而下的进程(这是一个细节,保证了优先级高的进程不会反复被调度!),链入这个哈希桶中。

但是这样是不够的。当run中的进程都运行结束了,那么我们怎么实现高效的将wait中的进程转化过来进行调度呢?

我们可以采用两个指针:

struct runqueue
{
struct task_struct **running;
struct task_struct **waiting;
}
  • running:指向run哈希桶。所以我们找到需要运行的队列,就找到running指针即可。
  • waiting:指向wait哈希桶。所以我们找到需要的等待队列,就找到waiting指针即可。
    在这里插入图片描述

所以操作系统是通过running指针来找到需要运行的进程的。那么当执行的进程哈希桶已经为空了,这个时候我们就需要调度wait中等待的进程了。由于waitrun的结构是相同的,所以如果我们想要找到需要调用的进程,其实十分的简单:对两个指针的内容进行交换即可!即swap(&running, &waiting);交换两者的指针只会,那么此时running指针指向的就是刚刚的等待的进程哈希桶。此时,CPU又可以愉快的进行调度了!

  • 那么如何得知run哈希桶已经为空了呢?

    我们可以采用位图的数据结构(这里我们只考虑后面40个优先级的进程)。一个bit位又0/1两种状态,我们利用0:表示当前桶为空;1:表示当前桶不为空char bitset[5]结构中,5个元素(每一个元素8个bit位)的值都为0的时候,我们就可以认为这个整个run已经为空了。

进程调用的其它算法

进程调用还有一些算法。CPU 是擦欧总系统根据某种策略下选择的下一个要运行的进程,调用的基本单位可以是进程/线程,具体取决于操作系统的设计。CPU 调度的主要目标就是提高系统的效率和资源利用率

调度算法原理优点缺点使用场景
先来先服务按照进程就绪的队列顺序进行调度简单易于实现肯恩共导致进程饥饿的问题简单的批处理系统
短作业优先优先调度时间最短的进程。分为抢占式和非抢占式平均等待时间较短难于预知每一个进程的调度时间,可能造成进程饥饿适用于可以准确预估作业的环节
轮转调度每一个进程分配一个固定的时间片公平,所有进程都能得到调度。响应时间短时间片设置过长或者过短都会影响性能适用于交互式系统
优先级调度为每一个进程分配优先级,优先级高先执行可以实现关键任务先处理可能导致优先级低的进程饥饿问题适用于优先级分区的系统
多级反馈队列将进程按优先级分配称为多个队列,每一个队列按照不同的调度策略结合多种调度算法的优点,灵活且适应性强实现复杂适用于多任务混合的型系统

而 Linux

3. 了解进程切换

上面都是谈到了根据进程优先级的调度算法。我们还是很想知道,一个进程是如何被CPU切换下来的。

进程切换通常被称为 “上下文切换”(Context Switch)

完。希望这篇文章,能够帮助你/

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

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

相关文章

组织研磨仪厂家品牌推荐/知名品牌,组织研磨仪哪家好?

在生命科学、医学研究、药物开发、食品安全检测等领域,样品前处理是关键环节之一,而组织研磨仪的性能直接影响实验结果的准确性与效率。随着2025年的到来,市场对高通量、高效率、高稳定性的研磨设备需求日益增长。那…

What to do if your NFO files doesnt check to 100%?

https://wiki.tlgetin.cc/doku.php/nfo_incomplete[[nfo_incomplete]] TorrentLeech.org WikiTrace: hnr start outside_seeding_with_utorrent uploaders_wanted about_clients rtorrent nfo_incompleteWhat t…

C# SerialPort send and receive full example

Install-Package System.IO.Ports; //Sender.cs using System.IO.Ports; using System.Text;namespace ConsoleApp35 {internal class Program{static async Task Main(string[] args){await SerialPortSendAsync();Co…

自监督学习在医疗AI中的科技达成路径分析(中)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

The World of Torrents (How it Works?)

https://forums.torrentleech.org/t/the-world-of-torrents-how-it-works/10189The World of Torrents (How it Works?) General discussionApr 201120d​PeterPindokoSuper User1 Apr 2011I found this somewhere an…

进口微量粘度计代理商推荐,优质供应商分享

在实验室的微观世界里,一滴液体的粘度变化可能预示着重大科学发现或技术突破。微量粘度计正是打开这扇微观世界大门的钥匙。   在现代工业研发和质控领域,对微量样品的精确粘度测量需求日益增长。无论是珍贵的生物…

进口高温高压粘度计优质供应商,粘度计代理商推荐

在地下数千米的石油储层中,在化工生产的高温反应釜里,精确的粘度测量正成为能源开发和工业生产的关键技术瓶颈。   高温高压环境下的粘度测量是能源、化工、新材料等领域的核心技术需求。常规粘度计无法在条件下正…

Apache Doris 内部数据裁剪与过滤机制的完成原理

Apache Doris 内部数据裁剪与过滤机制的完成原理pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

2025 年循环烘箱厂家推荐榜:热风循环烘箱厂家聚焦节能智能,这家企业成多行业优选

随着制造业智能化升级,工业烘干设备作为关键生产环节的核心装备,市场需求持续攀升。2025 年工业烘箱市场规模预计保持高速增长,其中热风循环烘箱因适配性强,在食品、医药、电子等领域渗透率不断提升。但市场扩容也…

2598. 执行操作后的最大 MEX——模运算

题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 value 。 在一步操作中,你可以对 nums 中的任一元素加上或减去 value 。 例如,如果 nums = [1,2,3] 且 value = 2 ,你可以选择 nums[0] 减去 value ,得到 n…

2025通风天窗厂家推荐正鑫,专业定制工业厂房通风排烟系统

2025年专业通风天窗厂家推荐:工业厂房通风排烟系统定制指南当前工业厂房通风系统面临的技术挑战在现代工业厂房建设中,通风天窗、排烟天窗、通风气楼等设备承担着至关重要的环境调节功能。然而,随着工业建筑规模的不…

阿里面试:Redis挂了怎么办?集群 节点挂,怎么 恢复数据? 多长时间 的数据 可能 丢失?

本文 的 原文 地址 原始的内容,请参考 本文 的 原文 地址 本文 的 原文 地址 尼恩说在前面 在45岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、…

pg_resetwal 使用简介 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Ubuntu 上安装 PHP 环境

在 Ubuntu 24.04 LTS 上安装 PHP 7.4 及常用环境(Nginx、MySQL、Redis)。 Ubuntu 24.04 默认 APT 源里的 PHP 版本很可能是 8+,所以我们需要通过 第三方 PPA(如 Ondřej Sur 的 PHP PPA) 来安装 7.4。1️⃣ 添加 …

2025年工业陶瓷厂家 TOP 企业品牌推荐排行榜,工业陶瓷,氧化铝陶瓷推荐这十家公司!

工业陶瓷作为现代工业中不可或缺的关键材料,凭借其高硬度、耐高温、耐腐蚀、绝缘等卓越性能,在航天、能源、电子、化工等众多领域发挥着极为重要的作用。近年来,随着各行业对材料性能要求的不断提升以及新材料技术的…

2025年石墨干燥机厂家推荐榜:真空干燥机/振动流化床干燥机/闪蒸干燥机高效环保成主流,这家企业凭实力登顶

随着制造业向自动化、绿色化转型,干燥设备作为关键工艺环节,在化工、新能源、医药等行业中的需求持续增长。2025年,市场对干燥系统的能效、环保适配性及服务质量提出了更高要求。为帮助企业精准选型,我们基于行业技…

2025年空调系统/锅炉房运维服务厂家最新权威推荐榜:专业托管运维与设备维修外包服务深度解析

2025年空调系统/锅炉房运维服务厂家最新权威推荐榜:专业托管运维与设备维修外包服务深度解析随着现代建筑设施日益复杂化,空调系统与锅炉房运维服务已成为保障企业正常运营的关键环节。专业的运维服务不仅能确保设备…

混乱的置换 解题报告

简要题意 给定一个长度为 \(n\) 的序列 \(a\),值域为 \([0,m]\)。将该序列循环右移 \(1\) 位,并记录下当前序列,重复该过程 \(n\) 次。将得到的序列按字典序升序排序,构成一个 \(n \times n\) 的矩阵,给出该矩阵的…

我42岁才顿悟:穷人的富养是带娃到处旅游,富人的富养是教会这一项本事

"15岁儿子连护照都没有的商业巨擘告诉我:真正的富养不是环游世界,而是培养深度钻研能力。当我炫耀带女儿去过20国时,他一句话戳破了百万教育投资的泡沫——旅行是最简单的富养方式,本质上是偷懒。"引言站…

2025年10月环保板材品牌推荐:榜单聚焦西南龙头杰家

在选择环保板材品牌时,关键在于找到最适合自身实际需求的解决方案。中国林产工业协会《2024中国人造板产业报告》显示,2023年全国规模型饰面人造板产量4.1亿平方米,其中ENF级环保板材占比首次突破28%,终端用户满意…