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)!