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

  • 相关阅读:
    SpringBoot2.0之一 新建项目helloWorld
    spring boot 的maven设置阿里云仓库
    新建SpringBoot项目运行页面报错Whitelabel Error Page This application has no explicit mapping for /error, so yo
    SpringBoot2.0 最简单的 idea 快速创建项目
    postgresql 按日期范围查询
    postgreSQL 应用case when的例子
    PostgreSQL 数据库NULL值的默认排序行为与查询、索引定义规范
    ASP.NET中在不同的子域中共享Session
    YKCW6-BPFPF-BT8C9-7DCTH-QXGWCYQ7PR-QTHDM-HCBCV-9GKGG-TB2TM
    Asp.net中基于Forms验证的角色验证授权
  • 原文地址:https://www.cnblogs.com/wangfengju/p/6173108.html
Copyright © 2011-2022 走看看