【Linux】进程优先级(进程优先级 Linux下优先级 用top命令更改已存在进程的nice 其他概念 进程切换)
文章目录
- 进程优先级
- Linux下优先级
- 用top命令更改已存在进程的nice:
- 其他概念
- 进程切换
进程优先级
我们作为使用者一般不关心优先级,它跟我们的调度器有很大的关系,调度器是为了跟均衡的调度进程。
什么叫做优先级?
优先级和权限是两码事,权限决定的是能还是不能的问题,优先级前提是已经能了,决定的是能的时候先做还是后做的问题。
优先级就是先还是后获得某种资源的能力,先获得优先级高。
为什么存在优先级?
因为资源太少了。系统可能存在几十个进程,但CPU只有一个,系统可能存在十几二十几个进程都要访问网卡,但是网卡只有一个。所以在任何系统里硬件资源一定是少数,软件资源要用硬件资源的跟多,所以要争,即确认优先级,排队。
Linux下优先级
Linux优先级的特点:
优先级本质就是PCB里面的一个整数数字(也可能是几个),在Linux中是用两个整数来确定优先级的,这两个整数叫PRI和NI。
首先写一个进程:

用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)是一种在互联网上运行的计算机系统。它是专门为吸引并诱骗那些试图非法闯入他人计算机系统的人(如电脑黑客)而设计的,蜜罐系统是一个包含漏洞的诱骗系统,它通过模拟一个或多个易受攻击的主机ÿ…...
PyTorch深度学习实战 | 自然语言处理与强化学习
PyTorch是当前主流深度学习框架之一,其设计追求最少的封装、最直观的设计,其简洁优美的特性使得PyTorch代码更易理解,对新手非常友好。本文主要介绍深度学习领域中自然语言处理与强化学习部分。自然语言区别于计算机所使用的机器语言和程序语…...
测牛学堂:接口测试基础理论和工具的使用
接口测试流程总结 1 需求分析,看产品经理的需求文档 2 接口文档解析,开发编写的api接口文档 3 设计测试用例 4脚本开发 5 执行及缺陷跟踪 6 生成测试报告 7接口自动化持续集成 测试解析接口文档 接口文档,又称为api文档,是由后…...
定长内存池的实现
解决的是固定大小的内存申请释放需求: 性能达到极致不考虑内存碎片问题(统一使用自由链表管理还回来的空间) 为了避免命名污染,不要直接using namespace std;只展开常用的。 #include <iostream> using std::cout; using std::endl;申请空间时有…...
三更草堂springSecurity的学习
源码地址:学习springSecurity (gitee.com) git:https://gitee.com/misszyg/spring-security.git 一,认证流程 1,经过UsernamePasswordAuthenticationFilter (1)传入了用户的账号,密码 源码&a…...
【C语言】指针的深度理解(一)
前言 我们已经了解了指针的概念,一是指针变量是用来存放地址的,每个地址都对应着唯一的内存空间。二是指针的大小是固定的4或8个字节(取决于操作系统,32位的占4个字节,64位的占8个字节)。三是指针是有类型…...
FLUX.1-Krea-Extracted-LoRA新手教程:Streamlit WebUI界面功能全解析
FLUX.1-Krea-Extracted-LoRA新手教程:Streamlit WebUI界面功能全解析 1. 快速入门指南 1.1 镜像部署与访问 让我们从最简单的部署开始。在云平台找到FLUX.1-Krea-Extracted-LoRA镜像后,点击"部署实例"按钮。你会看到实例状态从"创建中…...
卡方检验(Chi-Squared Test)在特征工程中的实战应用
1. 卡方检验在特征工程中的核心价值 第一次接触卡方检验时,我也被那些统计学术语搞得头晕。直到在真实项目中用它筛选出关键特征,才真正理解它的威力。简单来说,卡方检验就像个"相关性探测器",能帮我们快速找出那些对预…...
告别繁琐输入:AutoGPT Agent运行模态框的智能优化方案
告别繁琐输入:AutoGPT Agent运行模态框的智能优化方案 【免费下载链接】AutoGPT AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters. 项目地址: https…...
【嵌入式C×轻量大模型实战白皮书】:基于CMSIS-NN与TinyGrad的端侧微调框架,含12个可直接移植的API封装模板
第一章:嵌入式C与轻量大模型协同设计范式演进传统嵌入式系统以确定性、低功耗和实时性为核心,其软件栈长期依赖纯C语言实现——从裸机驱动到RTOS任务调度,全部运行在资源受限的MCU上。而近年来,随着TinyML技术成熟与量化推理引擎&…...
从Cmd到PowerShell:一个Windows老鸟的十年命令行工具演进史与效率翻倍心得
从Cmd到PowerShell:一个Windows老鸟的十年命令行工具演进史与效率翻倍心得 第一次在Windows XP上敲下dir /s命令时的兴奋感至今难忘——那是我与Cmd结缘的开始。作为从DOS时代走过来的老用户,我们这代人总带着对黑色命令窗口的特殊情感,就像程…...
LIWC文本分析:如何用Python解锁语言背后的心理密码?
LIWC文本分析:如何用Python解锁语言背后的心理密码? 【免费下载链接】liwc-python Linguistic Inquiry and Word Count (LIWC) analyzer 项目地址: https://gitcode.com/gh_mirrors/li/liwc-python 你是否好奇,一段简单的文字背后隐藏…...
社区毒性治理:从代码暴力到协作优化
在软件开发的生命周期中,测试工程师不仅是质量守门人,更是工程实践的深度参与者。我们常常聚焦于产品代码中的“坏味道”,却可能忽视了协作生态中另一种更具破坏性的“暴力”模式——它不体现在算法效率上,而弥散在沟通、流程与代…...
采用深度学习方法进行图像缺陷检测_使用ResNet50预训练模型来对 太阳能电池板缺陷数据集 12类的缺陷类型进行检测
采用深度学习方法进行图像缺陷检测_使用ResNet50预训练模型来对 太阳能电池板缺陷数据集 12类的缺陷类型进行检测 文章目录1. 数据理解与准备加载和解析XML标签文件2. 数据预处理图像预处理3. 模型选择与训练4. 模型评估与优化5. 测试与推理特定缺陷类型的处理太阳能电池板缺陷…...
OpenClaw联网搜索终极配置指南:给你的AI装上“实时眼睛”
没有联网能力的AI助理,就像没有窗户的房间——聪明,但看不见世界。OpenClaw(昵称“小龙虾”)作为开源AI自动化工具的标杆,GitHub星标量已超越Linux,成为开发者社区的新宠。但很多新手完成部署后,…...
从NDVI到SIF:手把手教你用Python分析卫星数据,监测你家门口的植被生长季
从NDVI到SIF:用Python解锁你家门口的植被生长密码 清晨推开窗户,你是否注意过楼下公园的梧桐树何时抽出第一片新叶?小区草坪的绿意从哪天开始变得浓密?这些看似平凡的植物生长节奏,背后隐藏着大自然最精密的生态时钟。…...
