【Linux系统】进程优先级:进程间的权力游戏

devtools/2025/3/13 18:37:04/

Linux系列


文章目录

  • Linux系列
  • 前言
  • 一、优先级的概念
  • 二、查看、修改优先级
    • 2.1、查看优先级
    • 2.2、修改指令
  • 三、Linux o(1)调度算法
    • 3.1、内核调度器算法的工作方式


前言

进程优先级调度是是指操作系统,根据进程的优先级来分配CPU资源的一种调度算法。系统会为每个进程分配一个优先级,优先级高的进程会优先获取CPU资源,从而更好地决定进程执行顺序。这种机制极大程度上提高了,系统的运行效率。

一、优先级的概念

首先,要知道这几个概念:
1、什么是优先级?
优先级就是对于系统资源,谁先访问,谁后访问的问题。
2、为什么要有优先级?
因为对于一个多任务的操作系统来说,CPU资源有限,进程是多个的,注定了进程之间是竞争关系,而如果一个进程长时间得不到CPU资源,该进程就一直得不到推进(就相当于某个程一直无法启动),我们称这个为进程饥饿问题,而操作系统为了规避这种情况,保证进程间的良性竞争,就给每个进程分配了对应的优先级(号码牌),进程就拿着自己的优先级去排队了。
总结一下:

  • 优先级:对CPU资源访问优先的问题
  • 存在原因:CPU的资源不足
  • 优先级高的比优先级低的更早被调度,能够确保关键任务及时完成,同时提高系统的运行效率

二、查看、修改优先级

2.1、查看优先级

随便写的程序,用来演示

  1 #include<stdio.h>  2 #include<unistd.h>  3 int main()  4 {5   while(1)6   {7                                                               8   }9   return 0;10 }        

在这里插入图片描述

在Linux系统中,PRI(Priority)NI(Nice)两个参数共同决定了进程的优先级,影响进程的调度顺序。
可以通过ps指令来查看具体信息。
PRI(Priority)
PRI是进程的最终优先级,由内核通过计算得到,直接影响调度器为进程分配CPU资源的顺序。
优先级数值越小,优先级月高!!
PRI的范围

  • 实时任务:范围为0到99
  • 普通任务:范围为100到139

实时任务:是指必须在规定时间内完成处理,并对响应时间和处理结果的准确性有严格要求的。
普通任务:是指对时间要求宽松没有严格时间限制的任务。

PRI的计算公式
PRI(new)=PRI(old)+NI(nice)
其中:

  • PRI(old):是进程原来优先级(其实对我们写的程序来说固定为80)
  • NI:是进程的nice值,我们可以通过设置不同的nice达到改变进程优先级的目的,但是操作系统规定nice值的范围必须在【-20,19】

对于我们执行的程序,优先级一般初始为80。

2.2、修改指令

NI(Nice)
NI值是用户空间设置的静态优先级,默认值为0,用户可以通过对NI赋予不同的值,来达到修改优先级的目的,帮助我们对一些比较重要的程序,优先分配CPU资源。如果修改NI的值超过规定空间,如:设为30,则NI会取其范围内最靠进的值19.
修改NI的值
启动top命令,进入下面页面:

在这里插入图片描述
找到要修改进程的PID,可使用/搜索,按下r键,输入要修改进程的PID,输入后直接回车,系统会提示你输入要修改的值,下面为我输入19后的值,其进程优先级修改结果为:
在这里插入图片描述
注意,我们平时不建议修改进程优先级,内核调度器分配的优先级是比较合理的,如果改动可能会导致进程响应变慢。

三、Linux o(1)调度算法

3.1、内核调度器算法的工作方式

一个CPU绑定一个运行队列,和两个优先级队列,在这两个优先级队列中,一个是活跃的一个是过期的,每个优先级队列包含140个优先级:
在这里插入图片描述

在这个优先级队列中,按优先级顺序存储着PCB结构体对象的指针,如果有两相同优先级的进程,那么他们的PCB结构体通过指针链接起来进行排队,另外操作系统还会为他创建一个对应的位图,同过遍历位图的方式判断,对应位置是否为空,若不为空则对该位图映射对应的优先级队列位置的进程,进行调度,被调度的进程时间片消耗完后,就会去另一个不活跃的优先级队列中,重新进程排对,当CPU将活跃优先级队列遍历完后,此时只要将活跃优先级的队列同不活跃优先级的队列的指针交换,就可以再次遍历队列,调度进程了,而这个交换的时间复杂度为o(1),因此被称为,o(1)的调度算法。

在这里插入图片描述


http://www.ppmy.cn/devtools/166830.html

相关文章

【Node.js】--- win11安装 Node.js

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Node.js】--- win11安装 Node.js 开发环…

html css网页制作成品——糖果屋网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…

基于Python+SQLite实现校园信息化统计平台

一、项目基本情况 概述 本项目以清华大学为预期用户&#xff0c;作为校内信息化统计平台进行服务&#xff0c;建立网页端和移动端校内信息化统计平台&#xff0c;基于Project_1的需求实现。 本项目能够满足校内学生团体的几类统计需求&#xff0c;如活动报名、实验室招募、多…

网络tcp协议设置,网络tcp协议设置不了

网络TCP协议的设置通常涉及到多个方面&#xff0c;包括IP地址、子网掩码、默认网关、DNS服务器等参数的配置&#xff0c;以及TCP/IP协议栈本身的配置。如果遇到网络TCP协议设置不了的问题&#xff0c;可能是由多种原因导致的。以下是一些可能的原因及解决方法&#xff1a; 一、…

用Python写一个天气预报小程序

一、界面效果 二、完整代码 import tkinter as tk from tkinter import ttk import requests import json from datetime import datetime from PIL import Image, ImageTk import io from ttkbootstrap import Styleclass WeatherApp:def __init__(self, root):self.root ro…

LINUX 安装1Panel

一、如果有外网快速安装&#xff08;1Panel - 现代化、开源的 Linux 服务器运维管理面板 - 官网&#xff09; curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh 二、安装成功后&#xff0c;控制台会打…

Flutter 基础组件 Text 详解

目录 1. 引言 2. 基本使用 3. 自定义样式 4. 文本对齐与溢出控制 5. 外边距 5.1 使用 Container 包裹 5.2 使用 Padding 组件 5.3 在 Row/Column 中使用 5.4 动态边距调整 5.5 关键区别说明 5.6 设置 margin 无效 6. 结论 相关推荐 1. 引言 Text 组件是 Flutter 中…

word处理控件Aspose.Words教程:使用 Python 删除 Word 中的空白页

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理&#xff0c;并…