进程优先级和其他概念
一、进程优先级
1.1 基本概念
什么是优先级?
- 进程的优先权(priority)就是用来确定CPU资源分配的先后顺序的。
- 进程的优先级是调度器调度进程到CPU执行的重要指标。
为什么要存在优先级?
- 由于CPU资源有限,但是等待被执行的进程却很多,这时就需要通过某种方式竞争资源。
配置进程优先权的好处?
- 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以使系统高效完成任务,更合理地配置相关资源,从而改善系统性能。
- 进程还可以在指定的CPU上运行,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。
1.2 查看进程优先级
ps -l 命令
在linux或者unix系统中,用ps –l
或 ps -al
命令则会类似输出以下几个内容:
我们很容易注意到其中的几个重要信息,有下:
UID : 代表执行者的身份
PID : 代表这个进程的代号
PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
PRI :代表这个进程可被执行的优先级,其值越小优先级越高越早被执行
NI :代表这个进程的nice值
PRI and NI
进程的PRI为:PRI = Default_PRI + NI
- PRI 即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。
- Default_PRI:为默认优先级,是操作系统为进程自动设定的优先级。
- NI 即进程的nice值,其表示相对进程默认优先级的修正数值。
- 当nice值为负值的时候,该程序的PRI将变小,其优先级会变高;
- 所以,调整进程优先级,在Linux下就是修改进程的nice值。
注意:
如果将进程的nice值设置为负数,即将进程的优先级调高,需要root权限。
nice其取值范围是-20至19,一共40个级别,也就是进程优先级的变化范围。
限制nice值的范围有以下几个原因:
- 防止滥用系统资源:如果允许进程设置任意的nice值,那么恶意进程可能会将自己的优先级设置得非常高,从而占用大量的CPU资源,导致其他进程无法正常运行。
- 维护系统的稳定性:通过限制nice值的范围,可以确保系统中的关键进程(如系统服务)具有较高的优先级,以保持系统的稳定性和响应性。
- 避免优先级倾斜:如果允许进程设置过低或过高的nice值,可能会导致优先级倾斜,即某些进程过于优先处理,而其他进程则无法得到足够的CPU时间。
通过限制nice值的范围,系统可以更好地管理进程的优先级,确保资源的合理分配和系统的正常运行。
1.3 修改进程优先级
使用top命令更改进程的nice值:
进入top后按“r”–>输入进程PID–>输入nice值
将myproc进程的nice值设为-20后又设为19:
二、其他概念
2.1 竞争性和独立性
- 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理配置相关资源,便具有了优先级
- 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰
2.2 并发和并行
- 并行(Parallel):是指多个CPU同时执行多个任务或操作。在并行计算中,多个任务可以同时进行,每个任务都有自己的处理器或计算资源。并行计算可以显著提高计算速度和系统的吞吐量。例如,多核处理器可以同时执行多个线程或进程,从而实现并行计算。
- 并发(Concurrency):是指一个CPU通过采用进程切换的方式,在一段时间之内让多个进程都得以推进。在并发计算中,多个任务可以交替执行,通过时间片轮转、抢占与出让CPU资源或者事件驱动的方式来切换执行。并发计算可以提高系统的响应性和资源利用率。
2.3 进程上下文
进程的上下文(Context)是指操作系统在调度和切换进程时需要保存和恢复的进程相关的信息。上下文包括了进程的执行状态、寄存器的值、内存映射、打开的文件描述符、信号处理器等。
进程的上下文保存了进程的执行环境,以便在进程被中断或切换时能够恢复到之前的状态,并按照之前的逻辑继续向后运行,就如同没用中断过一样。 当操作系统决定切换到另一个进程时,它会保存当前进程的上下文,并加载下一个进程的上下文,以便继续执行。上下文切换通常发生在以下情况下:
-
时间片用尽:当一个进程的时间片用尽时,操作系统会保存当前进程的上下文,并加载下一个进程的上下文。
-
中断处理:当发生硬件中断或软件中断时,操作系统会保存当前进程的上下文,并转而处理中断请求。
-
优先级调度:当一个优先级更高的进程就绪并等待执行时,操作系统会保存当前进程的上下文,并加载优先级更高的进程的上下文。
上下文切换是一项开销较大的操作,因为需要保存和恢复大量的进程信息。因此,减少上下文切换的次数可以提高系统的性能和响应性。优化上下文切换是操作系统设计和调度算法的重要考虑因素之一。