窥探 kernel --- 进程调度的目标,nice值,静态优先级,动态优先级,实时优先级
http://blog.chinaunix.net/uid-24227137-id-3595610.html
窥探 kernel --- 进程调度的目标,nice值,静态优先级,动态优先级,实时优先级
本系列文章由张同浩编写,转载请注明出处:http://blog.csdn.net/muge0913/article/details/7562133
邮箱:muge0913@sina.com
进程调度的目标:
1、高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效。
2、加强交互性能(interactivity):在系统相当的负载下,也要保证系统的响应时间。
3、保证公平和避免饥渴。
4、SMP调度:调度程序必须支持多处理系统。系统必须追踪哪些进程在哪个cpu上运行。确保在同一时间中,一个进程不能再多于1个的cpu上运行。
5、软实时调度(soft real-timescheduling):系统必须有效的调用实时进程。
linusTorvalds 在CFS融入2.6.23时说:“我认为任何时候调度器都不是完美的 ,正确的并不是非此即彼,选择是一种平衡。在我更换调度器之前我100%确定未来我还会更换它。调度器没有想象的那么重要,它只是内核的一部分。”
进程的nice值:
nice值是每个进程的一个属性。它不是进程的优先级,而是一个能影响优先级的数字。
NI列显示的每个进程的nice值,PRI是进程的优先级。
nice是-20~~19之间的整数,默认取中间值0。
目 前的内核不再存储nice值。取而代之的是static_prio(静态优先级)。nice值用户可见,静态优先级则隐藏在内核中,nice值和静态优先 级可通过一定的关系进程转换。所以说nice值只是影响了静态优先级。而对于普通进程来说,动态优先级是基于静态优先级算出来的。
优先级:
普通进程有:静态优先级和动态优先级。而实时进程又增加了实时优先级。
注:进程的优先级只是一个整数,它是调度程序选择进程运行的基础。
1、静态优先级:static priority:之所以称为静态优先级是因为它不会随着时间而改变,内核不会修改它,只能通过系统调用nice去修改。静态优先级用进程描述符中的static_prio表示。它与nice的关系如图:

