Linux修炼之路之进程优先级,并行,环境变量

news2024/12/28 19:16:27

目录

一:进程优先级 

二:并行并发

三:环境变量

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 

一:进程优先级 

1.基本概念

当使用ps -al指令时,就会显示用户所启动的所有进程信息

这里的PRI :代表这个进程可被执行的优先级,其值越小越早被执行,在Linux中优先级是一个整形的数字,是task_struct结构体当中的一个字段成员

NI :代表这个进程的nice值 ,代表进程优先级的修正数据           UID : 代表执行者的身份

cpu资源分配的先后顺序,就是指进程的优先权(priority)。
优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能

2.PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice
这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行所以,调整进程优先级,在Linux下,就是调整进程nice值nice其取值范围是-20至19,一共40个级别,对于这里的PRI(old)=80

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

root用户下,使用top指令->r->输入修改进程的PID->输入调整值

4.物理上硬件资源是缺少的,而进程有很多,因此进程在系统的资源角度是具有竞争性的。为了良性竞争,即较均衡的让每个进程享受到系统资源,必须想办法组织起来让他们排队,所以所有系统当中队列的问题本质上都是因为进程要访问的目标资源不足的问题,是竞争性所带来的结果

5.如果调度器允许用户恶意的更改优先级,而导致其他进程长时间处于排队状态的话,就会导致其他进程的饥饿问题

6.对于进程根据优先级来展开的调度

是维护了两个队列,即指针数组,一个是runqueue的运行队列,一个是waitqueue的等待队列,当每个进程在一段时间内在cpu上执行后,就会去等待队列对应位置去排队,当runqueue队列中的所有进程执行完后,就交换runqueue和waitqueue的指针,继续执行进程

二:并行并发

1.独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰

2.并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行

当有两个物理cpu时,在操作系统层面上就得维护两个调度队列,两个物理cpu各自调度各自的,所以就直接决定了在系统当中的任意一个时刻一定会同时存在两个真正并行运行的进程

3.并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发

这里我们先铺垫一下

为什么函数返回值能被外部拿到呢?---通过CPU寄存器提前保存下来

系统如何得知我们当前进程执行到哪里了--通过程序计数器即pc指针,eip寄存器保存了当前进程正在执行指令的下一条指令的地址

对于在CPU当中寄存器是很多的,作用主要是将进程的高频数据放入寄存器中,提高效率

所以CPU寄存器内保存的是进程的相关临时数据(可被访问或修改)---进程的上下文

对于每个进程当被cpu调度执行时,都是有一个时间片的概念的,当时间片的时间一到,进程将会被强制从CPU上扒下来,再将下个进程继续调度执行

当进程在从CPU上离开的时候,要将自己的相关临时数据(上下文数据)保存好带走,为下次被调度执行做准备,防止下次调度执行时不知道进程执行到哪行代码了

进程在被切换的时候,要做保存上下文,恢复上下文的操作

CPU上的临时数据是被保存在进程的PCB当中的

三:环境变量

1.环境变量是系统提供的一组name=value形式的变量,不同的环境变量有不同的用户,通常具有全局属性

2.在Linux系统中对于指令的搜索会提供一个环境变量,即PATH(指令的搜索路径)

所以对于在Linux中的指令不用带./就可以直接运行是因为指令的路径是在PATH环境变量当中的,运行时会直接去PATH中去查找

而我们自己写的程序的路径是不在PATH环境变量当中的,因此直接去运行时,在PATH环境变量中就会找不到

因此当直接执行指令时,系统是如何得知这些指令在哪里的?

因为操作系统在执行指令的时候,shell会在所维护的PATH环境变量的路径中一个一个路径的去查找,如果找到了就停下来,去执行该路径下的指令程序,所以在执行时不用带路径,如果指令不在对应的PATH的路径下,就会报出找不到的信息

3.在PATH系统环境变量中添加路径:PATH=$PATH:对应路径

