【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个字节)。三是指针是有类型…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
