Linux:进程(四)
目录
一、进程优先级
二、Linux调度与切换
1.背景
2.进程切换
一、进程优先级
背景:在计算机中,软硬件资源是有限的,而进程想要访问某一种资源,就得通过排队来保证访问资源的过程是有条不紊的。
Linux下对优先级的定义。执行命令ps -la得到以下打印结果。
[euto@VM-4-13-centos 24921]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 29067 28781 0 80 0 - 1054 hrtime pts/1 00:00:00 myprocess
1 S 1001 29068 29067 0 80 0 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 29078 28979 0 80 0 - 38332 - pts/2 00:00:00 ps
- UID:代表执行者的身份
- PRI:priority的缩写,代表这个进程的优先级,Linux下优先级就是一个整型变量,默认值为80,取值范围为
,值越小,优先级越高。
- NI:nice的缩写,用来代表相对默认值的增量。
Linux下进程的优先级可以人为手动修改,但是需要我们手动修改优先级的场景几乎没有。
下面演示如何修改优先级,首先可执行程序myprocess已经被运行了起来,执行ps -la查看。
[euto@VM-4-13-centos 24921]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 2310 28781 0 80 0 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 2330 28979 0 80 0 - 38332 - pts/2 00:00:00 ps
执行top命令进入任务管理器。
进入任务管理器后,输入r。
得到一行提示,大致意思是“输入要重新设置nice值的PID”。
PID to renice [default pid = 5375]
当前要修改优先级的程序myprocess的PID为2310,于是输入2310。
弹出一行提示,大致意思是“输入新的nice值”,我们暂时输入10。
Renice PID 2310 to value
退出任务管理器后,再执行ps -la命令查看。
[euto@VM-4-13-centos 24921]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 2310 28781 0 90 10 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 7772 28979 0 80 0 - 38332 - pts/2 00:00:00 ps
我们发现myprocess的PRI值由80变成了90,而NI值由0变成了10。
因此,可以总结出来,Linux下修改优先级不能直接修改,而是通过加减某一个量来修正。
NI值是用来表示当前PRI值相对默认PRI值的增量,由于PRI的范围是,默认PRI值是80,故NI值的取值范围是
。
PRI = 默认PRI(80)+ NI。
- NI可以取范围外的值吗,如果可以,PRI会被修改为多少?
在top中修改NI值的时候,输入100。
执行ps -la查看结果。
[euto@VM-4-13-centos 24921]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 2310 28781 0 99 19 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 13253 28979 0 80 0 - 38332 - pts/2 00:00:00 ps
可以总结出来,修改的NI值会被操作系统做检测,如果超出范围则修正到范围之内。
在上面结果的基础上,将NI值设置为-20,预期结果应该是99-20=79。
执行结果如下。
[euto@VM-4-13-centos ~]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 16994 16006 0 60 -20 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 18523 16091 0 80 0 - 38332 - pts/2 00:00:00 ps
这里我中断进程后,重新启动了程序,所以PID发生了变化,但是前提条件是一样的,不难看出来,NI值变成了-20,说明NI值是覆盖原来的值,但是PRI并不是我们预期的79,而是60。原因是每次调整优先级的NI值,都是在默认的PRI值80上做加减。
- 为什么要让优先级的修改受限?
操作系统中,存在很多必要的常规进程,如果进程的优先级可以无限大,必然会造成多数用户进程的优先级比常规进程的优先级高,导致常规进程获取资源的优先度下降,造成系统卡顿。
而把一个进程获取资源优先度不高的情况称为进程饥饿。
二、Linux调度与切换
1.背景
- CPU在执行一个进程的时候,是直接一次性把代码跑完吗?
不是,现代操作系统设计的CPU执行代码,都是基于时间片轮转执行的。假设时间片大小是1ms,那么一个进程在CPU上执行1ms后,CPU会马上开始执行另外一个进程。
- 竞争性:系统进程数目众多,而CPU资源少量,甚至只有一个,所以进程之间是具有竞争性的,为了高效完成任务,合理竞争相关资源,便有了优先级。而为了保证优先级,便设计了调度器基于时间片轮转执行每一个进程。
- 独立性:进程之间具备独立性,多个进程运行期间互不影响,这种不影响指的是一个进程不影响另一个进程的执行。
- 并行:多个进程在多个CPU下,同时运行,称为并行。
- 并发:多个进程在一个CPU下,通过高频进程切换的方式,让多个进程都得以推进运行,称为并发。
如今多数人的个人电脑都只有一个CPU,因此多个进程之间是并发运行,如果把时间精确到CPU的一个时间单元上,那么CPU在这个时间单元上执行的指令是确定的只有一条,而用户感知到的是我们的电脑可以打游戏的同时听音乐,原因就在于我们的CPU非常快!!!(多核其实就是CPU内部有一个控制器,多个运算器)
2.进程切换
CPU有一个运行队列,CPU要轮转切换多个进程。
- CPU内部有大量寄存器,这些寄存器的种类不一。
- 进程A正在CPU上被执行时,该时间片内,寄存器上会产生许多临时数据,这些临时数据是和当前的进程A相关的,这些大量临时数据称为进程的硬件上下文。
- 时间片结束,CPU要执行下一个进程B,在此之前,要把寄存器的数据拷贝到进程A的PCB内部(也有部分数据拷贝到了其他地方),这个过程称为保护上下文。
- CPU开始执行进程B,那么就有两种情况,如果进程B是首次被调度,那么进程B直接开始执行,在执行期间所产生大量临时数据直接覆盖寄存器原来的数据。如果进程B是非首次被调度,那么进程B会先把PCB保存的数据恢复到寄存器中,然后开始执行。这个过程称为恢复上下文。
CPU的寄存器只有一套,但是寄存器要处理的数据有多套,这些大量临时数据不属于寄存器,而是属于进程!!!
相关文章:

