自学内容网 自学内容网

Liunx操作系统:对进程的优先级的详细讲解

这个话题较短,写的内容不会太多。

一、什么是优先级

  这个概念与我们现实生活中遇到的优先级相同,那么在操作系统里,进程优先级就是指定进程获取某种资源的先后顺序

  在CPU的正常工作中,操作系统要维护CPU的一个运行队列,我们的进程PCB以一个先进先出的方式挂起在CPU的运行队列里,等待CPU的调度,等时间片用完,CPU就会将这个进程剥离,换下一个进程进行调度。

  这样在CPU的运行队列里进行排队的方式就是获取CPU资源的先后顺序,在队列头部就是优先级较高的进程,在队列尾部就是优先级较低的进程。

  区分进程优先级的高低,可以说是去比较进程的task_struct结构体内部的一个属性,名为优先级。

  可以理解为,在进程task_struct中有一个代表着优先级大小的数字,数字越小,那么该进程优先级就越高。

 

二、为什么要有优先级

1、优先级存在的本质

  为什么要有优先级?有先有后一定涉及到了供不应求的问题。

  好比我们在食堂打饭,到饭点了我们买饭都需要排队,不排队不行吗?不行。我要吃的只有这个窗口有,我想吃就需要等前面先来的同学买完。

  那进程为什么要有优先级。同理,进程访问的CPU资源也是有限的,系统中的进程也不会只有一个,如果几个进程想同时使用硬件资源,那么就必须有一个先后顺序。在不同的时间段内,完成各个进程的作业。

  所以,为什么要有优先级,本质上就是资源是有限的。

  2、操作系统中关于调度和优先级的原则

  我们的进程再被调度和排队时,要有基本的公平,举例:

  如果我们在食堂打饭,一会来一个人插队,并且是无缝衔接的那种,长时间这样下去我们会很饿。

  所以进程也是如此,如果它长时间不被调度,就会造成饥饿问题。

三、Linux的优先级的特点&&查看方式

1、查看进程优先级

  我们写下如下代码:

  很简单的一个循环打印,我们打印出它的pid。

 可以看到它的pid为17895

  那我们在Linux下如何查看它的优先级呢?

  使用命令: ps -l

  查看终端下所有进程的优先级

  如果找不到我们该进程,那么就用命令:

 ps -al

  表示查看当前目录下的所有进程的优先级

  根据进程的pid我们可以找到这个进程。

  那如何看这个进程的优先级呢?我们需要注意这些头标识:

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

  PRI and NI

  •   PRI也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小 进程的优先级别越高
  •   那NI呢?就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值
  •   PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice
  •   这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行
  •   所以,调整进程优先级,在Linux下,就是调整进程nice值
  •   nice其取值范围是-20至19,一共40个级别。

  新的优先级就=PRI+NI,达到对于进程优先级动态修改的过程。就算进程在运行,那么它运行完之后才会修改对应的优先级。

  2、修改进程优先级

  用top命令更改已存在进程的nice: top 进入top后按“r”–>输入进程PID–>输入nice值

  top进入:

  按r进入renice命令,表示重置nice值,并输入进程的pid:

   回车之后跳到修改nice值的界面:

2.1NI的范围

  不是越小优先级越高吗?那我们直接-100,让它很小很小。(这时候如果不可以,那么请换上sudo账号 )

    我们会发现,PRI并没有到我们想象中的-20,而是变成了60,NI也不是-100,而是-20.

  这是因为,操作系统并不会让你随意修改PRI值,NI是有范围的,范围是[-20,19].

  所以,我们的PRI的范围也只能为[60,99]。

2.2 PRI修改时都在默认值80的基础上修改

  我们再修改一次,将NI值改为20:

  奇怪,我们原来的PRI不是60吗,加20应该是80呀,怎么是99了

  注意:PRI(new)=PRI(old)+nice,这里的PRI(old)永远是默认的80,所以我们修改的值是在默认值80的基础上修改的。


原文地址:https://blog.csdn.net/2302_76267737/article/details/143693746

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!