news 2026/7/7 19:23:11

Linux之进程(四)--优先级,进程切换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux之进程(四)--优先级,进程切换

进程优先级

什么是优先级

进程权限:判定进程有没有资格执行某操作,是「能不能做」的准入门槛。

  • 例子:普通用户不能修改/root文件、不能修改其他用户进程的高优先级;root 拥有全部操作权限。
  • 作用:管控资源访问、操作执行的资格。

进程优先级:多个进程同时就绪时,CPU 调度的先后顺序,是「谁先占用 CPU」的排队规则。

  • 例子:高优先级程序会被内核优先分配 CPU 时间片,响应更快;低优先级程序仅在 CPU 空闲时运行。
  • 作用:合理分配 CPU 算力,区分任务轻重缓急。

为什么要有优先级

  1. 区分任务重要程度系统交互程序(终端、桌面)需要高优先级,保证操作流畅;后台批量任务、日志压缩等可降低优先级,不抢占前台资源。
  2. 避免资源饥饿防止计算密集型程序独占 CPU,通过优先级加权分配时间片,保障所有进程都能分到算力。
  3. 优化用户体验前台交互进程优先调度,鼠标、键盘指令立刻响应;后台服务慢速运行,互不干扰。
  4. 服务器资源管控多用户服务器中,可限制普通用户任务优先级,保障核心业务进程算力。

Linux下面是怎么进行设计的

1. Nice 值(NI,用户可调控)

2. PRI(内核动态优先级)

ps命令查看信息
ps aux / ps axj

a:显示一个终端所有的进程,包括其他用户的进程。
x:显示没有控制终端的进程,例如后台运行的守护进程

j:显示进程归属的进程组ID、会话ID、父进程ID,以及与作业控制相关的信息
u:以用户为中心的格式显示进程信息,提供进程的详细信息,如用户、CPU和内存使用情况等

ps -al

-a:显示所有终端进程(含其他用户)
-l:长格式,展示进程完整状态、优先级、父子 PID 等内核信息

