一、什么是进程优先级
什么是优先级:获得某种资源的先后顺序,比如排队的本质就是在确认优先级,打饭的窗口排队,按顺序形成的优先级依次打饭,获取资源:午餐。
为什么需要优先级:本质是目标资源比较少,需要排队使用,饭堂只有一个打饭窗口,需要人们排队取餐。
系统中的进程调度也一样,因为 CPU 的数量较少,远远不能满足一个进程独占一个CPU的需求,因此需要指定进程优先级,排队使用CPU。
二、如何查看进程优先级 PRI
系统中启动的进程优先级,默认为 PRI = 80
。
(1)命令 ps -la
:查看当前系统中正在运行的进程的运行状态
如下:我们启动一个进程 test1
,看到该进程优先级 PRI = 80
(2)命令 ps -la | head -1; ps -la | grep test1
:单独筛选查看进程名为 test1
的进程状态
该命令用于单独查看进程名为 test1
的进程,可以分为两部分理解:
-
ps -la | head -1
:显示ps -la
命令输出的第一行(通常是表头信息)。框框中的就是表头:展示信息
ps -la | grep test1
:筛选ps -la
命令输出中包含字符串test1
的行。
grep test1
:用于筛选进程名为 test1
三、nice
值:修改进程优先级
1、查看 nice 值
命令 ps -la
:
2、进程优先级 PRI
的计算原理与 nice
值的调整范围
在 Linux 中,进程优先级 PRi
的计算公式:最终的 PRI
= 默认的 PRI(80)
+ nice
值
因为 默认的 PRI(80)
一般不会改变,因此用户可以通过修改 nice
值,间接修改一个进程的优先级。
系统默认的 nice
值是 0, nice
值的范围通常是从 -20(最高优先级)到 19(最低优先级),一共 40 个级别,因此调整 nice
值的范围为 [-20,19] ,若越过这个范围,系统只会保留规定范围的上下限值(如将 nice
值修改为 100
, 系统只会保留下限值: 19
)。
因为优先级数值越小,优先级越高,因此:
- 要提高优先级(即减小
nice
值),请输入一个负数。 - 要降低优先级(即增大
nice
值),请输入一个正数。
下面是三种修改 nice
值的方式:
3、三种修改 nice
值的方式
(1)命令 nice -n [nice值] [进程名字]
:设置一个还未启动的,新进程的初始优先级
通过该命令调整名为 myrocess
进程 的 nice值
,使该进程的优先级降低 5 ,例如:
nice -n 5 myrocess
(2)命令 renice -n [nice值] -p [pid]
:更改已经在运行的,指定 pid
的进程的优先级
通过该命令调整 pid = 1234
的进程 的 nice值
,使该进程的优先级降低 10
,例如:
renice -n 10 -p 1234
(3)命令top
+ 命令 r
:进入重设优先级模式
命令top
:进入一个交互式的系统监视工具
命令 r
:进入重设优先级模式,并根据提示输入需要重设优先级的进程 pid
(注意要使用键盘上方的一行数字输入,如果使用小键盘输入数字无效),然后根据提示输入一个 nice
值来调整该进程的优先级,最后回车。
四、答疑解惑
1、为什么不能直接修改 PRO
,而是通过修改 nice
值间接修改进程优先级
限制用户权限:直接修改 PRI
可能会导致用户滥用权限,使得某些进程占用过多的系统资源。通过 nice
值,系统可以限制用户调整优先级的程度(如 nice
值是由一个规定范围的)。
系统调度的复杂性:因为 PRI
值不仅受 nice
值影响,还受其他因素影响(如进程的状态、I/O 请求、内存使用情况等),Linux 内核的调度算法会根据这些因素进一步综合的调整进程优先级 PRI
。
系统 nice
值相当于提供给用户一个简化的接口来调整优先级,用户不需要深入理解内核调度算法。通过调整 nice
值,系统会自动计算出相应的 PRI
值,从而影响进程的调度。这种方法既简单又可靠,同时也保证了系统的稳定性和公平性。
2、为什么系统会限制 nice
值的范围与修改次数
系统的表现:
系统规定 nice值
范围为 :[-20, 19]
系统只允许普通用户修改进程 nice
值的次数,一般为1~2次:如在 top
中修改进程优先级,若修改 nice
值 2 次以上,就会报错
为什么会被限制
和 系统稳定性与安全性 有关
-
资源分配:如果允许用户随意调整
nice
值,可能导致某些进程占用过多资源,从而影响系统的整体稳定性。 -
防止滥用:限制
nice
值的调整次数和幅度可以防止用户滥用优先级调整功能,避免对系统造成不必要的负担。 -
权限管理:通过限制普通用户的
nice
值调整能力,可以增强系统的安全性,防止恶意用户通过调整优先级来影响系统运行。有些人会恶意写入并运行某些恶意程序,抢占CPU资源,影响其他程序如系统的正常运行
五、进程的并行与并发
可以通过本篇博客先了解一下进程的并行和并发:【Linux】并行与并发(含时间片)-优快云博客
进程的并行与并发运行,是一个很好的例子证明:系统指定进程优先级来调度进程顺序的优势
例如在并发执行的场景中,操作系统通过调度算法来决定哪个进程何时获得 CPU 时间。进程优先级在此过程中起到了关键作用:
响应时间优化:通过优先级调度,系统可以优先执行关键任务或高优先级任务,从而减少响应时间。
资源公平分配:通过调整优先级,系统可以在多个任务之间实现资源的公平分配。
防止饥饿现象:优先级调度可以防止某些进程长时间得不到执行的机会,从而避免饥饿现象。
什么是进程饥饿:简单来说,若某些进程优先级过低,进程调度器只会先调用优先级高的进程,若优先级高的进程有很多,特别是用户恶意不停将某些进程调高,将导致低优先级进程迟迟得不到调用,造成进程饥饿(饭堂打饭排队,前面老有人插队,导致你迟迟打不上饭,你就会饥饿)
实际上,本章节在笔试面试中不重要,但是这是我们学习过程中一个重要的拼图!