当前位置: 首页 > news >正文

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

优先级

概念:cpu资源分配的先后顺序,就是指进程的优先权,就跟排队一样,排队的本质就是在确认优先级,那为什么需优先级要?因为资源的不足导致

查看系统进程

Linux系统中输入ps -l 就能查看信息

系统进程基本信息:

  • UID : 代表执行者的身份
  • PID : 代表这个进程的代号(常说的子进程
  • PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
  • PRI :代表这个进程可被执行的优先级,其值越小越早被执行
  • NI :代表这个进程的nice

PRI和NI

PRI也就是进程的优先级,PRI越小,进程优先级就越高

  • Linux进程的优先级数值范围:60~99
  • Linux默认进程优先级都是80

那为什么优先级要限定在一定的范围内?

如果不限定,容易导致优先级较低的进程,长时间得不到CPU,导致进程饥饿

os调度的时候,较为均衡的让每一个进程都要得到调度。这样就会较为公平

Linux进程PCB中存在一个nice值也就是NI,表示优先级的修正数据,nice为负值时,优先级值变小,优先级就会越高,越快被执行,调整优先级,实质是调整进程nice值

  • nice调整最小是:-20,超过部分统一为-20(-100也是-20)
  • nice调整最大是:19,超过部分统一为19(100也是19)

PRI(new)=PRI(old)+nice

查看进程优先级命令

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

  • 输入指令top
  • 进入top后输入r->输入进程PID->输入nice值

当我们输入nice值为-20时

其他知识

  • 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级
  • 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰
  • 并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行
  • 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发

环境变量

基本概念

  • 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数 
  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

常见环境变量

  • PATH : 指定命令的搜索路径
  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • SHELL : 当前Shell,它的值通常是/bin/bash

PATH基本用法

创建一个myprocess.c的文件你发现./myprocess能执行,直接输入myprocess不能执行

那怎么样才能执行myprocess呢?

先输入指令echo $PATH查看环境变量路径

再将数据拷贝到此路径下cp myprocess /usr/sbin/

你会发现myprocess就能使用了

那我要怎样取消myprocess这个指令呢?

删除它的路径rm /usr/sbin/myprocess,就不能再执行了

HOME

root和普通用户下HOME值是不一样的

root用户

普通用户

环境变量相关的命令

  • echo: 显示某个环境变量值
  • export: 设置一个新的环境变量
  • env: 显示所有环境变量
  • unset: 清除环境变量
  • set: 显示本地定义的shell变量和环境变量

本地变量 MY_ENV=hahahahaha env查找不到,但是发现能打印

export导入环境变量进去,但是退出Xshell,再查找的话就查找不到

unset清除之后,无法显示

永久设置环境变量输入,退出之后也能显示

vim ~/.bash_profile

export MY_ENV=hahahahhaha

环境变量的组织方式

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串

获取环境变量

命令行第三个参数
#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{int i = 0;for(; env[i]; i++){printf("%s\n", env[i]);}return 0;
}
通过第三方变量environ获取
#include <stdio.h>
int main(int argc, char *argv[])
{extern char **environ;int i = 0;for(; environ[i]; i++){printf("%s\n", environ[i]);}return 0;
}
通过系统调用获取或设置环境变量(getenv/putenv)
常用getenv和putenv来访问特定的环境变量

#include <stdio.h>
#include <stdlib.h>
int main()
{printf("%s\n", getenv("PATH"));return 0;
}
环境变量通常是具有全局属性的
环境变量通常具有全局属性,可以被子进程继承下去
#include <stdio.h>
#include <stdlib.h>
int main()
{char * env = getenv("MYENV");if(env){printf("MYENV:%s\n", env);}return 0;
}

进程地址空间

概念:进程地址空间是一个内核的数据结构对象

先看一个现象地址一样,值却不一样

变量内容不一样,所以父子进程输出的变量绝对不是同一个变量
地址值是一样的,说明,该地址绝对不是物理地址,在Linux地址下,这种地址叫为虚拟地址
用C/C++语言看到的地址,都是虚拟地址,物理地址,用户一概看不到,由OS统一管理

那为什么需要进程地址空间呢?

  • 当可执行程序任意的放在内存当中,发现不影响查找,这是因为进程可以通过地址空间+页表可以将乱序的内存数据,变成有序,将无序变有序
  • 存在的虚拟地址空间,可以有效的进行进程访问内存的安全检查,当进程地址空间以写的权限访问时,而页表的访问权限字段是读的权限就会禁止访问
  • 通过页表,让进程映射到不同的物理内存中,从而实现进程的独立性

分页和虚拟地址空间示意图

上面的图可以说明同一个变量,地址相同,其实是虚拟地址相同,内容不同其实是被映射到了不同的物理地址

 

http://www.dtcms.com/a/491934.html

相关文章:

  • d42:MyBatisPlus逻辑删除,枚举处理器,JSON处理器,分页插件
  • 安徽和县住房城乡建设局网站佛山电商网站制作团队
  • 网站备案 失败批量建wordpress
  • asp做的药店网站模板成都响应式网站建设
  • Python异步IO——协程
  • QML学习笔记(四十)QML的ApplicationWindow和StackView
  • Linux学习笔记--Pinctrl子系统示例
  • 安徽网站建设seo优化如何用asp做网站的登录界面
  • wordpress网站页脚网站进行中英文转换怎么做
  • RFSOC27DR+VU13P 6U VPX板卡
  • 多门店同城配送上新!Tigshop 开源商城系统JAVA5.4.0版本正式发布!
  • 域名访问过程会不会影响网站访问国外 设计师 网站
  • 温州外贸网站设计wordpress简介怎么改
  • css`text-wrap:pretty`
  • RHCA作业
  • 网站建设申请前端网站效果有哪些
  • 小林coding|计算机网络
  • 2025年--Lc193-139. 单词拆分(动态规划在字符串的应用)--Java版
  • 做网站公重庆永川网站建设
  • 高端网站建设公司名字北京页面设计制作
  • 获取hive/impala表下表所有分区
  • C语言中static const extern volatile inline关键字
  • SQL入门:CET-简化复杂查询的利器
  • 零基础网站建设教学培训wordpress弹窗通知插件
  • 北京网络科技有限公司官网吴忠seo
  • 静态代理和动态代理
  • 深度学习论文: Pixel-Perfect Depth with Semantics-Prompted Diffusion Transformers
  • uni-app学习笔记(二)
  • 中国网站设计师广州最专业的网站建设
  • 怎么查看网站的ftp地址wordpress 文章引用