当前位置: 首页 > news >正文

【Linux】进程优先级(进程优先级 Linux下优先级 用top命令更改已存在进程的nice 其他概念 进程切换)

文章目录

  • 进程优先级
  • Linux下优先级
    • 用top命令更改已存在进程的nice:
  • 其他概念
  • 进程切换


进程优先级

我们作为使用者一般不关心优先级,它跟我们的调度器有很大的关系,调度器是为了跟均衡的调度进程。

什么叫做优先级?

优先级和权限是两码事,权限决定的是能还是不能的问题,优先级前提是已经能了,决定的是能的时候先做还是后做的问题。
优先级就是先还是后获得某种资源的能力,先获得优先级高。

为什么存在优先级?

因为资源太少了。系统可能存在几十个进程,但CPU只有一个,系统可能存在十几二十几个进程都要访问网卡,但是网卡只有一个。所以在任何系统里硬件资源一定是少数,软件资源要用硬件资源的跟多,所以要争,即确认优先级,排队。

Linux下优先级

Linux优先级的特点:

优先级本质就是PCB里面的一个整数数字(也可能是几个),在Linux中是用两个整数来确定优先级的,这两个整数叫PRINI

首先写一个进程:

在这里插入图片描述

ps -la就可以查到我这个用户所能查到的指令

在这里插入图片描述

Linux支持进程运行中,进行优先级调整,调整的策略就是更改nice完成的。
我们可以看到Linux下的优先级是80,那么它一般的范围是多少呢?优先级受nice值的影响,换句话说nice值的范围决定最终优先级的范围。
所以我们运行一个进程,然后去调整它的优先级,下面试着调一下:

用top命令更改已存在进程的nice:

先改一下代码,并运行,
在这里插入图片描述

在这里插入图片描述

第一步先top,
在这里插入图片描述

然后输入r,r就是rnice的意思,rnice就是重新设置,默认的进程的pid就是29788 ,我要改的是21837,

在这里插入图片描述

所以就输入21837,
在这里插入图片描述

回车后发生改变:

在这里插入图片描述

就变成了 Renice PID 21837 to value,所以我们此时就相当于调整了nice值,一般在优先级当中,优先级的PRI数字越小,代表优先级程度越高。
此时给nice值改成 -100:
在这里插入图片描述

在这里插入图片描述

设置的时候,调优先级本来就会影响调度器的效率,所以在设置的时候可能要进行权限的设置。所以我们sudo top:

再去操作,Renice PID 21837 to value -100,然后查看进程优先级:

在这里插入图片描述

PRI优先级变成了60,优先级被调高了。

我们继续操作:Renice PID 21837 to value 100

在这里插入图片描述
此时nice值变成了19。得到下结论:nice的范围

nice [-20,19]
所以我们的nice值有上下限。

继续操作:Renice PID 21837 to value 100

在这里插入图片描述

PRI的优先级为89,如果是按照 最终优先级 = 老的优先级 + nice就发现出现了问题,按理优先级应该为 99 + 19 ,但是结果是89,那么就得出另一个结论:每一次设置的时候,老的优先级都是从80开始的。这样就更好的限制了最终优先级一定在 [80-20, 80+19] ,不会出现奇怪的情况。

其他概念

竞争性:资源有限必须确定优先级。

独立性:多进程运行,多进程运行期间互不干扰,各进程独享自己的资源。

修改代码:
在这里插入图片描述

刚开始子进程肯定是在跑的,跑一会就退了,

在这里插入图片描述

发现子进程退出了, 变僵尸了,但是父进程还在跑,这就证明进程具有独立性。代价就是花费跟多的资源。

并行:

对我们来讲,我们的笔记本一般就一个CPU,不考虑多核,当我们只有一个CPU的时候,任何时刻我们只能有一个进程正在运行。有的大的云服务器,双CPU,那么意味着它在任何一个时刻,它可以有两个进程同时运行,这种同时在运行的进程我们称为并行。

并发:

在这里插入图片描述

那我们发现我们计算机好像有多个进程在跑,只有一个CPU的时候,这个进程不是在CPU跑完了才能被从CPU拿下来,当代计算机采用的是时间片轮转的策略,也就是说,我们不管进程未来执行完花多少时间,我们只给这一次10ms的时间让进程占有CPU,那么时间到了,进程就必须从CPU剥离下来,要么等吧,要么就去进程队列尾部重新排队。多进程在同一个CPU下我们采用进程不断切换的方式,那么就可以让一个系统内的一个单CPU的计算机,采用进程切换的方式在一个时间段内,同时让多个进程代码可以推进的行为叫做并发

进程切换

进程在切换的时候,可以让多个代码同时推进,那么如何切换呢?

