【Linux系统编程】进程的优先级

简介: 【Linux系统编程】进程的优先级

介绍


      进程访问系统资源要排队等待,而cpu资源分配和执行的先后顺序,就是指进程的优先级。进程的优先级,保证了必要进程的执行。


系统进程的查看


       Linux中,ps -l 命令会把当前用户启动的所有进程全部显示出来。其中,对应的消息有下:


               UID : 代表用户的ID,即启动这些进程的用户


               PID : 进程的编号


               PPID :父进程的编号


               PRI :代表此进程可被执行的优先级,它对应的是一个整型数字,其值越小越早被执行


               NI :代表这个进程的nice值


       这里重点说明一下PRI和NI。Linux默认的优先级是80。这个数据可以被更改,但优先级的范围是[60,99],也就是说最大为99,最小为60,数字越小,优先级越高。


       上面的NI是用来修改进程的优先级。进程的优先级不能直接修改,必须通过修改NI的数值来间接修改优先级,它表示进程可被执行的优先级的修正数值,具体修改如下。


进程优先级的修改


       修改优先级的命令是top。在Linux中,top指令是一个常用的性能分析工具,可以实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器,提供了实时的对系统处理器的状态监视。


       当我们使用 top 后,输入 “ r ” 将会更改指定PID进程的优先级,具体实现如下。


[zhu@zhujunhao day]$ ps -la
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  1228  1200  0  80   0 - 47970 do_wai pts/0    00:00:00 su
4 S  1001  1229  1228  0  80   0 - 29156 do_wai pts/0    00:00:00 bash
4 S     0  1395  1372  0  80   0 - 47970 do_wai pts/1    00:00:00 su
4 S  1001  1396  1395  0  80   0 - 29156 do_wai pts/1    00:00:00 bash
0 S  1001  2302  1396  0  80   0 -  3307 hrtime pts/1    00:00:00 code.exe
1 S  1001  2303  2302  0  80   0 -  3307 hrtime pts/1    00:00:00 code.exe
0 R  1001  2304  1229  0  80   0 - 38332 -      pts/0    00:00:00 ps
//可观察到2302的PRI为80
[zhu@zhujunhao day]$ top
.........
//输入“ r ”后出现以下框架,这里我们修改PID为2302的进程
PID to renice [default pid = 965] 2302
//然后回车确定,将会出现以下框架,这里我们将优先级的数值增加10
Renice PID 2302 to value 10
.........
[zhu@zhujunhao day]$ ps -la  //再次查看
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  1228  1200  0  80   0 - 47970 do_wai pts/0    00:00:00 su
4 S  1001  1229  1228  0  80   0 - 29156 do_wai pts/0    00:00:00 bash
4 S     0  1395  1372  0  80   0 - 47970 do_wai pts/1    00:00:00 su
4 S  1001  1396  1395  0  80   0 - 29156 do_wai pts/1    00:00:00 bash
0 S  1001  2302  1396  0  90   10 -  3307 hrtime pts/1    00:00:00 code.exe  //NI变为10
1 S  1001  2303  2302  0  80   0 -  3307 hrtime pts/1    00:00:00 code.exe
0 R  1001  2304  1229  0  80   0 - 38332 -      pts/0    00:00:00 ps
//可观察到2302的PRI为90

      总的来说,修改步骤:进入top后按“r”–>输入进程PID–>输入nice值


       注意:Linux允许用户修改优先级,但这里的修改优先级的数值不是让我们直接修改的,而是通过修改NI的数值来修改。这里的NI不是优先级,而是进程优先级修正的数据,即优先级:PRI = PRI + NI(这里PRI + NI的PRI是系统默认的优先级数值,即80)。前面输入的10就是NI的数值。这里设置NI的数值可以为负数,如在刚才的基础上再次修改为-10,此时的PRI = 70,NI = -10,设为0时即将PRI值还原。也就是说当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行;当nice值为正值的时候相反。


       这里修改优先级的数值不是随心所欲的修改,系统会自动根据优先级范围进行判断,若修改后的优先级数值小于60,那么系统赋予优先级的数值为60;若修改后的优先级数值大于99,那么系统赋予优先级的数值为99。因此,可知,NI的范围是[-20,19],一共40个级别。


       系统的这种设置完美地解决了个别进程优先级过高或过低,避免了进程饥饿的问题。


进程的调度与切换


       当进程放在CUP上运行时,并不是把进程代码跑完才结束此进程。这样做是为了防止进程代码凌乱而导致其它进程不能被及时执行。因此,现代操作系统,都是基于时间片进行轮转执行的。在时间片轮转调度中,每个进程被分配一个固定长度的时间片,用于执行其任务。


       进程的时间片是操作系统中用于实现时间片轮转调度的一个核心概念。当时间片用完时,操作系统会保存该进程的状态,然后切换到下一个进程,给予它一个时间片来执行。这个过程会不断循环,使得每个进程都有机会得到执行,从而实现并发执行的效果。


系统优先级之间的性质


       进程之间既然存在优先级,那么它们之间在被CPU执行的时候必然存在各种性质,保证进程之间正常进行。


       竞争性:系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间具有竞争属性很正常。竞争性跟优先级有关,优先级越高,进程的竞争性越大,竞争性可以说是优先级的体现。


       独立性:独立性指多进程运行时,各种进程独享各种资源,多进程运行期间互不干扰


       并行:表示多个进程在多个CPU下分别,同时进行运行。这种状态在普通计算机中很少见,因为普通计算机一般只有一个CPU。


       并发:表示多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进。


       这里重点说一下并发。并发情况是很常见的情况,如同我们平常启动多个程序时进入的情况。当多个进程启动时,系统内部形成运行队列后就会根据优先级进行运转,进程在运行的过程中会产生大量的临时数据放在CPU的寄存器中,而这些临时数据叫做进程的硬件上下文。硬件上下文将进程的数据保存,当 CPU 再次调度进程时,硬件上下文会被恢复到该进程上一次离开时的状态。这样,进程就可以从它之前离开的地方继续执行,而不会丢失其执行上下文。


       这里要注意,CPU内的寄存器只有一套,但寄存器内部保存的数据可以有多套,每套保存的数据都是私有的。


相关文章
|
12天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
36 1
|
1天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
97 78
|
4天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
30 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
28天前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
115 48
|
7天前
|
SQL 运维 监控
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
|
15天前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
20天前
|
缓存 算法 Linux
Linux内核的心脏:深入理解进程调度器
本文探讨了Linux操作系统中至关重要的组成部分——进程调度器。通过分析其工作原理、调度算法以及在不同场景下的表现,揭示它是如何高效管理CPU资源,确保系统响应性和公平性的。本文旨在为读者提供一个清晰的视图,了解在多任务环境下,Linux是如何智能地分配处理器时间给各个进程的。
|
1天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
11 0
|
24天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
17 3
|
28天前
|
Linux
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
30 1