【Linux】进程周边之优先级、调度与切换
目录
一、优先级
1.为什么要有进程优先级?
2.什么是进程优先级?
3.优先级的初始设定
3.1 PRI 和 NI
3.2如何修改优先级?(sudo/root)
3.2.1 概念:
3.2.2 如何查看进程的优先级?
3.3.3 或者查看某个特定进程的优先级?
3.3.4使用top指令修改NI
3.3.5 使用renice指令修改NI
3.3为什么优先级不能随意修改?
3.4进程相关的一些概念
一、优先级
1.为什么要有进程优先级?
资源过少!
当计算机中的某种资源数量,与即将使用该资源的进程数量相比,比较少。
不能立刻满足进程的需求。
因此,进程需要进行排队,等待这种资源。
使用优先级,确定进程被执行的先后顺序。
2.什么是进程优先级?
- cpu资源分配的先后顺序,就是指进程的优先权(priority)。
- 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。
- 还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。
3.优先级的初始设定
3.1 PRI 和 NI
在Linux中,优先级就是一个int类型的变量。
- PRI : 代表这个进程可被执行的优先级, 其值越小越早被执行
- NI :代表这个进程的nice值, 我们通常通过修改nice值来修改PR
在进程控制块PCB中,对于进程优先级、以及相关变量NI 是这样定义的。
在Linux中,默认的优先级是80。
Linux优先级是可以被修改的,Linux的优先级的范围[60,99],总共40个优先级。
Linux优先级本质就是数字,数字越小,优先级越高
3.2如何修改优先级?(sudo/root)
3.2.1 概念:
PRI(新) = PRI(old)+ NI
对以上公式做出解释:
🔥PRI(old) = 80
🔥Linux系统允许用户调整优先级,但是不能直接让你修改pri,而是修改 NI 值
NI 不是优先级,而是进程优先级的修正数据!
- PRI取值范围[60,99]
- nice值取值范围[-20,19]
3.2.2 如何查看进程的优先级?
ps -al
3.3.3 或者查看某个特定进程的优先级?
ps -al | head -1 && ps -al | grep 特定进程的pid/进程名
3.3.4使用top指令修改NI
- 输入top启动任务管理器
- 输入r(renice)来修改NI的值
- 再输入目标进程的pid来定位
- 输入想要修改的NI值(注意不是输入PRI值)
top修改进程优先级
3.3.5 使用renice指令修改NI
renice NI的值 对应进程的pid
辨析:权限vs优先级
权限:能不能
优先级:可以执行,但是被执行的时间早晚。
3.3为什么优先级不能随意修改?
为什么修改优先级,只能在规定的【60,99】这个区间,反而不能无下限无上限的修改?
这是因为,操作系统在调度进程时,需要较均衡的让每一个进程都要得到调度。
如果用户无下限的修改优先级,始终会有优先级高的进程不断产生,
而那些,优先级较低的进程,长时间得不到CPU的资源。这就是是进程饥饿问题的产生。
3.4进程相关的一些概念
- 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便有了优先级。
- 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰。
- 并行: 多个进程在多个CPU下分别同时进行运行,这称之为并行。
- 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发
并行与并发在之后的文章中还会提到!大家要对这两个概念有了解。