程序优先级:
基本概念:
- 进程在被cpu分配到资源优化才能运行,但是资源是有限的,cpu分配资源的先后顺序,就是进程的优先权
- 优先权(优先执行的权利)和优先级值不一样,优先权高的进程有优先执行的权力,配置进程优先权对多任务环境的Linux很有用,可以改善系统性能
- 还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU上,可以大大改善系统整体性能
可以使用ps -l查看输出如下:
- UID:执行者的身份
- PID:进程的代号
- PPID:父进程的代号
- PRI:进程可以被执行的优先级,其值越小越早被执行
- NI:代表这个进程的nice值
PRI和NI:
- PRI即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高
- NI即nice值,表示进程可被执行的优先级的修正数,他和优先级不是一个概念,但是进程的nice值会影响进程的优先级变化
- PRI值越小越快被执行,加入nice值之后,将会使得PRI变为:PRI(new)=PRI(old)+nice
- 当nice值为负值时,那么该程序将会优先级值变小,即其优先级会变高,则其越快被执行
- 所以,调整进程的优先级,在Linux下,就是调整进程nice值
- nice其取值范围时-20~19,一共40个级别;
- 优先级60~99(-20+80,80+19)
为什么优先级要有范围?
因为一个进程长时间得不到资源,就会造成进程饥饿。
修改进程优先级的命令:
- nice:开始执行程序时就指定nice值:nice -n -5 ./test
- renice:调整已存在的nice值:renice -5 -p 5200 //pid为5200的基础nice设为-5
- renice -100 -p 6151(nice值虽然被定义为-100,但他的下限是-20,所以他会修改nice值为-20)
- 用top命令更改已存在进程的nice值
- top:任务管理器
- 加入top后按 “r” ——> 输入进程PID ——>输入nice值
进程的一些其他概念:
- 竞争性:系统进程数目众多,而CPU资源只有少量,甚至一个,所以进程之间时具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级
- 独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰
- 并发:多个程序在一个CPU下分别采用进程切换的方式,在一段时间之间,让多个进程都得以推进,称之为并发
- 并行:多个进程在多个CPU下分别,同时进行运行,称之为并行
环境变量:
基本概念:
- 环境变量一般时在操作系统中用来指定操作系统运行环境的一些参数(例如:在执行c/c++代码时,我们不知道所链接的动态库在哪里,却依旧可以链接成功,生成可执行程序,就是因为相应环境变量帮助我们找到动态库的位置)
- 环境变量具有某些特殊用途,在系统中通常具有全局特性,可以被子进程继承下去
- 环境变量一般都是以大写字母加下划线的形式命名,环境变量相当于一个指针,当我们查看指针所指向的值的时候需要对其解引用,同样的我们查看环境变量的值的时候,也需要在其前面加上$
环境变量相当于给系统或用户应用程序设置一些参数,Linux时一个多用户的操作系统,每个用户登录系统以后都会有一个专门的运行环境,通常每个用户默认的环境都是相同的,这个默认的环境实际上就是一组环境变量的定义。用户可以对自己的运行环境执行定制(修改环境变量)。
环境变量的种类:
- 永久的:需要修改配置文件,变量永久生效
- 临时的:使用export命令声明即可,变量在关闭shell时失效
常见的环境变量:
- PATH:指定命令的搜索路径
(以冒号分隔开的每一个段就是一个路径,当你敲下命令时,操作系统会依次去每一个区间找当前命令,如果定义了,则执行,如果没有就返回:commond not found)
- USER:使用者信息
- HOME:指定用户的主工作目录(即用户登录到Linux系统中时,默认的路径)
- HISTSIZE:指定保存历史命令纪录的条数
- SHELL:当前shell,它的值通常时/bin/bash
和环境变量相关的命令:
- echo $环境变量名称:查看某个环境变量的值
- export:设置一个新的环境变量
- env:显示所有环境变量
env:显示所有环境变量;echo:显示某个环境变量
- unset:清除环境变量
- set:显示本地定义的shell变量和环境变量
测试PATH:
- 创建一个hello.c文件
#include<stdio.h>
int mian()
{
printf("hello world!\n");
return 0;
}
- 执行hello.c时要加上./ ——> ./hello.c(./ 是指在当前目录下)
- 如果不加 ./ ,直接输入hello.c 系统会自动在PATH(环境变量)的路径下去找,然而我们helloc并没有在PATH的路径下,而是在当前目录下,所以会报错(commond not found)
- 所以虽然输入ls 等命令与我们的hello.c是一样的,都可以称为指令,但是ls执行时不用带路径,而hello.c执行时却要加上路径
- 但是如果我们将hello.c的路径加入到环境变量中,然后再执行它就不需要带路径了
- PATH = $PATH(原来的路径):/home/txtt/bit_code/hello(hello的路径)
环境变量的组织方式:
每个程序都会有一张环境表,环境表时一个字符指针数组,每个指针指向一个以‘\0’结尾的环境变量字符串