Linux-进程优先级

为什么要有优先级

显然,在多任务操作系统中,进程占用cpu必须需要人为能够控制。
原因是因为:有的进程非常重要,有些进程当下来看没有那么重要。
所以就需要有优先级来区分他们。
进程是需要切换的,意味着在同一个调度周期中,优先级高的占用cpu的时间就长,优先级低的占用就短些。

NI and PRI

这里写图片描述

用ps -l命令可以查看以上字段,对他们都加以说明:

  • F 代表这个程序的旗标 (flag), 4 代表使用者为 superuser;
  • S 代表这个程序的状态 (STAT);
  • UID 代表执行者身份
  • PID 进程的ID号!底下的 PPID 则父进程的ID;
  • C CPU 使用的资源百分比
  • PRI指进程的执行优先权,其值越小越早被执行;
  • NI 这个进程的nice值,其表示进程可被执行的优先级的修正数值。
  • ADDR 这个是内核函数,指出该程序在内存的那个部分。如果是个执行的程序,一般就是『 - 』
  • SZ 使用掉的内存大小;
  • WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作;
  • TTY 登入者的终端机位置;
  • TIME 使用掉的 CPU 时间。
  • CMD 所下达的指令名称
    我们这里只对PRI和NI做详解,其他字段以后会说明。

先来解释PRI与NI是什么含义:

PRI:就是进程的优先级,其值越小,优先级越高
NI:即nice值。表示进程可被执行的优先级的修正数值
PRI(new)=PRI(old)+NI
PRI与NI不是一个概念,是两个不同的概念。

修改NI

nice值的取值范围是:-20~19;一共40个级别。
这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。该值是可以命令修改的。
方法一
在程序运行前修改:

#include <stdio.h>      
#include <stdlib.h>
int main()
{
    while(1)
    {
        sleep(1);
    }

    return 0;

这里写图片描述
使用以上命令,在程序运行之前修改其nice值。
这里写图片描述
以上可查看到nice与PRI都被改掉了。

方法二:
调整已运行的程序的nice值:renice
查看当前运行中的进程的优先级:
这里写图片描述
修改正在运行的进程的优先级:
这里写图片描述
以上可看到nice值和PRI都被修改了。
方法三
用top命令,进入以后按r,输入pid号,在输入修改的nice值。可以看到以及被修改。
这里写图片描述

注意:虽然我们一直在说nice值,但是nice值并不是优先级,但他却能影响优先级的值。
引用网上的一个例子:(非常形象)

  • 在英语中,如果我们形容一个人nice,那一般说明这个人的人缘比较好。什么样的人人缘好?往往是谦让、有礼貌的人。
    比如,你跟一个nice的人一起去吃午饭,点了两个一样的饭,先上了一份后,nice的那位一般都会说:“你先吃你先吃!”,这就是人缘好,这人nice!但是如果另一份上的很晚,那么这位nice的人就要饿着了。
    这说明什么?
    越nice的人抢占资源的能力就越差,而越不nice的人抢占能力就越强。这就是nice值大小的含义,nice值越低,说明进程越不nice,抢占cpu的能力就越强,优先级就越高。

动态优先级与静态优先级

在原来使用O1调度的Linux上,我们还会把nice值叫做静态优先级,这也基本符合nice值的特点,就是当nice值设定好了之后,除非我们用renice去改它,否则它是不变的。
而priority的值在之前内核的O1调度器上表现是会变化的,所以也叫做动态优先级
在内核中,进程优先级的取值范围是通过一个宏定义的,这个宏的名称是MAX_PRIO,它的值为140。而这个值又是由另外两个值相加组成的,一个是代表nice值取值范围的NICE_WIDTH宏,另一个是代表实时进程(realtime)优先级范围的MAX_RT_PRIO宏。

总结:正常情况下,任何一个进程的优先级都是这个值,即使我们通过nice和renice命令调整了进程的优先级,它的取值范围也不会超出100-139的范围,除非这个进程是一个实时进程,那么它的优先级取值才会变成0-99这个范围中的一个。
详细可查看深入Linux的进程优先级

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值