一.什么是优先级
1.1 概念
优先级是指定进程获取某种资源的先后顺序
- cpu资源分配的先后顺序,就是指进程的优先权(priority)。
- 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。
- 还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能
1.2 Linux下的优先级
在Linux操作系统中,进程优先级的信息储存在进程控制块task_struct中,在其内部字段中存储着一个整型值prio,操作系统就可以根据这个整型值的大小就可以控制进程的优先级
Linux下这个 整型值越小,优先级越高
1.3 优先级与权限的关系
- 权限:决定进程能否进行资源的获取
- 优先级:已经拥有获取资源的权限,决定获取资源的先后顺序
1.4.为什么会有优先级
优先级存在的根本原因就是进程访问的资源(cpu)始终都是有限的,而系统大部分情况进程都是比较多的,并且大多数操系统对于调度和优先级的原则都是采用分时操作系统,这样可以保证对所有进程的相对公平,因为如果进程长时间不被调度就会发生饥饿问题
二.Linux优先级查看与修改
2.1 如何查看优先级
在linux或者unix系统中,用 ps –al 命令则会类似输出以下几个内容:
- UID : 代表执行者的身份
- PID : 代表这个进程的代号
- PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
- PRI :代表这个进程可被执行的优先级,其值越小越早被执行
- NI :代表这个进程的nice值
PRI与NI
- PRI就是进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高
- NI就是我们nice值了,其表示进程可被执行的优先级的修正数值
- PRI(修改后) = PRI(修改前) + nice值 ,故调整进程的优先级大小就是调成nice值的大小
- 但是操作系统不会让我们随意修改进程的优先级大小,nice值取值范围是-20~19,一共40个级别
2.2 如何修改优先级
修改进程的优先级可以使用 top 指令
- top
- 进入top后按“r”–>输入进程PID–>输入nice值
为了方便查看进程优先级的详细信息,我们写一个死循环打印进程pid的程序,代码如下:
//myprocess
#include<stdio.h>
#include<unistd.h>
int main()
{
while(1)
{
printf("I am process pid:%d\n",getpid());
sleep(1);
}
return 0;
}
首先,运行代码,使这个代码被调度起来,再通过ps -al来观察,可以看出当前进程的优先级大小为80
将优先级修改为90:nice值为10( 90= 80 + 10 )
ps:将优先级调高需要root权限
将优先级修改为70:nice值为-10( 70= 80 - 10 )