资讯动态

【进程】-5-进程优先级

发布时间:2026/9/16 8:25:03 来源:尧图企业网站定制
** 博主名称**迷途之人不知返 个人专栏: 《C语言》、《数据结构》、《C》、《Linux》️ Gitee仓库: 《C语言》、《数据结构》、《C》、《Linux》/ 算法专栏: 《算法精选集》进程优先级1、进程优先级及优先级与权限的关系2、为什么会有优先级3、Linux的优先级(长什么样)3.1、UID3.2、PRI NI3.2.1、nice值如何修改3.2.2、pri(old)和pri(new)如何理解3.2.3、nice的范围1、进程优先级及优先级与权限的关系进程得到某种资源的先后顺序叫做优先级。之前学习的权限规定的是能与不能的问题而优先级关注的不再是能不能的问题(因为大家都能了)而是哪个先哪个后的问题。2、为什么会有优先级因为资源稀缺我们需要通过优先级确定使用资源的先后顺序。例如单核计算机只有一个CPU而需要在CPU上运行的进程会有很多个。这时操作系统就按照进程的优先级把这些进程排列在调度队列中并按照进程的优先级依次放入CPU执行。(这就是操作系统基于优先级展开选择调度)3、Linux的优先级(长什么样)Linux优先级的特点与调度算法有关。我们依旧创建一个C程序内容是死循环// test1.c#includestdio.h#includeunistd.hintmain(){printf(我是一个进程。pid: %d, ppid: %d\n,getpid(),getppid());sleep(1);return0;}编译并运行程序。然后我们打开另一个终端窗口执行指令ps -al查看优先级其中有不少项目我们是很熟悉的了项目解释Sstate进程状态PID进程标识符PPID当前进程的父进程的标识符TTY显示当前进程所处的终端CMD当前进程对应的程序现在我们把目光集中在这三项UID, PRI, NI。3.1、UIDUIDuser id表明这个进程是谁启动的。由于Linux是一个多用户协作的操作系统所以对进程标明UID是很有必要的。那么UID与用户名有什么关系呢我们执行ps -al查看进程优先级的时候看到的是数字组成的UID而我们执行ls -al查看文件具体信息的时候看到的是具体的用户名实际上操作系统建立了用户名与UID的映射关系。操作系统一开始拿到的都是UID。查看文件具体信息的时候UID就通过映射关系转化成了用户名而查看进程优先级的时候UID就没有转化。那么我们如何查看UID与用户名的映射关系呢查看/etc/passwd文件小贴士1当然我们也可以查看文件/etc/shadow里面有每个用户对应的密码只不过密码是被加密过的。我们也可以认为用户登录Linux系统输入密码后操作系统就会拿着用户当前输入的密码与文件中保存的密码相比较相同就允许用户登录不同就让用户再次输入(不让登录)。3.2、PRI NI实际上PRI: 当前进程的优先级。PRI值越小优先级越高。NI: nice值进程优先级的修正数据。小贴士2严格来说nice值不属于优先级范畴但是nice值是一个非常巧妙的设置我们将在“进程调度”一文中学习到。既然有nice值这个概念那么进程优先级就是可以被修改的。这里有一个进程优先级的修改公式pri(new) pri(old) nice3.2.1、nice值如何修改nice值修改的步骤是topr(renice)输入进程pid输入新的nice值对于文件test1.c编译而来的test.exe初始的优先级为我们修改nice值为10再看看优先级为设置nice为10那么新的优先级肯定就是90了。3.2.2、pri(old)和pri(new)如何理解上面我们将nice改成了-10进程优先级PRI变为了70。所以ps -al打印在屏幕上的PRI是pri(new)。我们再次修改把nice修改成10看看进程优先级又变成了什么样子nice修改成-10进程优先级变成70了难道进程优先级不是由90变为80吗实际上pri(old)是一个常数Linux中一般是80。我们修改nice操作系统就根据等式pri(new) pri(old) nice由pri(old)求出pri(new)再将pri(new)作为我们看到的进程优先级。那么开发者为什么要这样设置呢原因是有了nice值我们就不需要关注进程上一次修改后的优先级是什么样的。修改进程优先级的本质是按照用户的期望修改一个整型值。如果设计成80变9090变80的方案用户修改优先级的时候还要先获取上一次的优先级这就比较麻烦而使用nice值用户修改进程优先级的时候只需修改nice值然后操作系统就会帮我们计算得出新的优先级更直接更方便。小贴士3普通用户直接修改进程优先级时会失败因为操作系统是不建议普通用户随便修改进程的优先级的这会破坏调度器调度的公平性。想要强制修改优先级我们可以使用root账号。3.2.3、nice的范围上面“小贴士3”中提到了“随便修改进程的优先级会破坏调度器调度的公平性”。实际上Linux操作系统是一种分时操作系统(对应有实时操作系统)。分时操作系统调度进程的时候要尽可能保持公平性(这个公平性是相对的)。比如假设一个用户把所有自己创建的进程都改得很小那么这个用户的所有进程都会被优先调度优先享受资源那么其它用户的进程就不会那么及时地享受到资源就会造成进程饥饿。所以Linux不建议普通用户随意修改进程的优先级同时Linux对nice值也有一个限定的范围。我们可以通过代码与指令找出nice值的范围。对于程序test.exe初始的PRI还是80NI还是0。给一个很大的nice值比如10000nice值最大为19。给一个很小的nice值比如-10000nice值最小为-20。所以nice值的范围是[-20, 19]我们还可以得出两个结论nice值有40个对应Linux进程的优先级有40种——[60, 99]当然修改进程优先级还有指令方法和代码方法这些方法就留给我们自行探索。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价