4.在首次登陆时,默认所处的目录是自己的家目录或工作目录,这是因为当我们登陆时,shell会识别账户,填充$HOME这样的环境变量,当你登陆的时候,默认就是相当于cd $HOME,shell就把你放在默认的路径下

正是因为有了这个环境变量的存在,当我们登陆时,xshell会给我们分配bash命令行解释器,这其实也是一个进程,在执行时就会cd $HOME,把自己变为/root这样的路径

5.shell当前的可执行程序:$SHELL

6.env可以查到当前进程以及bash进程从系统里继承下来的所有的环境变量

7.环境变量可以通过系统调用接口获取: getenv(环境变量名); 

8.指令带选项,本质上是同一个指令,但是因为不同的选项可以有不同的功能点去查看不同的内容

9.为了支持命令行参数,就必须在main函数中带参  int main(int argc,char* argv[],char*env[])

在命令行上解释的时候,输入的是字符串,bash会将字符串打散,以空格为间隔符,第一个为执行的命令,其余的为选项 

获取自己进程的所有系统环境变量 env[]

当程序变为进程启动时,一定有人调用main函数,将命令行参数表,环境变量表传给main函数,自身的进程没有环境变量,但启动起来变为进程后又具有了环境变量

这是因为在shell中./运行可执行程序后,会变为bash进程的子进程,bash本身在启动时,会从操作系统的配置文件中读取环境变量信息,子进程会继承父进程的环境变量

因此环境变量被继承的两种方式:通过main函数传参,通过环境变量直接继承

10.常规命令:通过创建子进程完成的

内建命令:bash不创建子进程,而是由自己亲自执行的,类似于bash调用了自己写的或系统调用的函数.因此命令行上所启动的指令不一定全都要创建子进程

本地变量(在命令行中直接定义的为变量):只在本bash内部有效,不会被继承

11.增加环境变量:export   

  取消环境变量:unset

  查询系统中所有的变量:set

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1960412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音视频入门基础:WAV专题(4)——FFmpeg源码中获取WAV文件音频压缩编码格式、采样频率、声道数量、采样位数、码率的实现

音视频入门基础:WAV专题系列文章: 音视频入门基础:WAV专题(1)——使用FFmpeg命令生成WAV音频文件 音视频入门基础:WAV专题(2)——WAV格式简介 音视频入门基础:WAV专题…

求职Leetcode题目(2)

1.柱状图中最大的矩形 据说这是2024年字节二面的题目,我感觉这道题跟接雨水有点类似,最重要的思路还是要找到什么时候能形成矩形的这么个情况,某个范围的矩形的高度,是由最短的柱形来决定的。 我们先整理一下,解决这道…

解决Firefox代理身份验证弹出窗口问题:C#和Selenium实战指南

引言 在使用Selenium和C#进行网页抓取时,遇到代理服务器的身份验证弹出窗口是一个常见的问题。这不仅会中断自动化流程,还会导致抓取任务失败。本文将提供一个实战指南,帮助开发者解决这个问题,并介绍如何在代码中设置代理IP、Us…

N32L406 移植MultiTimer教程 mdk5

MultiTimer 首先感谢开源作者 开源地址; github.com https://github.com/0x1abin/MultiTimer 简介 MultiTimer 是一个软件定时器扩展模块,可无限扩展你所需的定时器任务,取代传统的标志位判断方式, 更优雅更便捷地管理程序的…

C++学习笔记之指针高阶

数组名 数组名字是数组的首元素地址。 一个指针变量保存了数组元素的地址。我们就称之为数组元素指针,及数组指针。 数组指针的本质是指针,指向数组中的某个元素的地址。 由于数组名可以代表数组收元素地址,数组元素是可以通过 数组名[下标] 的格式访问, 那么可以定义一…

红酒行业新动态:抢先了解未来趋势