Linux:进程(四)
目录 一、进程优先级 二、Linux调度与切换 1.背景 2.进程切换 一、进程优先级 背景:在计算机中,软硬件资源是有限的,而进程想要访问某一种资源,就得通过排队来保证访问资源的过程是有条不紊的。 Linux下对优先级的定义。执行命…...

CTC loss 博客转载
论文地址: https://www.cs.toronto.edu/~graves/icml_2006.pdf 为了对应这个图,我们假设一种符合的模型情况: 英文OCR,37个类别(26个小写字母10个汉字空格),最大输出长度8个字符 模型预测结果…...

TryHackMe 第3天 | Pre Security (中)
该学习路径讲解了网络安全入门的必备技术知识,比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识,本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…...
c语言中“qsort函数”和“结构体成员访问变量”
qsort函数: qsort是c语言中的库函数,这个函数是对数据进行排序(对任意) 冒泡排序中排列整数顺序用的函数只适用于整形,而qsort函数适用与所有数据 排序算法 冒泡排序 插入 选择 快速 void qsort{ void * base&…...
【MySQL】在MySQL中STR_TO_DATE()
1.在MySQL中STR_TO_DATE() 在MySQL中,STR_TO_DATE() 函数用于将字符串转换为日期格式。这个函数非常有用,当你需要将文本数据转换为可由MySQL日期和时间函数处理的格式时。 1.1 语法 STR_TO_DATE() 函数的基本语法如下: STR_TO_DATE(date…...

PCIE集成验证(五)MSI/MSI-X中断
PCI 总线最早采用的中断机制是 INTx,这是基于边带信号的。后续的 PCI/PCI-X版本,为了消除边带信号,降低系统的硬件设计复杂度,逐渐采用了 MSI(Message Signaled Interrupt)/MSI-X(消息信号中断)的中断机制。…...
leetcode 380.O(1) 时间插入、删除和获取随机元素
实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时࿰…...
基于MicroPython的ESP8266控制PS2摇杆模块的设计方案
以下是一个基于MicroPython的ESP8266控制PS2摇杆模块的设计方案: 一、硬件准备: 1. 一块ESP8266开发板,如NodeMCU 2. 一个带有X、Y轴模拟输出和Z轴(按钮)数字输出的PS2摇杆模块 3. 杜邦线若干 4. 3.3V直流电源 二、硬件连接:…...

Spring Boot 3项目使用Swagger3教程
Spring Boot 3项目使用Swagger3教程 Swagger:自动生成接口文档 添加依赖(pom.xml) <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.1…...
linux-系统备份与恢复-系统恢复
Linux 系统备份与恢复:系统恢复 1. 概述 Linux 系统的恢复是系统管理的重要组成部分,它指的是在系统崩溃、硬件故障、误操作或安全问题后,恢复系统到可用状态的过程。良好的系统恢复计划可以有效避免数据丢失和业务中断,并确保系…...
【Rust语言】std::collections::HashMap用法
HashMap用法文档 文章目录 创建键的要求 增删改查增: insert删: remove/remove_entry改单点修改 get_mut整体修改 values_mut/iter_mut 查集增改于一身的entry 遍历只读遍历into_values() 与 into_keys()容量、实际长度、判空导出清除重定容量 use std::collections::HashMap;创…...

使用SoapUI、Postman工具调用Webservice方法
SoapUI工具更适合调用Webservice使用。 1.使用SoapUI工具调用Webservice 创建“New SOAP Project” 自行定义一个项目名称,输入wsdl地址: 在左侧列表找到方法名,双击“Request 1”, 在请求数据中,添加对应的参数,然…...
js 与 C++引用和指针的关系
js 与 C引用和指针的关系 js 中既有引用的影子, 也有指针的影子。 1、引用用法 这里相当于C 中的引用, b是a的引用, 修改b ,a也改变。 var a { 1: 1 }var b a;a null;b[2] 2;console.error(b); // { 1: 1, 2: 2 }2、指针用法 这里 a,b应该按照指针理解。 var a undef…...

python --PyAibote自动化
官文: https://www.pyaibote.com/ 下载安卓集成环境: 可以看到开发的一些信息...
Ubuntu系统开发环境搭建
一,Android源码编译环境搭建 1 安装Java Development Kit (JDK) sudo apt-get update sudo apt-get install openjdk-8-jdk 2,确认JDK安装成功 java -version 3,安装编译所需的依赖项 sudo apt-get install git-core gnupg flex bison gperf build-essential zip cu…...

lvs-dr模式实验详解
华子目录 lvs-dr(企业当中最常用)dr模式数据逻辑dr模式数据传输过程dr模式的特点实验拓扑实验主机准备解决vip响应问题限制响应级别:arp_ignore限制通告级别:arp_announce 实验步骤1.client的ip设定2.router上的ip设定3.router开启路由转发功能4.lvs主机…...
【RDMA】mlxconfig修改和查询网卡(固件)配置--驱动工具
目录 简介 工具要求 语法 例子和参数 例子 更多参数 其他工具和查询 简介 mlxconfig 工具允许用户在不重新烧录固件的情况下更改某些设备配置。 配置在重启后仍然保留。 默认情况下,mlxconfig 显示将在下次启动时加载的配置。对于第五代设备,还…...

跨站请求伪造(CSRF)漏洞详解
免责申明 本文仅是用于学习检测自己搭建的DVWA靶场环境有关CSRF的原理和攻击实验,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《中华人民共和国网络安全法》及其所在国家地区相关法…...

Java+Spring Cloud +UniApp 智慧工地源码,用户PC端、移动端数据同步,支持多端展示
数字化给各行各业所带来的改变,在早些年间突出自动这一流程。但随着科技的发展,让人们也愈发了解可视化操作所带来的优势。智慧工地的诞生,相当于为建筑施工带来了一套较为完整的数字化流程,能够完善施工环节中的各部分内容。接下…...

【推广】图书|2024新书《大模型RAG实战:RAG原理、应用与系统构建》汪鹏、谷清水、卞龙鹏等,机械工业出版社
探索RAG系统新高度:《大模型RAG实战:RAG原理、应用与系统构建》 随着大模型技术的爆发,尤其是ChatGPT之后,以ChatPDF为首的知识库问答产品迅速走红,引发了RAG(检索增强生成)系统的广泛关注与讨论…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...