【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内的寄存器只有一套,但寄存器内部保存的数据可以有多套,每套保存的数据都是私有的。


相关文章
|
11天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
47 3
|
11天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
37 2
|
5天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
13 3
|
12天前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
53 8
|
9天前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
|
11天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
44 3
|
14天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
34 6
|
14天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
49 6
|
15天前
|
机器学习/深度学习 自然语言处理 Linux
Linux 中的机器学习:Whisper——自动语音识别系统
本文介绍了先进的自动语音识别系统 Whisper 在 Linux 环境中的应用。Whisper 基于深度学习和神经网络技术,支持多语言识别,具有高准确性和实时处理能力。文章详细讲解了在 Linux 中安装、配置和使用 Whisper 的步骤,以及其在语音助手、语音识别软件等领域的应用场景。
47 5
|
15天前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
39 3
下一篇
无影云桌面