一个CPU内部存在大量的寄存器,虽然寄存器很多,但是只有一套硬件寄存器,这些寄存器里有用户可见和用户不可见的(状态寄存器、权限寄存器),当计算机调度某个进程的时候,CPU把这个进程的PCB的地址加载进寄存器,CPU里的寄存器就能找到进程的PCB也就能找到代码和数据。pc/eip (指令计数器)是一个关键的寄存器。对我们来讲CPU一直做着三件事情:1.取指令 2.分型指令 3.执行指令,这里的指令就是我们代码中的指令,所以eip中就保存着当前正在执行指令的下一条指令的地址,相当于CPU里面有一个专门用来标识下一次从当前进程什么位置去读去对应代码或指令的寄存器。读进去之后会参与计算,计算的时候也有一些寄存器参与计算(eb、ec、ed、ex),当我们的进程在运行的时候一定会产生非常多的临时数据,这份数据属于当前进程。
CPU内部虽然只有一套寄存器硬件,但是,寄存器里面保存的数据,是属于当前进程的。

寄存器硬件 != 寄存器内的数据

在这里插入图片描述
进程在运行的时候占有CPU,但是进程不是一直要占有到进程结束。例如:while(1)。进程在运行的时候都有自己的时间片。因为进程有时间片,所以每个进程在单CPU上跑的时候,有可能出现进程没跑完就被拿下去,当一个进程没跑完被拿下去了,肯定要考虑下次被拿回来。
举个在校生当兵的例子:
离开学校,保留学籍,上下文保护
回到学校,回复血迹,上下文恢复
为什么要保留和恢复?

保留的手段,恢复是目的。所以,完成保留和恢复,就相当于进程完成了一次切换。学校就是CPU,我就是进程,那么部队就相当于某种等待队列,所以当进程从CPU被剥离的时候,首先要做的就是保留CPU的内寄存器的数据,注意不是寄存器,而是寄存器里的数据。

进程在切换的时候要进行进程的上下文保护(CPU的内寄存器的数据),当进程在恢复运行的时候,要进行上下文的恢复。

在任何时刻,CPU里面的寄存器里面的数据,看起来是在大家都能看到的寄存器上,但是,寄存器内的数据,只属于当前运行的进程!

寄存器被所有进程共享,寄存器内的数据,是每一个进程各自私有的------上下文数据。

相关文章:

【Linux】进程优先级(进程优先级 Linux下优先级 用top命令更改已存在进程的nice 其他概念 进程切换)

文章目录进程优先级Linux下优先级用top命令更改已存在进程的nice:其他概念进程切换进程优先级 我们作为使用者一般不关心优先级,它跟我们的调度器有很大的关系,调度器是为了跟均衡的调度进程。 什么叫做优先级? 优先级和权限是两…...

2016年chatGPT之父Altman与马斯克的深度对话(值得一看)

2016年9月,现今OpenAI CEO,ChatGPT之父,时任创投公司Y Combinator的总裁Sam Altman在特斯拉加州弗里蒙特工厂采访了埃隆马斯克。马斯克阐述了创建OpenAI的初衷,以及就他而言,对于未来最为重要的五件事。这是OpenAI的两…...

基于vscode开发vue3项目的详细步骤教程 3 前端路由vue-router

1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客 3、基于vscode开发vue项目的详细步骤教程_水w的博客-CSDN博客 4、基于vscode开发vue项目的详细步骤教程 2 第三方图标库FontAw…...

【C语言】每日刷题 —— 牛客语法篇(5)

前言 大家好,继续更新专栏 c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解。 🏡个人主页:悲伤的猪大肠9的博…...

操作系统(2.1)--进程的描述与控制

目录 一、前驱图和程序执行 1.前驱图 2.程序顺序执行 2.1 程序的顺序执行 2.2 程序顺序执行时的特征 3. 程序并发执行 3.1程序的并发执行 3.2 程序并发执行时的特征 一、前驱图和程序执行 1.前驱图 前趋图:是一个有向无循环图,用于描述进程之间执行的前后…...

JAVA查看动态代理类

JAVA查看代理类 1. 代理类 class 生成 System.setProperty // jdk8及之前的设置System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");// or System.getProperties().put("sun.misc.ProxyGenerator.saveGenerated…...

Chapter2 : SpringBoot配置

尚硅谷SpringBoot顶尖教程 1. 全局配置文件 SpringBoot使用一个全局的配置文件 application.properties 或者 application.yml ,该配置文件放在src/main/resources目录或者类路径/config目录下面, 可以用来修改SpringBoot自动配置的默认值。 yml是YA…...

手撕单链表练习

