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. 开源欣赏wordpress之文章新增页面如何实现。

    本地网址http://localhost/wordpress/wp-admin/post-new.php 进而找到post-new.php页面. 进入之后, require_once( dirname ...

  2. [置顶] Jquery发展

    jQuery在2006年1月由美国人JohnResig在纽约的barcamp发布,吸引了来自世界各地的众多JavaScript高手加入,由DaveMethvin率领团队进行开发.是继prototype ...

  3. struts2复习(五)拦截器总结

    1. 拦截器(Interceptor): 拦截器是Struts2的核心,Struts2的众多功能都是通过拦截器来实现的. 2. 拦截器的配置 1)编写实现Interceptor 接口的类.  2)在s ...

  4. vmware tools 安装

    转到虚拟机 > 安装 VMware Tools(或 VM > 安装 VMware Tools).注意:如果您运行的是轻量版的 Fusion.不带 VMware Tools 的 Workst ...

  5. 初次使用Oracle

    这是我第一次写博客,主要是记录下自己这半个多月以来的学习笔记,以备以后可以随时查看. 首先就是安装Oracle的问题的,我系统是Win7 64位的,出现各种问题郁闷得不行,最终安装个Oracle102 ...

  6. JQ 操作样式,背景切换

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

  7. Sql Server相关的性能计数器

    OS Memory and Paging 性能计数器: 1.Memory\Availability Mbytes   未使用的物理内存(非页面文件),通常情况下它应该大于100MB 2.Memory\ ...

  8. GoEasy实现web实时推送过程中的自动补发功能

    熟悉GoEasy推送的朋友都知道GoEasy推送实现web实时推送并且能够非常准确稳定地将信息推送到客户端.在后台功能中查看接收信息详情时,可有谁注意到有时候在发送记录里有一个红色的R标志?R又代表的 ...

  9. thinkphp+redis实现秒杀功能

    好久没来整理文章了,闲了没事写篇文章记录下php+redis实现商城秒杀功能. 1,安装redis,根据自己的php版本安装对应的redis扩展(此步骤简单的描述一下) 1.1,安装 php_igbi ...

  10. C#的一个异常

    1.catch捕获得到的异常如图 2.解决办法(找到app.config文件,修改图中的值将原来的8192扩大了10倍)