什么进程优先

优先级:对资源访问顺序!注意优先级与权限区别优先级决定的是访问资源顺序,这意味着无论是谁都可以访问资源;但是如果你没有权限,你是不能访问资源的!
这个应该比较理解我们可以通过生活中的例子理解

为什么要有进程的优先级

因为 CPU 资源有限的,而进程数量远大于 CPU 数量,这就注定了进程之间竞争关系
想象一下,食堂中的同学们也是竞争关系,食堂打饭如果不排队,那些女生和比较弱小的男生可能就吃不到饭了!
同理,操作系统必须保证所有进程进行良性竞争,因此,就必须确定进程之间的优先级!
如果一个进程时间得不到 CPU 资源,该进程代码时间得不到推进,这就是进程的饥饿问题

查看进程优先级

ps -l # 显示当前终端用户启动的进程
ps -al # 显示当前用户启动的所有进程

在这里插入图片描述

改进程优先级

top

top 命令不仅可以用来查看进程,也可以用来改进程的 nice 值!
步骤
1. 输入 top然后回车
2. 输入 r
3. 输入进程的 pid然后回车
4. 输入 nice 值,回车

上面的四部之后就完成改进程的优先级了!注意:top 命令只有管理员身份才能修改进程优先级
在这里插入图片描述
通过 top 命令NI 修改成了:-10。于是进程的优先级 PRI 就变成了:

80

+

(

10

)

=

70

80 + (-10) = 70

80+(10)=70


既然我能够修改优先级了,我是不是就可以将我自己写的进程的优先级改的很高很高,使得我的进程几乎一直在被调度
事实上,Linux 不想过多的让用户参与进程优先级的调整,在我们手动改进程的优先级时,NI 是有取值范围的:

N

I

 

[

20

,

19

]

NI in space [-20, 19]

NI [20,19]
这就意味着,PRI 也是有范围的:

P

R

I

 

[

60

,

99

]

PRI in space [60, 99]

PRI [60,99]
我们修改 NI 值超过他的范围时就会按照他的上限或者下限取值
注意:当我们第二次修改进程的优先级时,刚才讲到的公式中的 PRI(old) 依旧还是 80!事实上这个公式可以这么写:

P

R

I

(

n

e

w

)

=

80

 

+

 

N

I

PRI(new) = 80 space + space NI

PRI(new)=80 + NI

nicerenice两个命令也可以修改进程的优先级,因为修改进程的优先级本身就不是特别好,这里就不再讲解了!您可以自行百度

系统如何根据进程的优先级展开调度

位图,想必现在你已经十分熟悉了吧!如你需要复习复习,请点击➡️C++实现位图

我们知道,处于 R 状态的进程都待在运行列中!Linux 内核 2.6 版本中的运行队列维护了以下字段(当然内核源码可能这里讲的有差距,但都是差不多一个意思):

strcut run_queue
{
	bitmap isEmpty; //这是一个位图结构bitmap 定义变量
	task_struct** run; //指向运行队列的指针
	task_struct** wait; //指向运行队列的镜像队列的指针
	task_struct* running[140]; //运行队列
	task_stuct* waiting[140]; //运行队列的镜像队列
};

running 数组中每个下标对应的进程队列都执行完了一遍,这就意味着,bitmap 中的 40 个比特位都被置 0 了!我们就能在近乎 O(1)时间内,判断running 数组中是否存在未被执行过的进程。当判断running 数组中没有未被执行过的进程时(isEmpty == 0),我们就交换 run 指针和 wait 指针,此时 CPU 就可以继续执行处于 R 状态的进程了

  • 如果我们不使用位图判断 running 数组中是否有未执行过的进程,那么时间复杂度比较高了!
  • 可以看出 run 指针始终指向那个正真的 running 数组(因为交换会使得 run 指向我们刚才在结构体中定义waiting 数组,但是交换之后,这个 waiting 数组才是正真的 running 数组,你应该能懂我的意思吧!),同理,wait 指针始终指向那个正真的 waiting 数组。

以上讲解的进程调度算法称为linux 内核 2.6 的 O(1) 调度算法

知识点小结

原文地址:https://blog.csdn.net/m0_73096566/article/details/134774825

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_44340.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注