zoukankan      html  css  js  c++  java
  • LINUX进程优先级实现

    进程调度的目标:

    • 高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效。
    • 加强交互性能(interactivity):在系统相当的负载下,也要保证系统的响应时间。
    • 保证公平和避免饥渴。
    • SMP调度:调度程序必须支持多处理系统。系统必须追踪哪些进程在哪个cpu上运行。确保在同一时间中,一个进程不能再多于1个的cpu上运行。
    • 软实时调度(soft real-timescheduling):系统必须有效的调用实时进程。

    进程的nice值:

          nice值是每个进程的一个属性。它不是进程的优先级,而是一个能影响优静态先级的数字,-20~19之间,默认取中间值0。目前的内核不再存储nice值。取而代之的是static_prio(静态优先级)。nice值用户可见,静态优先级则隐藏在内核中,nice值和静态优先级可通过一定的关系进程转换。所以说nice值只是影响了静态优先级。而对于普通进程来说,动态优先级是基于静态优先级算出来的:

    prio(动态优先级)=static_prio(静态优先级)= MAX_RT_PRIO + nice + 20

    例子:ps -el 命令执行结果:NI列显示的每个进程的nice值,PRI是进程的优先级。

    非实时进程优先级:

    1、静态优先级:static priority:之所以称为静态优先级是因为它不会随着时间而改变,内核不会修改它,只能通过系统调用nice去修改(实时进程没有静态优先级,非实时进程有静态优先级)。

    2、动态优先级:其值影响任务的调度顺序在进程描述符中用prio表示,通常所说的优先级指的是动态优先级。在[0,MAX_PRIO-1] 之间取值(MAX_PRIO 定义为 140),其中 [0,MAX_RT_PRIO-1] (MAX_RT_PRIO 定义为100)属于实时进程范围,[MAX_RT_PRIO,MX_PRIO-1]属于非实时进程。数值越大,表示进程优先级越小。

        prio = static_prio        static_prio = MAX_RT_PRIO + 20 + nice(nice的缺省值是0,范围[-20, 19])

    实时进程优先级:

         实时优先级分为SCHED_FIFO,SCHED_RR两类,有软实时硬实时之分,FIFO/RR 都有动态优先级,没有静态优先级内核提供的修改优先级的函数,一般是修改rt_priority的值。rt_priority的取值范围[1,99]。

         prio  = MAX_RT_PRIO – 1 – rt_priority     其中MAX_RT_PRIO = 100

  • 相关阅读:
    使用图形化技术完成电子相册程序的开发
    本周新学的 GUI绘图技术
    不如今日来说 有关StringBufferr类和字符串格式化的内容~
    PHP的身份证号码工具类
    在网页中嵌入带标识的百度地图
    PHP正则表达式使用详解
    Spicy Chicken GDI in C#
    [C++] Running time and Integer to String
    the difference between const int *, int * const, int const *
    [C# WPF]MoeEroViewer Developing Log
  • 原文地址:https://www.cnblogs.com/wangfengju/p/6173108.html
Copyright © 2011-2022 走看看