在风起云涌的红酒市场中,每一次变革都如同飓风般席卷整个行业。今日,我们一同探讨红酒行业的新动态,特别是定制红酒领域的未来趋势。让我们以洒派红酒(Bold & Generous)为引,洞察行业前沿,预…

60、redis安装和部署

一、关系型数据库与非关系型数据库 1.1、关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上一般面向于记录。SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言&#xff0…

2024-07学习笔记

1.${}取值 在这些属性源中,命令行参数和JVM系统属性拥有最高的优先级,它们可以覆盖在Properties文件中定义的属性。而操作系统环境变量和Properties文件的优先级相对较低,但是Spring会根据配置的不同情况进行属性的合并和覆盖,最终…

QUARKUS初体验

1.什么是QUARKUS? Quarkus是 Red Hat为GraalVM 和 HotSpot 量身定制用程序。特点是启动超快,内存极低,并且在容器编排平台(如Kubernetes)中提供了近乎即时的向上扩展和高密度的内存利用率。并且基于GraalVM&#xff0…

【YashanDB知识库】如何远程连接、使用YashanDB?

问题现象 在各个项目实施中,我们经常遇到客户、开发人员需要连接和使用YashanDB但不知如何操作的问题,本文旨在介绍远程连接、使用YashanDB的几种方式。 问题的风险及影响 无风险 问题影响的版本 历史版本~23.2 问题发生原因 无 解决方法及规避方…

Pytorch基础:Tensor的连续性

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 在Pytorch中,一个连续的张量指的是张量中各数据元素在底层的存储顺序与其在张量中的位置一致。这意味着每一个元素的地址可以通过下面的线性映射公式来…

MySQL8--用户与权限管理

原文网址:MySQL8--用户与权限管理_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍MySQL8的用户与权限的管理,包括:用户的创建与删除、授权与撤销权限等。 为什么要管理用户与权限? 目的是保证数据库的安全性,只授…

TCP/IP协议——使用Socket套接字实现

目录 Socket 使用Socket实现TCP客户端和服务器的过程 使用Socket搭建TCP服务器 线程优化 向客户端发送消息 连接的断开 客户端主动断开 服务端主动断开 服务器完整的程序 使用Socket编写客户端程序连接TCP服务器 Socket Socket是一种网络通信协议,它允许…

不再担心数据丢失:用rsync打造你的自动化备份解决方案

在现代IT环境中,数据备份是一项至关重要的任务。无论是个人文件还是企业数据,都需要有可靠的备份机制来防止数据丢失。今天,我们将介绍一种高效的备份方案:使用rsync实现自动化备份目录。 什么是rsync? rsync 是一个开…

vscode+cmake+msvc+vcpkg的入门使用

一.环境安装 1.下载vscode并安装: Download Visual Studio Code - Mac, Linux, Windows 2.安装完成后,安装C和cmake 相关工具,如图。 3.vcpkg的下载和安装 克隆vcpkg的仓库到本地:https://github.com/microsoft/vcpkg.git,运行bo…

《学会 SpringMVC 系列 · 基础篇》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

deeplapv3 动机

语义分割是计算机视觉领域中重要的任务之一,语义分割的目的是为图像中的每个像素分配标签。相比于传统方法,以深度学习为基础的全卷积网络极大地提高了语义分割算法的性能。 在语义分割网络中,常用到如下2种结构: 空间金字塔池化…

C++STL简介(三)

目录 1.vector的模拟实现 1.1begin() 1.2end() 1.3打印信息 1.4 reserve() 1.5 size() 1.6 capacity() 1.7 push_back() 1.8[ ] 1.9 pop_back() 1.10 insert&…

【涵子来信】——AI革新:1.新时代是便捷的,要会用

各位读者朋友们: 我们现在AI时代的十字路口,AI是为生活带来便利的,我们要会使用AI。今天这篇文章来讲述一下AI的正确使用。 一、 AI的使用 1.1.便捷之中要会辨别 AI是带来强大的,利用好可以给生活带来便捷。 像之前WWDC24宣传…