Topic 1:LeetCode——203. 移除链表元素203. 移除链表元素 - 力扣(LeetCode)移除链表中的数字6操作很简单,我们只需要把2的指向地址修改就好了,原来的指向地址是6现在改为3这个思路是完全正确的,但是在链表…...

Kubuntu安装教程

文章目录Kubuntu介绍下载Kubuntu在VMware虚拟机中安装Kubuntu1. 点击“创建新的虚拟机”2. 选择“自定义(高级)”3. 按照下图所示进行设置设置网络4. 点击“自定义硬件”5. 开启虚拟机6. 进入安装界面,选择中文,之后点击“安装Kub…...

[蓝桥杯] 树状数组与线段树问题(C/C++)

文章目录 一、动态求连续区间和 1、1 题目描述 1、2 题解关键思路与解答 二、数星星 2、1 题目描述 2、2 题解关键思路与解答 三、数列区间最大值 3、1 题目描述 3、2 题解关键思路与解答 标题:树状数组与线段树问题 作者:Ggggggtm 寄语:与其…...

Matlab-Loma Prieta 地震分析

此示例说明如何将带时间戳的地震数据存储在时间表中以及如何使用时间表函数来分析和可视化数据。 加载地震数据 示例文件quake.mat包含 1989 年 10 月 17 日圣克鲁斯山脉 Loma Prieta 地震的 200 Hz 数据。这些数据由加州大学圣克鲁斯分校查尔斯F里希特地震实验室的 Joel Yelli…...

Spring Boot全局异常处理

使用注解方式处理全局异常使用 ControllerAdvice (RestControllerAdvice) 配合 ExceptionHandler适用于返回数据的请求(一般是RESTful接口规范下的JSON报文)package com.example.exception;import org.slf4j.Logger; import org.s…...

websocket每隔5秒给服务端send一次信息