nice与 static_prio 之间的关系如下:
- static_prio= MAX_RT_PRIO + nice + 20
MAX_RT_PRIO值为100
内核定义了两个宏用来完成这一转换:PRIO_TO_NICE()、NICE_TO_PRIO()。
在kernel/sched.c中:
- /*
- * Convert user-nice values [ -20 ... 0 ... 19]
- * to static priority [ MAX_RT_PRIO..MAX_PRIO-1],
- * and back.
- */
- #defineNICE_TO_PRIO(nice) (MAX_RT_PRIO + (nice)+ 20)
- #definePRIO_TO_NICE(prio) ((prio) - MAX_RT_PRIO- 20)
2、 动态优先级:调度程序通过增加或减少进程静态优先级的值来奖励IO小号型进程或惩罚cpu消耗型进程。调整后的优先级称为动态优先级。在进程描述符中用 prio表示,通常所说的优先级指的是动态优先级。在 0~MAX_PRIO-1 之间取值(MAX_PRIO 定义为 140),其中 0~MAX_RT_PRIO-1 (MAX_RT_PRIO 定义为100)属于实时进程范围,MAX_RT_PRIO~MX_PRIO-1属于非实时进程。数值越大,表示进程优先级越小。
普通进程的优先级通过一个关于静态优先级和进程交互性函数关系计算得到。随实际任务的实际运行情况得到。实时优先级和它的实时优先级成线性,不随进程的运行而改变。
3、实时优先级:
实时优先级只对实时进程有意义。在进程描述符rt_priority中。取值0~MAX_RT_PRIO-1。
- prio=MAX_RT_PRIO-1 – rt_priority
时间片:
在 完全公平调度器CFS融入内核之前,时间片是各种调度器的一个重要的概念。它指定了进程在被抢占之前所能运行的时间。调用器的一个重要目标便是有效的分配 时间片,以便提供良好的用户体验。时间片分的过长会导致交互式进程响应不佳。时间片分的过长会导致进程切换带来的消耗。为了解决这个矛盾内核采用了:
1、提高交互进程的优先级,同时分配默认的时间片
2、不需要进程一次性用完时间片,可多次使用。
高的优先级可保证交互进程的频繁调用,长的时间片可保证它们可长时间处于可执行状态
窥探 kernel --- 进程调度的目标,nice值,静态优先级,动态优先级,实时优先级的更多相关文章
- jQuery 练习:取出数组字典的值, 静态对话框, clone方法应用
jQuery 中文API文档 http://jquery.cuishifeng.cn/ jQuery 取出数组字典的值 <head> <meta charset="UTF- ...
- 最大矩阵覆盖权值--(静态连续最大子段 (线段树) )-HDU(6638)Snowy Smile
这题是杭电多校2019第六场的题目 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6638 题意:给你平面上n个点,每个点都有权值(有负权),让你计算一 ...
- 注意!GetThreadPriority的返回值不是系统的优先级值
GetThreadPriority的返回值 Return code/value Description THREAD_PRIORITY_ABOVE_NORMAL 1 Priority 1 point ...
- vue项目中,更改数组元素的值,视图没有实时更新?
问题背景: export default { data(){ showItems: [false, false, false, false] }, methods: { showItem(index) ...
- Linux进程调度器概述--Linux进程的管理与调度(十五)
调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换. 1 背景知识 1.1 什么是调度器 ...
- Linux内核学习笔记(5)-- 进程调度概述
进程调度程序是多任务操作系统的基础,它是确保进程能有效工作的一个内核子系统,负责决定哪个进程投入运行.何时运行以及运行多长时间.只有通过进程调度程序的合理调度,系统资源才能够最大限度地发挥作用,多进程 ...
- 《linux内核设计与实现》第四章
调度程序负责决定哪个进程投入运行,何时运行以及运行多长时间.只有通过调度程序合理调度,系统资源才能最大限度发挥作用,多进程才会有并发执行的效果. 最大限度地利用处理器时间的原则是,只要有可以执行的进程 ...
- Linux下进程描述(1)—进程控制块
进程概念介绍 进程是操作系统对运行程序的一种抽象. • 一个正在执行的程序: • 一个正在计算机上执行的程序实例: • 能分配给处理器并由处理器执行的实体: • 一个具有普以下特征的活动单元:一组指令 ...
- Linux进程优先级的处理--Linux进程的管理与调度(二十二)
1. linux优先级的表示 1.1 优先级的内核表示 linux优先级概述 在用户空间通过nice命令设置进程的静态优先级, 这在内部会调用nice系统调用, 进程的nice值在-20~+19之间. ...
随机推荐
- html中隐藏域hidden的作用
基本语法: <input type="hidden" name="field_name" value="value"> 作用: ...
- jar 查找多jar包中类的办法
jar -tf 多个文件列表, 如jar -tf *.jar 或 jar -tf a.jar b.jar ,这样是无任何输出的. 解决办法为: find . -name "*.j ...
- PCI、PCIE配置空间的訪问(MCFG,Bus,Device,Funtion)
一般来说,在x86平台上,有两大类方式能够訪问这一区间的寄存器, 1,配置机制1#或者配置机制2# 訪问时借助in/out指令.请注意,这样的方式有别于一般的in/out指令訪问PCI的IO空 ...
- python中使用mahotas包实现高斯模糊
高斯模糊 import mahotas as mh import numpy as np from matplotlib import pyplot as plt image=mh.imread('i ...
- 【C语言】输入一组整数,求出这组数字子序列和中最大值
//输入一组整数.求出这组数字子序列和中最大值 #include <stdio.h> int MAxSum(int arr[],int len) { int maxsum = 0; int ...
- Android自定义带标题边框的Layout
今天工作中又碰到个小问题,项目需要用到像Java Swing的JPanel一样带标题边框的布局,Android里没有类似控件,想到这个也不难,自己画了一个,是继承LinearLayout的一个自定义布 ...
- Swift继承的用法
一个类可以继承另一个类的方法,属性和其它特性.当一个类继承其它类,继承类叫子类,被继承类叫超类(或父类).在Swift中,继承是区分「类」与其它类型的一个基本特征. 在Swift中,类可以调用和访问超 ...
- Android应用程序组件Content Provider的共享数据更新通知机制分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6985171 在Android系统中,应用程序组 ...
- wpf中,一个简单的自定义treeview
首先创建一个自定义控件,在里面定义好treeview的样式,将本来的三角形的图标变为加号的图标,并且添加节点之间的连线. <UserControl x:Class="TreeViewE ...
- c++中各种数据类型所占字节
求各种数据类型所占用的字节数可调用sizeof函数,求各种数据类型的最大值可以调用limits标准库中的numeric_limits<T>::max(),numeric_limits< ...