Linux操作系统:进程(优先级、环境变量、地址空间)

文章目录

  • 优先级
    • 进程优先级的表示方式
    • PRI与NI
    • 其他相关概念
  • 环境变量
    • 程序的执行问题
    • 环境变量
    • 查改环境变量
    • 通过代码获取环境变量
    • 环境变量的全局属性
  • 地址空间
    • 回顾
    • 程序地址空间
    • 创立进程地址空间的原因

优先级

优先级与权限是否一样?
试想我们大学去教室占位,你有权去教室占位,这是你的权限,但是如果你去的晚了发现没有位置坐了,可能需要站着上课,这是因为你没有早到,也就是你的优先级不够(来的不够早)。

再来说进程,当进程太多时,进程就需要被合理的管理,总不能谁都抢着去占用CPU,所以CPU分配资源的先后顺序就是进程的优先级
在我们的计算机中肯定是进程数大于CPU的数量,也就是资源有限,但是人太过多了,这样优先级就显得至关重要,它可以让优先级高的进程有优先执行权利,让那些不重要,优先级低的进程等一等,或者按照到其他CPU。

遵循的原则依旧是——“先描述,再组织”。在Linux内核源代码里,在task_struct中也能看见这部分内容

Linux操作系统:进程(优先级、环境变量、地址空间)_第1张图片

进程优先级的表示方式

使用命令ps -l可以列出当前用户创建的进程,比如下面我使用ps -l后会列出两个进程,一个进程就是bash,另一个则是我刚刚输入的命令

Linux操作系统:进程(优先级、环境变量、地址空间)_第2张图片
我们很容易注意到其中的几个重要信息,有下:

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

我们着重了解一下PRI与NI

PRI与NI

调整进程时,调整的不是PRI,而是NI,通过修正NI以达到修改PRI。默认情况下PRI是80,nice是0,修正时每修改一次NICE,新的PRI=80+NICE的修正值

NICE的取值范围为[-20,19],因此PRI的范围为[60,99]。根据以上描述,NICE为负值时会使优先级变大,NICE为正值会使优先级变小

修改方式如下:

修改时,升级root权限,按top进入资源管理器,然后再按r,接着输入要修改的进程的PID,然后输入NICE值,比如下面我将其进程调至最大(也就是输入负值,由于最小是-20,所以即便下面我输了一个非常小的数,其结果仍然是-20)

  • top->进入top后按“r”–>输入进程PID–>输入nice值
    在这里插入图片描述
    在这里插入图片描述

其他相关概念

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

环境变量

程序的执行问题

我们知道在Linux编写C/C程序,编译完成之后,如果需要运行这个程序,需要加上./,表示当前路径下。

Linux操作系统:进程(优先级、环境变量、地址空间)_第3张图片
使用which命令查看ls所在路径。
Linux操作系统:进程(优先级、环境变量、地址空间)_第4张图片

在这里插入图片描述

为什么都是程序,都是命令,像ls命令就不需要类似/usr/bin/ls这样的方式去执行,能够直接执行,而我们的命令(现目前来说就是可执行程序)则必须输入./,否则就报错?

答案想当然必定与环境变量有着密切的关系

环境变量

通俗易懂的话来理解,每当遇到一个命令,环境变量中保存了一些目录,可以告诉操作系统可以去我所规定的目录里寻找,操作系统如果能找见就去执行,如果找不见则返回错误

为什么要有环境变量?

系统的全局变量,都是为了方便用户,开发者,系统进行某种最简单化的查找,定位,确认等等问题

常见的环境变量如下:

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

查改环境变量

echo $NAME //NAME:你的环境变量名称,如下:

Linux操作系统:进程(优先级、环境变量、地址空间)_第5张图片

  • 这些环境变量以冒号为分割,每一个表示一个目录

因此通过上述描述,如果想要让系统也能直接执行我的程序,那么我只需将我的可执行程序的目录添加到环境变量即可

export PATH=$PATH:你的程序所在目录千万不要忘记$,不然环境变量会被覆盖!!!

Linux操作系统:进程(优先级、环境变量、地址空间)_第6张图片
环境变量相关命令:

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

通过代码获取环境变量

main函数的前两个参数

虽然没有实际写过main函数的参数,大部分人还是知道main函数是有参数的,确切点将有两个参数。但是为什么会有参数,这一点在Windows中是无法讲清的。

首先请大家思考一点:在Linux中我所编译的程序和系统的程序是否本质是一样的?答案是肯定的,但是问题就在于为什么系统的程序可以带有命令行参数&

你可能感兴趣的:(Linux,linux)