websocket轮询每隔5秒给服务端send一次信息,主要功能点如下:socket 采用了定时器 setInterval() 需要清除定时器否则会报错监听了突然关闭浏览器窗口,destroyed里面直接监听 window.removeEventListener("beforeu…...

2023年中职网络安全——SQL注入测试(PL)解析

SQL注入测试(PL) 任务环境说明: 服务器场景:Server2312服务器场景操作系统:未知(关闭链接)已知靶机存在网站系统,使用Nmap工具扫描靶机端口,并将网站服务的端口号作为Flag(形式:Flag字符串)值提交。访问网站/admin/pinglun.asp页面,此页面存在SQL注入漏洞,使用排…...

利用蜜罐捕捉攻击实验(31)

预备知识 1、蜜罐的含义和作用 蜜罐(Honeypot)是一种在互联网上运行的计算机系统。它是专门为吸引并诱骗那些试图非法闯入他人计算机系统的人(如电脑黑客)而设计的,蜜罐系统是一个包含漏洞的诱骗系统,它通过模拟一个或多个易受攻击的主机&#xff…...

PyTorch深度学习实战 | 自然语言处理与强化学习

PyTorch是当前主流深度学习框架之一,其设计追求最少的封装、最直观的设计,其简洁优美的特性使得PyTorch代码更易理解,对新手非常友好。本文主要介绍深度学习领域中自然语言处理与强化学习部分。自然语言区别于计算机所使用的机器语言和程序语…...

测牛学堂:接口测试基础理论和工具的使用

接口测试流程总结 1 需求分析,看产品经理的需求文档 2 接口文档解析,开发编写的api接口文档 3 设计测试用例 4脚本开发 5 执行及缺陷跟踪 6 生成测试报告 7接口自动化持续集成 测试解析接口文档 接口文档,又称为api文档,是由后…...

定长内存池的实现

解决的是固定大小的内存申请释放需求&#xff1a; 性能达到极致不考虑内存碎片问题(统一使用自由链表管理还回来的空间) 为了避免命名污染&#xff0c;不要直接using namespace std;只展开常用的。 #include <iostream> using std::cout; using std::endl;申请空间时有…...

三更草堂springSecurity的学习

源码地址&#xff1a;学习springSecurity (gitee.com) git&#xff1a;https://gitee.com/misszyg/spring-security.git 一&#xff0c;认证流程 1&#xff0c;经过UsernamePasswordAuthenticationFilter &#xff08;1&#xff09;传入了用户的账号&#xff0c;密码 源码&a…...

【C语言】指针的深度理解(一)

前言 我们已经了解了指针的概念&#xff0c;一是指针变量是用来存放地址的&#xff0c;每个地址都对应着唯一的内存空间。二是指针的大小是固定的4或8个字节&#xff08;取决于操作系统&#xff0c;32位的占4个字节&#xff0c;64位的占8个字节&#xff09;。三是指针是有类型…...

RMBG-2.0创意应用:为LoRA训练准备高质量透明主体数据集方法

RMBG-2.0创意应用&#xff1a;为LoRA训练准备高质量透明主体数据集方法 1. 项目背景与价值 在AI图像生成领域&#xff0c;LoRA&#xff08;Low-Rank Adaptation&#xff09;训练已经成为个性化模型定制的重要技术。但要训练出高质量的LoRA模型&#xff0c;最关键的基础就是准…...

音频压缩新体验:Qwen3-TTS-Tokenizer-12Hz开箱即用实战指南

音频压缩新体验&#xff1a;Qwen3-TTS-Tokenizer-12Hz开箱即用实战指南 想体验把一首歌压缩到极致&#xff0c;还能几乎无损地还原回来吗&#xff1f;或者&#xff0c;你正在做语音合成项目&#xff0c;苦于音频数据太大&#xff0c;传输和存储都是问题&#xff1f; 今天&…...

雯雯的后宫-造相Z-Image-瑜伽女孩显存占用分析:FP16 vs BF16精度下的GPU资源对比

雯雯的后宫-造相Z-Image-瑜伽女孩显存占用分析&#xff1a;FP16 vs BF16精度下的GPU资源对比 1. 引言&#xff1a;为什么需要关注显存占用&#xff1f; 当你使用AI模型生成瑜伽女孩图片时&#xff0c;是否遇到过显存不足的问题&#xff1f;或者想知道如何在不升级硬件的情况下…...

从浪涌抑制到恒温加热:手把手拆解NTC和PTC在开关电源与电机保护中的经典电路

从浪涌抑制到恒温加热&#xff1a;手把手拆解NTC和PTC在开关电源与电机保护中的经典电路 在硬件设计领域&#xff0c;热敏电阻的应用往往决定了电路的可靠性与稳定性。NTC和PTC这两种看似简单的元件&#xff0c;却能在关键时刻成为系统安全的守护者。本文将带您深入两种典型电路…...

CRC校验在Modbus协议中的隐藏技巧:如何用CRC-16提升工业设备通信可靠性

CRC-16在Modbus RTU协议中的工业级优化实践 工业自动化领域对通信可靠性的要求近乎苛刻。想象一下&#xff0c;当一台高速运转的包装机因为一个被篡改的温度传感器数据而突然停机&#xff0c;或者炼油厂的流量计因传输错误导致控制阀误动作——这些场景带来的损失远超通信协议本…...

Nunchaku FLUX.1 CustomV3效果展示:多角色互动场景中姿态/光影/透视一致性保障

Nunchaku FLUX.1 CustomV3效果展示&#xff1a;多角色互动场景中姿态/光影/透视一致性保障 1. 引言&#xff1a;当AI绘画遇上复杂场景 你有没有试过让AI画一张多个人物互动的图&#xff1f;比如两个人在咖啡馆聊天&#xff0c;或者一群朋友在公园里野餐。结果常常让人哭笑不得…...

Qwen3.5-9B行业应用:建筑图纸关键信息提取+自然语言说明生成

Qwen3.5-9B行业应用&#xff1a;建筑图纸关键信息提取自然语言说明生成 1. 项目概述 Qwen3.5-9B是阿里云推出的新一代多模态大模型&#xff0c;在建筑行业图纸处理领域展现出强大的应用潜力。该模型基于unsolth/Qwen3.5-9B架构&#xff0c;通过Gradio Web UI提供服务&#xf…...

NEC红外编解码模块:UART接口即插即用设计解析

1. 红外解码编码模块技术解析与工程实现红外通信作为最成熟、成本最低的短距离无线控制技术之一&#xff0c;在消费电子、工业控制和智能家居领域持续发挥着不可替代的作用。本模块并非简单的红外收发器件堆叠&#xff0c;而是一个经过完整协议封装、具备标准化串口接口的嵌入式…...

RISC-V开发实战:手把手教你用wfi指令优化嵌入式系统功耗(附代码示例)

RISC-V开发实战&#xff1a;用wfi指令实现嵌入式系统低功耗优化的完整指南 在嵌入式系统开发中&#xff0c;功耗优化一直是工程师们面临的永恒挑战。想象一下&#xff0c;你的设备需要长时间等待一个外部事件——可能是用户按下按钮&#xff0c;或是传感器检测到特定阈值——而…...

用Qt Designer玩转UI设计:拖拽实现计算器界面实战

用Qt Designer玩转UI设计&#xff1a;拖拽实现计算器界面实战 在当今快速迭代的软件开发领域&#xff0c;GUI&#xff08;图形用户界面&#xff09;设计效率直接关系到产品的市场竞争力。作为跨平台C框架Qt的核心组件&#xff0c;Qt Designer以其"所见即所得"的设计理…...