Linux中的进程优先级

Linux中的进程优先级

引入

在Linux操作系统中,进程的优先级对于系统的性能和响应时间至关重要。进程的优先级决定了该进程在系统资源分配中所占的比例。Linux中的进程调度器根据进程的优先级来决定何时运行哪个进程。因此,理解Linux进程的优先级非常重要,可以帮助我们更好地管理和优化系统性能。

在本文中,我们将深入探讨Linux进程的优先级。首先,我们将介绍进程的基本概念,然后深入了解Linux进程的优先级如何工作,包括如何设置和修改进程的优先级。最后,我们将讨论如何使用Linux进程优先级来优化系统性能。

1、基本概念

由于系统资源是优先的,因此CPU需要以一定的顺序分配资源,优先级即是进程获取资源的先后顺序,优先权高的进程有优先执行权,配置进程优先权对多任务环境的Linux很有用,可以改善系统性能

优先级与权限:能还是不能—>能,先做还是后做的问题

为什么存在优先级?——因为资源太少了

Linux优先级特点:很快,优先级的本质是PCB里面的一个整数数字(也有可能是几个)

2、查看进程

我们通过以下指令来得到当前中断进程的信息:

ps -l

image-20230420145447827

其中包含了:

  • UID:代表执行者的身份;
  • PID:代表这个进程的代号;
  • PPID:父进程代号,代表这个进程是由哪个进程发展衍生而来的;
  • PRI:代表这个进程可被执行的优先级,其值越小越早被执行;
  • NI:代表这个进程nice值。

我们此时运行一个睡眠程序:

image-20230420165646905

此时我们查看进程信息(ps -l通常看不到该进程,我们加上-a选项即可看到)

ps -la

image-20230420165903700

3、PRI和NI

PRI(priority)&&NI(nice)

PRI是进程的实时优先级,值越小,优先级越高,表示进程越重要,应该更早地获得CPU时间片;NI是进程的优先级偏移值(nice),范围是-20~+19,NI的默认值是0,可以通过nice命令来改变它。

进程的总优先级 = PRI + NI。例如,一个PRI为80,NI为-5的进程的总优先级为75。当进程需要获得CPU时间片时,调度器会根据进程的总优先级来进行调度,总优先级越高的进程会更早地获得CPU时间片。

需要注意的是,NI的取值范围是有限制的,只能在-20到+19之间,而且只有超级用户(root)才能将NI设置为负数。这是为了避免普通用户通过提高进程优先级来影响系统的稳定性。

4、修改进程优先级

top指令是一款常用的系统监控工具,它可以实时地查看系统的运行状态,包括CPU占用率、内存占用率、进程运行情况等等

top指令修改nice值:

输入top指令—>按R键—>输入要更改进程的PID—>输入修改后的nice值

例如我们运行如下程序,使得它一直打印输出该进程与其父进程的PID

我们在另一个终端监视并查看该进程信息,并更改其nice值:

image-20230420184353502

按回车之后再输入要修改的nice值,即可实现对进程优先级的修改:

image-20230420184627664

此时我们再通过ps指令查看该进程优先级:

ps -la

image-20230420184711145

此时由于nice值由0更改到了5,因此进程总优先级PRI即被更改成了85;

前面介绍到,PRI初始值为80,而允许修改的NI值在-20到+19之间,为什么要限定NI值的修改范围呢?

Linux系统一共有140个优先级,很多优先级不是给普通的进程使用的,60~99这40个优先级是给用户使用的;因为操作系统存在多个系统进程,用户随意修改NI值会导致系统进程优先级过低,从而降低系统的稳定性和响应性能

5、进程切换

CPU永远在做三件事情:

1、取指令

2、分析指令

3、执行指令

CPU中有一个名为PC寄存器,其作用是存储当前正在执行指令的下一条指令的地址;当我们的进程在运行的时候,一定会产生非常多的临时数据,这份数据属于当前进程!

而对于CPU而言,CPU内部虽然只有一套寄存器硬件,寄存器里面保存的数据,是属于当前进程的(寄存器硬件!=寄存器内的数据);上下文数据存放在进程PCB(tast_struct)当中

在进程运行的时候,都有进程的时间片;当进程发生切换的时候,要进行进程的上下文保护,当进程在恢复运行的时候,要进行上下文的恢复

One more thing

1、竞争性:系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级

2、独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰;进具有独立性,不会因为一个进程挂掉或者异常,而导致其他进程出现问题

3、并行::多个进程在多个CPU下分别,同时进行运行,这称之为并行

4、并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发;

猜你喜欢

转载自blog.csdn.net/kevvviinn/article/details/130290961