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 之间的关系如下:

  1. static_prio= MAX_RT_PRIO + nice + 20

MAX_RT_PRIO值为100

内核定义了两个宏用来完成这一转换:PRIO_TO_NICE()、NICE_TO_PRIO()。

在kernel/sched.c中:

  1. /*
  2. * Convert user-nice values [ -20 ... 0 ... 19]
  3. * to static priority [ MAX_RT_PRIO..MAX_PRIO-1],
  4. * and back.
  5. */
  6. #defineNICE_TO_PRIO(nice)  (MAX_RT_PRIO + (nice)+ 20)
  7. #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。

  1. prio=MAX_RT_PRIO-1 – rt_priority

时间片:

在 完全公平调度器CFS融入内核之前,时间片是各种调度器的一个重要的概念。它指定了进程在被抢占之前所能运行的时间。调用器的一个重要目标便是有效的分配 时间片,以便提供良好的用户体验。时间片分的过长会导致交互式进程响应不佳。时间片分的过长会导致进程切换带来的消耗。为了解决这个矛盾内核采用了:

1、提高交互进程的优先级,同时分配默认的时间片

2、不需要进程一次性用完时间片,可多次使用。

高的优先级可保证交互进程的频繁调用,长的时间片可保证它们可长时间处于可执行状态

窥探 kernel --- 进程调度的目标,nice值,静态优先级,动态优先级,实时优先级的更多相关文章

  1. jQuery 练习:取出数组字典的值, 静态对话框, clone方法应用

    jQuery 中文API文档 http://jquery.cuishifeng.cn/ jQuery 取出数组字典的值 <head> <meta charset="UTF- ...

  2. 最大矩阵覆盖权值--(静态连续最大子段 (线段树) )-HDU(6638)Snowy Smile

    这题是杭电多校2019第六场的题目 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6638 题意:给你平面上n个点,每个点都有权值(有负权),让你计算一 ...

  3. 注意!GetThreadPriority的返回值不是系统的优先级值

    GetThreadPriority的返回值 Return code/value Description THREAD_PRIORITY_ABOVE_NORMAL 1 Priority 1 point ...

  4. vue项目中,更改数组元素的值,视图没有实时更新?

    问题背景: export default { data(){ showItems: [false, false, false, false] }, methods: { showItem(index) ...

  5. Linux进程调度器概述--Linux进程的管理与调度(十五)

    调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换. 1 背景知识 1.1 什么是调度器 ...

  6. Linux内核学习笔记(5)-- 进程调度概述

    进程调度程序是多任务操作系统的基础,它是确保进程能有效工作的一个内核子系统,负责决定哪个进程投入运行.何时运行以及运行多长时间.只有通过进程调度程序的合理调度,系统资源才能够最大限度地发挥作用,多进程 ...

  7. 《linux内核设计与实现》第四章

    调度程序负责决定哪个进程投入运行,何时运行以及运行多长时间.只有通过调度程序合理调度,系统资源才能最大限度发挥作用,多进程才会有并发执行的效果. 最大限度地利用处理器时间的原则是,只要有可以执行的进程 ...

  8. Linux下进程描述(1)—进程控制块

    进程概念介绍 进程是操作系统对运行程序的一种抽象. • 一个正在执行的程序: • 一个正在计算机上执行的程序实例: • 能分配给处理器并由处理器执行的实体: • 一个具有普以下特征的活动单元:一组指令 ...

  9. Linux进程优先级的处理--Linux进程的管理与调度(二十二)

    1. linux优先级的表示 1.1 优先级的内核表示 linux优先级概述 在用户空间通过nice命令设置进程的静态优先级, 这在内部会调用nice系统调用, 进程的nice值在-20~+19之间. ...

随机推荐

  1. 算法(Algorithm)是什么?

    我们用煎蛋来打个比方.煎蛋的一般步骤是: 1.>取煎锅. 2.>取油. ->我们有油吗? ****有,把油倒入煎锅. ****没有,我们要去买油吗? #########要买,出去买油 ...

  2. 关闭ubuntu apport

    apport就是ubuntu上的"crash report"服务,就是当有程序崩溃时弹出的那个发送error report的程序: 个人觉得此功能无用,本着给我的老本子节省资源的思 ...

  3. struct2-json

    一.JSON是什么? :JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解 析和生成.它基于JavaScript(Stan ...

  4. [转]Traceroute网络排障实用指南(1)

    注:本文是同事的大作,虽是翻译的一篇英文PPT,但内容实在精彩,小小的Traceroute竟包含如此大的信息量,真是让人感慨!内容不涉及公司机密,所以一直想转到自己的Blog上来,自己需要时可以再翻阅 ...

  5. Sublime Text 2 介紹

    代码编辑器或者文本编辑器,对于程序猿来说,就像剑与战士一样,谁都想拥有一把能够随心驾驭且瑞丽无比的宝剑,而每一位程序猿,相同会去追求最适合自己的强大.灵活的编辑器,相信你和我一样,都不会例外. 我用过 ...

  6. LR实战之Discuz开源论坛——网页细分图结果分析(Web Page Diagnostics)

    续LR实战之Discuz开源论坛项目,之前一直是创建虚拟用户脚本(Virtual User Generator)和场景(Controller),现在,终于到了LoadRunner性能测试结果分析(An ...

  7. Java - 反射机制(Reflection)

    Java - 反射机制(Reflection)     > Reflection 是被视为 动态语言的关键,反射机制允许程序在执行期借助于 Reflection API 取得任何类的       ...

  8. JQ点击高亮显示

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. (原创) C# List 找 Max 的 Index

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. servlet 之 返回json数据并显示

    //实体类import java.util.ArrayList; public class ObjectType { private String type; private ArrayList< ...