【Linux】:进程的优先级

前言:

初步了解进程之间的链接和访问

关于Linux中task_struct实例化的对象是怎么链接的,每个节点之间是如何访问以及节点内部的成员如何访问?我们做一个基本的了解。

tast_struct可以看作一个数据结构,其内部有包含许多种数据结构,那么它是如何包含许多数据结构的呢?每个节点之间是如何链接的呢?

比如双链表的结构,每个节点并不直接存储链表的前后指针,而是将前后指针封装成一个成员变量,通过访问成员变量访问前后节点,同理,对于多叉树结构,每个节点并不直接存储子树的指针,而是将子树的指针封装成一个节点成员。

比如上面的节点t_s1和t_s2,它们之间的链式结构是通过成员变量link实现的,各自的link分别存储两个指针(前后节点的成员link的指针)。

求结构体偏移量

结构体成员的地址减去结构体的地址就等于该成员的偏移量,如果结构体的地址为0,则该成员的地址就恰好等于它在结构体中的偏移量了。

访问节点内的成员:现在我们假设t_s1的link变量已知,我们对其取地址(&t_s1.link),然后计算出该地址的偏移量offsset = (tast_struct*)0->link。然后我们可以得出t_s1的地址为(tast_struct*)( (char*)(&t_s1.link) - (char*)offsset )。根据t_s1的地址,我们就可以对t_s1的成员进行访问了。

访问其他节点:假设t_s1link变量已知,我们可以通过link的成员变量next和prev访问 t_s1的前后两个节点的成员变量link,基于此,我们可以访问在链表上任意节点的成员变量link,于是可以得到任意节点的地址,便可访问任意节点的其他成员变量。

进程的优先级

是什么?

cpu资源分配的先后顺序,就是指进程的优先权(priority)。

 优先级和权限的区别:

优先级是指进程对同一个资源的访问,谁先谁后。

权限是指能不能。

为什么要有?

因为系统的资源相比于进程的数量是很有限的,进程之间需要竞争访问资源,为了保持进程之间的竞争是合理的、有序的,所以要给进程设置优先级。

如果不给进程设置优先级,进程对资源的访问是混乱的,会造成有的进程一直访问不了对应的资源,从而在用户层面造成软件长时间卡顿。

怎么实现的?

在用户操作层面:通过PRI和NI

我们在终端输入指令ps -l,

UID : 代表执行者的身份

PID : 代表这个进程的代号

PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号

PRI :代表这个进程可被执行的优先级,其值越小优先级越高,越早被执行

NI :代表这个进程的nice值 

PRI是不能被修改的,但可以通过修改NI的值修改进程的优先级。 

PRI and NI 

PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice 

nice其取值范围是-20至19,PRI(old)一直都是系统默认的优先值且不变。

需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化,可以理解nice值是进程的修正数据

底层实现原理 

Linux Kernel调度器的过去,现在和未来-电子头条-EEWORLD电子工程世界

O(1)调度器:Linux2.6版本的核心算法_linux o(1)调度-CSDN博客 

修改进程的优先级 

1.nice命令

nice命令可以用来启动一个进程,并设置其优先级。在命令行中输入”nice -n priority command”,其中priority为一个整数值,范围为-20到19,数值越小表示优先级越高。

示例:
nice -n 10 ./myprogram

上述命令将启动一个名为”myprogram”的程序,并设置其优先级为10。

2.renice命令

renice命令可以修改已经运行的进程的优先级。在命令行中输入”renice -n priority PID”,其中priority为新的优先级值,PID为进程的ID。

示例:
renice -n 5 1234

上述命令将进程ID为1234的进程的优先级修改为5。

3.top命令

 注意:普通用户无法修改进程的优先级。

为什么我们重置的优先值输入是100,最后却是99呢?操作系统为了不让程序员乱改优先值,限制了nice值的范围,最大值为19,最小值为-20,超过范围按极限值算。

我们再继续修改myproc的优先值,

发现最后修改的PRI值不是从99-6=93,也不是从74+7=81,而都是以80为最初的PRI值,进行修改。

linux修改进程优先级命令 • Worktile社区

  • 27
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值