如何理解进程的优先级
进程的优先级代表着cpu资源分配的先后顺序,也叫做进程的优先权。一般来说,优先级越高的进程先对来说越重要,越重要的越容易获得cpu.这样可以使进程调度变得更加灵活,也使得整体的系统性能得到改善。
那如何描述一个进程的优先级呢?换句话说就是擦做系统是怎么知道操作系统是如何比较进程的优先级的呢?
之前我们学过进程是如何被描述的。进程=PCB进程控制块+数据段+代码段
在linux中,用task_struct描述一个进程,优先级其实就是结构体task_struct里面的一个整型变量,其值越高优先级也就越大。
如何查看进程的优先级
在linux系统中,可以考虑用ps -l
指令查看进程的优先级
分析几个比较重要的字段
UID:表示执行者的身份,即用户的id.
PID:进程号,进程的唯一标识符
PPID:父进程的PID
PRI:进程的优先级,值越小优先级越高
NI:进程的nice值(优先级的调整值)
PRI和NI
PRI用来表示进程的优先级,NI即nice,用来修改进程的优先级,但是也不能随意修改,其范围表示为 [-20-19],一共四十个级别。
所以调整nice值就是调整进程优先级,新的PIR=以前的PIR+NI。
使用top命令修改进程的nice
首先创建一个测试进程:
运行该程序后会输出进程的PID,我们用top命令可以看到该进程的信息
可以观察到23886进程的PR(PRI)值和NI(nice)值分别是20 0.
在进入top后按r,输入23886,就可以修改23886进程的nice值。现在输入10.
我们发现进程23886的PR(PRI)值和NI(nice)值分别变成了是30 10.
表示当前的进程的PRI是由原来的PRI加上10得来的。
值得注意的是,每次修改进程的PRI值都是在最初始的PRI的基础上+nice得来的。
也就是说,第一次修改PRI是20+10=30,第二次也是在20的基础上+nice,而不是在新的基础上。系统会记录进程的初始PRI。