【linux】进程优先级,进程切换

1.进程优先级(了解)

1.什么叫做进程优先级?

我们知道权限是能还是不能做的问题,那对应的优先级就是能做,但是是先做还是后做的问题。

2.为什么存在优先级?

因为资源太少了

3.linux优先级特点。
优先级本质上就是PCB里面一个整数数据,也可能是几个。

我们看看linux下进程优先级怎么表示的。

ps -la //查看进程信息

在这里插入图片描述

PRI是对应的优先级。,PRI值越低优先级越高。

一个进程刚出来是有优先级的,并且linux支持进程运作中,进行优先级调整的,调整的策略就是更改nice完成的。因此nice的范围也是优先级的范围。

调整进程优先级

sudo top

在这里插入图片描述

r

输入调整进程的pid
在这里插入图片描述
输入调整范围
在这里插入图片描述
确定之后,按q退出。

在这里插入图片描述
发现进程优先级确实改变了,但是我明明把nice的设为-100,才到-20,而PRI为60。

再看下面一个。
在这里插入图片描述

在这里插入图片描述
这次修改nice值为100,但是只有19,而PRI为99。

从这我们就可以看出nice范围和PRI范围。
nice[-20,19] PRI[60,19]

并且最终优先级=老的优先级(默认为80)+nice

2.进程切换

进程的特性:

竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。
独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰。
并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行。
并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发。

这里主要讲讲进程的切换问题。

在这里插入图片描述
1.当我们的进程在运行的时候,一定会产生非常多的临时数据,这份数据属于当前进程! CPU内部虽然有一套寄存器,但是寄存器里面保存的数据是属于当前进程的。 所以
寄存器硬件 != 寄存器内的数据

2.进程在运行的时候要占有CPU,但是进程并不是一直要占有到进程结束。如写一段while(1)死循环,我们还可以操作其他进程。

这是因为进程在运行的时候,都有自己的时间片,超过时间不管该进程有没有执行完都会被剥离,等待下次运行。然后切换下个进程。

这里就有一个问题了。当我再次运行被剥离的进程,这个进程会从头开始重新运行,还是会沿着被剥离的时候再继续往下运行呢?

这里就和上大学然后去当兵类似,去当兵肯定会去保留学籍,然后退伍之后回来接着上。

离开学校,保留学籍,上下文保护
回到学习,恢复学籍,上下文恢复

那为什么要保护和恢复呢?
保护就是为了恢复的。

注意,保留的是cpu内寄存器的数据,而不是寄存器。

进程在切换的时候,要进行进程的上下文保护,当进程再恢复运行的时候,要进行上下文的恢复!

在任何时候,cpu里面的寄存器里面的数据,看起来是大家都能看到的寄存器上,但是寄存器内的数据,只属于当前进程。

寄存器被所有进程共享,寄存器内的数据,是每个进程各种私有的。

猜你喜欢

转载自blog.csdn.net/fight_p/article/details/132755329