进程优先级、环境变量、虚拟地址空间

2024-01-23 18:18

本文主要是介绍进程优先级、环境变量、虚拟地址空间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一:进程优先级
cpu分配资源的先后顺序即为进程的优先级;
优先级高的进程有优先执行权利。配置进程优先级对多任务环境的linux很有用,可以改善系统性能;
可以把进程运行到指定的cpu上,把不重要的进程安排到某个CPU,只能这个进程使用,cpu不用切换,CPU核心可以独立运行,即有独立的寄存器。
进程优先级:
交互式进程:优先级较高;
批处理进程:优先级较低(运行在操作系统后台,循环干一件事);
查看进程优先级:ps - l
这里写图片描述
UID:代表执行者的身份;
PID:代表进程的代号;
PPID:代表进程是由哪个进程衍生而来,即父进程代号;
PRI:代表这个进程可被执行的优先级,其值越小越早被执行;
NI:即nice值,调整进程优先级的参数。
注:PRI越小越早执行,用nice修改PRI,PRI(new)=PRI(old)+nice;nice 值的取值范围是-20-19,一共40个级别;当nice值越小,程序优先级越小,就越早被执行;因此可以用nice调整进程优先级。
nice
nice是启动进程前调整优先级
这里写图片描述
这里写图片描述
renice
renice是程序运行过程中调整优先级,已经提前./tmp
这里写图片描述
注:是直接将nice值修改为20,但由于nice取值范围是-20-19,如果超范围将用最大值代替即19。
4个性质
竞争性:由于系统进程数量较多,而cpu资源有限,那么进程间就存在竞争关系;优先级高的进程cpu优先处理;
独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰;
并行性:多个进程在多个cpu下同时进行运行;
并发性:多个进程在一个cpu采用cpu计时技术即进程切换方式,在一段时间内,多个进程依次被处理;
二:环境变量
指在操作系统具有特殊功能的参数变量,环境变量具有全局性。当我们在编写c/c++代码时,在链接时,尽管不知道链接的动静态库在哪儿,但依然可以链接成功,生成可执行程序,是因为有相关环境变量会帮助编译器查找。
常见环境变量:PATH(指定命令的搜索路径);
HOME(用户登录到linux系统时默认的目录);
查看环境变量
这里写图片描述
echo是打印字符串,用$使之成为一个变量。
代码查看环境变量
1.利用main的第三个参数

  1 #include<stdio.h>2 3 int main(int argc,char*argv[],char *env[])4 {5         int i=0;6         for(i=0;env[i];i++)7         {8                 printf("%d :%s\n",i,env[i] );9         }       10         return 0;11 }       

2.利用全局变量environ
全局变量environ指向环境变量表,environ没有包含在任何头文件中,使用时需要用extern声明。

  1 #include<stdio.h>2 //environ是环境变量3 int main()4 {5         extern  char **environ;6         int i=0;7         while(environ[i])8         {9                 printf("%d %s\n",i,environ[i]);10                 i++;11         }12         return 0;13 }

这里写图片描述
这里写图片描述
3.通过系统调用获取或者设置环境变量
getenv();
这里写图片描述

  1 #include<stdio.h>2 #include<stdlib.h>3 int main()4 {5   printf("PATH:%s\n",getenv("PATH"));6   printf("HOME:%s\n",getenv("HOME"));7  return 0;8 }

这里写图片描述
exportunset

  1 #include<stdio.h>2 #include<stdlib.h>3 int main()4 {5   printf("PATH:%s\n",getenv("PATH"));6   printf("HOME:%s\n",getenv("HOME"));7   printf("MYENVAL:%s\n",getenv("MYENVAL"));8   printf("VAL:%s\n",getenv("VAL"));9  return 0;10 }

这里写图片描述
因为环境变量具有全局性,由图可知MYENVAL不是一个环境变量,只是一个本地变量。但是用export可以将MYENVAL设置为一个环境变量:
这里写图片描述
同样export可以设置一个新环境变量:
这里写图片描述
这里写图片描述
可以用unset清除环境变量:
这里写图片描述
可以用envset查看环境变量:
env:
这里写图片描述
set:
这里写图片描述
注:没有列全,set查看的环境变量比env所查看的多。
三:程序地址空间(虚拟地址空间)
这里写图片描述

  1 #include<stdio.h>2 #include<unistd.h>3 #include<stdlib.h>4 5 int main()6 {7         int val=100;8         pid_t pid=0;9         pid=fork();10         if(pid<0)11         {12                 perror("fork");13                 return 0;14         }15         else if(pid==0)16         {17                // val=200;18                 printf("child[%d]:%d:%p\n",getpid(),val,&val);19         }20         else21         {22                 printf("parent[%d]:%d:%p\n",getpid(),val,&val);23         }24         sleep(1);25         return 0;26 }

这里写图片描述
输出的变量值和地址一样,可以理解为子进程是以父进程为模板的复制;但是在将子进程里的//val=200;去掉注释,又会变成什么样呢?
这里写图片描述
地址相同,但是变量值不同,可以得出以下结论:
变量内容不同,说明父子进程输出的变量不是一个变量;但地址相同,则说明该地址不是物理地址,在linux下,该地址称为虚拟地址,通常在c/c++中&变量得到的地址都为虚拟地址,而物理地址被OS同一管理,用户看不见。
所以上面一张图实质上是虚拟地址,那怎么从虚拟地址转换为真正意义上的物理内存地址呢?
早期内存管理机制
这里写图片描述
分段
这里写图片描述
页表映射
在这里插入图片描述

这篇关于进程优先级、环境变量、虚拟地址空间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/637111

相关文章

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.