进程的优先级

基本概念

在这里插入图片描述

优先级是什么?

优先级 vs 权限
权限决定的是能还是不能, 而优先级决定是谁先谁后(你已经能了)

为什么要设置优先级?

因为资源是有限的,进程是多个的, 所以就注定了, 进程之间是要相互竞争这个资源的, 进程之间是竞争关系 --竞争性

操作系统必须保证大家进行良性竞争, 所以就为大家确认优先级;

由于进程优先级设计不合理, 计算机调度不合理等等原因, 导致进程长时间得不到CPU资源,该进程的代码长时间无法得到推进 --该进程的饥饿问题

Linux中是怎么做到设置优先级的?

补充知识 Linux中pcb的数据结构

在这里插入图片描述

查看系统进程

ps -l查看系统进程

在这里插入图片描述
直接使用ps -l只能查看当前终端中运行的程序 我们加上-a就可以查看所有的进程

我们重点关注的是 PRINI

其中 PRI就是优先级(priority)
NI是进程优先级的修正数据(nice)值;
我们在修改优先级是不是该PRI 而是改 NI

在这里插入图片描述

PRI 与 NI

PRI即进程的优先级, 次值越小, 优先级越高

NI 即nice值 其表示进程的优先级的修正值

加入NI值后其PRI值就会变成PRI(old) + NI

所以,调整进程的优先级,在Linux下就是调整进程的nice

nice其取值范围是-29 ~ 19 一共40个级别

PRI vs NI

需要强调的是, 进程的nice值不是进程的优先级, 他们不是一个概念,但是进程的nice值会影响到进程的优先级变化。

可以理解为nice值是进程优先级的修正数据

在这里插入图片描述

top指令更改优先级

nice 和 renice指令也可以更改进程的优先级, 这里不做介绍, 需要的可以自己在网上搜索

首先我们进入top界面, 然后键盘输入r

在这里插入图片描述
此时就需要输入我们进程的pid

在这里插入图片描述
输入pid后我们就可以更改nice值了

在这里插入图片描述
但是如果我们是普通用户的话就无法进行更改(没有权限)

所以我们切换到root用户
在这里插入图片描述
就修改成功了

需要注意的是, Linux中调整优先级都是从80开始调的, 即第一次我们调成60 第二次再调 +19 是 PRI实际上是 99;

也就是说, 每次我们调整的其实都是NI值, 最终的 PRI 其实是等于 80 + NI

操作系统是如何根据优先级展开的调度呢?

在这里插入图片描述
Linux通过hash的方式维护40个链表, 不同优先级的进程链接在不同的链表上, 从低到高调度, 就实现了按优先级调度,

有时会发生这么一件事, 我们正在调度该表上的进程, 然而又有新的进程来了, 这时候怎么办, 所以Linux又维护了两个指针, 一个指向正在运行的, 另一个指向没在运行的, 这样只要是调度就去正在运行的地方, 只要是新进程要添加, 就去等待的队列中添加, 当某一个地方的进程被调度完了, 就交换一下两指针地址即可;

如果就这样的话,那么在判断某个地方是否为空时,必须得完全遍历一遍,才行, 这样太费时间了, 所以Linux又维护了一个位图我们在判断一个地方是否为空时只需要判断位图的值是否为0即可, 而某个位置不为0 只需要找到最低位的1即可(lowbit x & (-x)); 这样就实现了O(1)的判断是否为空

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值