字段含义
F进程标志位(十六进制 / 十进制)
S进程状态
UID进程执行者用户 ID
PID进程唯一 ID(进程号)
PPID父进程 PID(创建它的进程)
CCPU 使用率(调度权重)
PRI进程优先级,数值越小优先级越高
NInice 值,用户可调整,范围 - 20~19,影响 PRI
ADDR内核进程地址,用户态进程统一显示-
SZ进程占用内存页面数(1 页 = 4KB)
WCHAN进程阻塞等待的内核函数名(运行中显示-
TTY进程所属终端
TIME进程累计占用 CPU 时间
CMD启动进程的命令

和进程优先级有关的就是pri和ni

如何调整优先级???

对nice的值进行调整,就可以对pri进行调整

这个运行程序的pri为80,ni为0

1.输入 top 打开监控面板
2.按 r 触发 renice 功能
3.输入目标 PID(如 14019)回车
4.输入新 nice 值(10)回车,立即生效

这个运行程序的pri为90,ni为10

1.nice 值的范围 --- 优先级的变化范围?

改变nice可以改变pri的值

所以将nice范围确定就可以确定优先级的变化范围

当我们把nice改成100时,实际上pri的值变化到99

我们在刚刚的基础上有nice改为-10,此时pri不是90,而是70,说明这个变化值是基于原始值80而言的

现在再nice的值变为-100,此时pri是60

Linux 系统对 nice 有固定合法区间:-20 ~ 19,无论输入多大数值,内核都会自动钳位到边界

每个进程初始pri都是80,对pri的改变都是基于80,pri=pri(80)+nice

2.为什么是这个范围?为什么不能随便改??

1.普通用户只能增大 nice 值(0→19),只能降低自己进程优先级,无法设置负数提高优先级。 目的:防止普通用户恶意抢占 CPU,独占系统资源,影响其他用户 / 前台程序。

2.root 可以设置-20~19任意 nice,拥有完整调度调控权限。

3.若无范围限制,用户设置极端优先级会导致低优先级进程长期得不到 CPU,产生进程饥饿,破坏多任务公平调度。

3.进程优先级分两类,高频改优先级??

分时操作系统:给每个进程一定的时间,时间一到就会换下个进程,给进程分配时间片,相对公平,公正的调度策略,较为均衡的让不同的进程都可以再一段时间内得到CPU的资源,绝大部份操作系统用的都是分时操作系统

实时操作系统:只有将当前运行的进程进执行完才会执行下一个进程,这种再工业领域会见到的比较多

补充

竞争性

系统中进程数量远多于 CPU 核心数(常见场景单 CPU 核心),所有进程都需要争抢 CPU、内存、IO 等有限硬件资源,进程天然存在资源争夺关系,这就是竞争性

因为资源有限、进程互相争抢,操作系统才设计了进程优先级、调度算法,用来公平 / 按需分配 CPU 时间片,避免某个进程独占资源导致其他任务卡死(进程饥饿)。

独立性

进程=内核数据结构+代码和数据

每个进程有独属于自己的内核数据结构和代码

父子关系也是有独立性

并行

多个进程再多个cpu下分别同时运行

并发

多个进程再一个cpu下面采用时间片进行轮转,让每个进程得以切换,在一段时间内,多个进程都可以得到推进

进程切换

一、核心定义

CPU 上下文切换 = 进程 / 任务切换,本质是CPU 寄存器现场的保存与恢复。 CPU 硬件内只有一套通用寄存器、程序计数器等硬件资源,但系统中同时存在多个进程,寄存器同一时刻只能存放一个进程的运行数据;当内核需要切换运行任务时,就要完成一次上下文切换。

二、完整切换流程(PPT 原文拆解)

  1. 保存当前进程上下文内核把正在运行进程的全部 CPU 寄存器内容(运行现场),存入该进程自身的栈 / PCB(struct task_struct)中。 作用:记录断点,保证进程下次重新上 CPU 时,能从暂停的位置继续执行。
  2. 载入新进程上下文从下一个待运行进程的栈 / PCB 中,读出它之前保存的寄存器数据,全部加载到 CPU 物理寄存器里。
  3. 执行新进程CPU 按照加载完成的现场,继续运行新任务,切换完成。 这个完整流程就叫做context switch(上下文切换)。

寄存器是共享的,但是寄存器里面的数据本质是私有的,独属于该进程

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

KMS智能激活工具:三步完成Windows和Office永久激活的终极指南

KMS智能激活工具:三步完成Windows和Office永久激活的终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗?Office功能受限让你工作效率大…

作者头像 李华
网站建设 2026/7/3 21:32:23

《PyraFormer》实战解析:如何用金字塔注意力机制攻克长序列预测难题

1. 长序列预测的痛点与PyraFormer的破局思路 时间序列预测一直是工业界和学术界的重点课题。从电力负荷预测到服务器流量监控,再到金融市场的波动分析,准确预测未来趋势能带来巨大的商业价值。但传统方法在面对长序列预测时,往往会遇到两个致…

作者头像 李华
网站建设 2026/7/3 5:18:31

Labelme图像标注实战:从数据准备到模型训练的数据流构建

1. Labelme在AI训练流水线中的核心定位 第一次接触Labelme时,我正为一个农业病虫害检测项目焦头烂额。团队收集了上万张叶片图像,但如何将这些原始数据转化为模型可理解的标注信息成了难题。这时Labelme就像及时雨般出现,它不仅解决了当时的标…

作者头像 李华
网站建设 2026/7/2 13:22:47

Windows Cleaner:专治C盘爆红与系统卡顿的终极解决方案

Windows Cleaner:专治C盘爆红与系统卡顿的终极解决方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经常面临Windows电脑运行缓慢、C盘空间告…

作者头像 李华
网站建设 2026/7/3 4:23:18

Selenium与ChromeDriver环境搭建及自动化测试入门实战

1. 项目概述:为什么我们需要浏览器自动化?在软件开发和测试的日常工作中,我们经常需要重复执行一些基于网页的操作,比如数据抓取、表单提交、功能回归测试,或者验证某个网页在不同条件下的表现。手动点击、输入、刷新&…

作者头像 李华