Linux-进程优先级
🌈个人主页:Yui_
🌈Linux专栏:Linux
🌈C语言笔记专栏:C语言笔记
🌈数据结构专栏:数据结构
🌈C++专栏:C++
文章目录
- 1. 为什么要有优先级的概念
- 2.进程优先级的基本概念
- 3.查看系统进程
- 3.1 介绍PRI和NI
- 3.1.1 调整进程的优先级
- 4. Linux的调度与切换
1. 为什么要有优先级的概念
大多数人的电脑都是一个CPU,一次只能处理一个进程任务,但是进程又有很多个。这也就导致的CPU的资源不足,为了更合理的利用CPU资源,就存在进程优先级来确定进程获取CPU资源的顺序。
就要生活中的排队,进程在CPU中也是需要排队的,除了遵循先来后到的排队原理,还存在优先级更高的进程是可以进行插队的,这也可以理解,在医院排队时,如果碰到急诊病人是可以优先挂号的。
提问:有没有可能因为大量的优先级更高的进程插队导致低优先级的进程迟迟得不到执行。
回答:这就涉及到了进程饥饿的问题了,在Linux下是有相关解决方法的,Linux会维护两个队列,一个为活跃队列,另一个为过期队列,这里就不细讲了。
2.进程优先级的基本概念
- CPU资源分配的先后顺序,就是指进程的优先级(priority)
- 优先权高的进程有优先执行权力。配置进程优先级对多任务环境的Linux很有用,可以改善系统的性能。
- 把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。
进程要访问某种资源,就必须通过一定的方式,确定享受资源的先后顺序。
可能有人会把进程的优先级和权限进行类比,其实两者还是很不同的:
优先级决定的是顺序问题。
权限决定的能不能的问题。
3.查看系统进程
在Linux或者unix系统中,输入ps -l
会出现以下内容:
下面我们来介绍各个符号的意义
- UID:代表执行者的身份。
- PID:代表这个进程的代号。
- PPID:代表这个进程是由哪个进程发展衍生而来的,也就是父进程的代号。
- PRI:代表这个进程可被执行的优先级,其值越小优先级越高。
- NI:代表这个进程的nice值。
3.1 介绍PRI和NI
- PRI就是进程的优先级,通俗点就是程序被CPU执行的先后顺序,此值越小进程的优先级越高。优先值范围[60,99],一般默认的优先级为80
- 那NI就是我们要说明的nice值,表示进程可被执行的优先级的修正数值。
- PRI越小越快被执行,那么加入nice值后,就会得到新的PRI:PRI(NEW) = PRI(OLD)+nice.
如此一来的话,当nice值为负值的时候,那么该程序就会优先值变小,其优先级会变高。则越快被执行。
nice的取值范围为[-20,19],一共40个级别,这也就对于了第一点。
3.1.1 调整进程的优先级
通过公式PRI(NEW) = PRI(OLD)+nice。我们知道,调整进程的优先级的本质就是调整nice的值。
指令:top
进入top后按“r”->输入进程PID->输入nice值
演示:修改niec值为100.
通过演示我们可以发现,尽管nice的值被修改为100,PRI的值就值变成了99.由此也可以证明PRI的范围。
值得注意的是,每次都是直接给nice赋值,而不是在原有nice的基础上加减。
提问:为什么调整优先级是要受限制的?
回答:如果不加限制,将自己进程的优先级调整的非常高,别人的优先级调整的非常低,优先级较高的进程,优先得到资源,后续源源不断的进程产生。常规进程很难享受到CPU的资源,也就造成的进程饥饿问题。
4. Linux的调度与切换
提问:在进程运行时,CPU会直接把进程代码跑完吗?
答案:是不会的,现代操作系统就是基于时间篇进行轮流执行的,假设每个进程执行1ms,那么CPU在每1ms都会切换进程来执行。
一些其他概念
- 竞争性:系统进程数目众多而CPU资源只有少量,甚至一个,所以进程间是具有竞争属性的,为了高效完成任务,更合理竞争相关资源,便有了优先级。
- 独立性:多进程运行,需要独享各种资源,多进程运行期间,互不干扰。
- 并行:多个进程在多个CPU下分别,同时进行运行,这称之为并行。
- 并发:多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程得以推进,称之为并发。