Linux系统进程优先级——计算方式
在进程世界中,CPU访问协调裁决的过程被称为调度(Scheduling)。
一、进程调度的目标:
a.进程响应时间快
b.加强交互性能
c.保证公平和避免饥饿
d.SMP调度
e.软实时调度
二、进程区分为三类:
a.交互式进程
进程与用户进行交互,比如等待键盘鼠标等操作,接收这些输入后进程必须很快被唤醒,否则用户将发现反应迟钝,平均延迟在50-150ms之间。
b.批处理进程
这些进程不必与用户交互,因此常在后台运行。
c.实时进程
这些进程有很强的调度需要,这样的进程决不会被优先级的进程阻塞。有一个很短的相应时间,且相应的时间变化很小。
三、调度类型:
SCHED_FIFO
先进先出的实时进程。当调度程序把CPU分配给进程的时候,它把该进程描述符保留在运行队列链表的当前位置。如果没有其他可运行的更高优先级实时进程,进程就继续使用CPU,想用多久就用多久,即使还有其余具有相同优先级的实时进程处于可运行状态。
SCHED_RR
时间片轮转实时进程。当调度程序把CPU分配给进程的时候,它把该进程的描述符放在运行链表的末尾。这种策略保证对所有具有相同时间优先级的SCHED_RR实时进程公平地分配CPU时间。
SCHED_NORMAL
普通的分时进程。
四、普通进程的调度:
每个普通进程均具有自己静态优先级,调度程序使静态优先级来评估系统中这个进程与其他普通进程之间调度的程度。内核用从100(最高优先级)到139(最低优先级)的数表示普通进程的静态优先级。值越大静态优先级越低。
4.1 基本时间片:
(140 - 静态优先级) * 20 静态优先级 < 120
基本时间片(ms) = {
(140 – 静态优先级) * 5 静态优先级 >= 120
从上面公式看出静态优先级本质决定进程基本时间片,静态优先级越高(其值越小),基本时间片就越长。
优先级 |
静态优先级 |
Nice值 |
基本时间片 |
交互的δ值 |
睡眠的极限时间 |
最高静态优先级 |
100 |
-20 |
800ms |
-3 |
299ms |
高静态优先级 |
110 |
-10 |
600ms |
-1 |
499ms |
缺省静态优先级 |
120 |
0 |
100ms |
+2 |
799ms |
低静态优先级 |
130 |
+10 |
50ms |
+4 |
999ms |
最低静态优先级 |
139 |
+19 |
5ms |
+6 |
1199ms |
4.2 动态优先级:
其值范围100(最高优先级)到139(最低优先级)的数表示普通进程的静态优先级。值越大静态优先级越低。动态优先级的调度程序在选择新进程来运行时候使用的数,与静态优先级关系如下公式:
动态优先级 = max(100 , min(静态优先级 – bonus + 5 ,139))
bonus是范围0-10的值,值小于5表示降低动态优先级以示惩罚,值大于5表示增加动态优先级以示奖赏。bonus的值依赖于过去进程平均睡眠时间。(注:平均睡眠时间是进程在睡眠状态所消耗的平均纳秒数)
平均睡眠时间 X(ms) |
bonus |
粒度 |
0 ≤ X ≤ 100 |
0 |
5120 |
100 ≤ X ≤ 200 |
1 |
2560 |
200 ≤ X ≤ 300 |
2 |
1280 |
300 ≤ X ≤ 400 |
3 |
640 |
4000 ≤ X ≤ 500 |
4 |
320 |
500 ≤ X ≤ 600 |
5 |
160 |
600 ≤ X ≤ 700 |
6 |
80 |
700 ≤ X ≤ 800 |
7 |
40 |
800 ≤ X ≤ 900 |
8 |
20 |
900 ≤ X ≤ 1000 |
9 |
10 |
1s |
10 |
10 |
平均睡眠时间也被调度程序用来确定一个给定进程是交互进程还是批处理进程,如果满足下面条件则是交互进程:
动态优先级 ≤ 3×静态优先级/4+28
也可以写成:
bonus – 5 ≥ 静态优先级/4 - 28
由上面表达式可以看出,高优先级比低优先级更容易成为交互式进程。
4.3 活动和过期进程:
为避免进程饥饿,当一个进程用完它的时间片时,它还应该被没有用完时间片的低优先级进程取代。
a.活动进程
还没有用完时间片的进程。
b.过期进程
已经用完时间片的可运行进程,被禁止运行,直到所有活动进程都过期。
用完其时间片的活动批处理进程总是变成过期进程。用完其时间片的交互式进程仍然是活动进程:调度程序重填其时间片并把它留在活动进程集合中;但是,如果最老的过期进程已经等待很长时间,或者过期进程比交互进程的静态优先级高,调度程序就把用完时间片的交互式进程移到过期进程集合中;最后,活动进程集合将变为空,过期进程将有机会运行。
五、实时进程调度
每个实时进程都有一个实时优先级,范围从1(最高优先级)- 99(最低优先级)的值。调度程序总是让优先级高的进程运行,禁止低优先级运行。
如果发生以下情况,实时进程将会被另外一个进程取代:
- 进程被另外一个具有更高实时优先级的实时进程抢占。
- 进程执行阻塞操作并进入睡眠(处于TASK_INTERRUPTIBLE或TASK_UNINTERRUPTIBLE状态)
- 进程停止(处于TASK_STOPPED或TASK_TRACED状态)或被杀死(处于EXIT_ZOMBIE或EXIT_DEAD状态)
- 进程调用sched_yield自愿放弃CPU
- 进程是基于时间片轮转的实时进程(SCHED_RR),而且用完它的时间片
注:基于时间片轮转的实时进程的基本时间片长度与实时进程优先级无关,而依赖进程的静态优先级,计算与普通进程调度计算方式一样。
PS:本人也是菜鸟,自己学习了一点就分享出来,若有纰漏欢迎指正!
Linux系统进程优先级——计算方式相关推荐
- linux系统网络优先级,Linux系统进程优先级
一.如何查询crond这个程序的PID及PRI值 [root@localhost ~]# ps -lfC crond F S UID PID PPID C PRI NI ADDR SZ WCHAN S ...
- 你的java程序有没有内存泄露,java进程在linux系统中rss计算方式是什么样的?
java进程在linux系统中rss计算方式如下: RSS = Heap size + MetaSpace + OffHeap size 其中OffHeap由线程堆栈,直接缓冲区,映射文件(库和jar ...
- linux进程管理内存管理,Linux专业知识四:Linux系统进程管理及查看内存
本文主讲Linux专业知识之Linux系统进程管理及查看内存的情况,以Redhat RHEL7操作系统为例. 一.进程 程序与进程:程序是静态的(文件),进程是动态的(运行的程序). 进程和线程:一个 ...
- linux cpu使用率计算
转自linux 进程的cpu计算,linux环境下cpu利用率的计算_美自的博客-CSDN博客,已经收藏但怕丢失所以直接复制过来 目前linux统计cpu利用率时,所用到的信息,大多数是从 /proc ...
- linux shell数字怎么比较大小,Linux Shell 数字计算与比较
直接上脚本, 使用$(())以及$[]进行数字计算 数值比较: n1 -eq n2检查n1是否等于n2 n1 -le n2检查n1是否小于等于n2 n1 -ge n2检查n1是否大于等 ...
- Linux ANSYS Fluent计算集群配置
目录 0 Linux系统及ANSYS版本 1 Linux系统安装及相关配置 1.1 系统安装 1.2 CentOS 配置ntfs挂载 1.3 SSH相关配置 2 ANSYS 安装 3 实际计算操作及相 ...
- Linux系统进程停止的方法
文章目录 Linux系统进程停止的方法 检查进程是否存在 停进程 使用tomcat脚本进行停止 超常规的停止方式 进阶版停止方式 飞哥超神版本 检查进程是否还存在 Linux系统进程停止的方法 情景描 ...
- RK系列主板GPIO计算方式
RK(瑞芯微)系列主板GPIO计算方式 记录一下rk系列gpio num计算方式,测试芯片,3288,3399,3308均正确 查看GOPI 引脚 如图是3308gpio部分定义,已linux系统为例 ...
- python损失函数实现_pytorch 实现cross entropy损失函数计算方式
均方损失函数: 这里 loss, x, y 的维度是一样的,可以是向量或者矩阵,i 是下标. 很多的 loss 函数都有 size_average 和 reduce 两个布尔类型的参数.因为一般损失函 ...
- linux运行dock打包的镜像,Linux部署之Docker方式部署项目
Linux部署之Docker方式部署项目 1. 使用Docker对前端vue项目进行部署 1.1 环境准备 服务器或者虚拟机上先安装好Nginx和相关配置 docker pull nginx 拉去最新 ...
最新文章
- ADAS摄像头20个技术挑战
- 中国人情世故的63个定律 。
- 页目录项和页表项——《x86汇编语言:从实模式到保护模式》读书笔记43
- TCP/IP / TCP 头
- 一、Numpy库与多维数组
- 服务器主机linux安装mysql_linux服务器上安装mysql
- md5 java代码_JAVA简单实现MD5注册登录加密实例代码
- android出现错误,在做一个安卓的一个登陆操作的时候,出现错误
- Lucene.Net+盘古分词-开发自己的搜索引擎
- HDU1214 圆桌会议【数学】
- 零基础学python知乎-零基础应该选择学习 java、php、前端 还是 python?
- My Job Exceptation
- STM32F103ZET6 PWM输出
- 哈佛引用格式(Harvard referencing system)
- 【Nokia5800xm软件资源】
- 金士顿U盘格式化后不能识别,0字节存储空间
- 微信小程序 指纹识别
- PDF文件怎么旋转保存
- MobaXterm官网下载
- 中心极限定理-纯理解无公式