zoukankan      html  css  js  c++  java
  • 进程调度

    优先级

    int prio, static_prio, normal_prio;
    unsigned int rt_priority;
    
    字段 描述
    static_prio 用于保存静态优先级,可以通过nice系统调用来进行修改
    rt_priority 用于保存实时优先级
    normal_prio 它的值取决于静态优先级和调度策略
    prio 用于保存动态优先级

    实时优先级范围是0到MAX_RT_PRIO-1(即99),而普通进程的静态优先级范围是从MAX_RT_PRIO到MAX_PRIO-1(即100到139)。值越大静态优先级越低。

    /*  http://lxr.free-electrons.com/source/include/linux/sched/prio.h#L21  */
    #define MAX_USER_RT_PRIO    100
    #define MAX_RT_PRIO     MAX_USER_RT_PRIO
    
    /* http://lxr.free-electrons.com/source/include/linux/sched/prio.h#L24  */
    #define MAX_PRIO        (MAX_RT_PRIO + 40)
    #define DEFAULT_PRIO        (MAX_RT_PRIO + 20)
    

    调度策略相关字段

    /*  http://lxr.free-electrons.com/source/include/linux/sched.h?v=4.5#L1426  */
    unsigned int policy;
    
    /*  http://lxr.free-electrons.com/source/include/linux/sched.h?v=4.5#L1409  */
    
    const struct sched_class *sched_class;
    struct sched_entity se;
    struct sched_rt_entity rt;
    
    
    cpumask_t cpus_allowed;
    
    字段 描述
    policy 调度策略
    sched_class 调度类
    se 普通进程的调用实体,每个进程都有其中之一的实体
    rt 实时进程的调用实体,每个进程都有其中之一的实体
    cpus_allowed 用于控制进程可以在哪里处理器上运行

    调度策略

    policy表示进程的调度策略,目前主要有以下五种:

    /*
    * Scheduling policies
    */
    #define SCHED_NORMAL            0
    #define SCHED_FIFO              1
    #define SCHED_RR                2
    #define SCHED_BATCH             3
    /* SCHED_ISO: reserved but not implemented yet */
    #define SCHED_IDLE              5
    #define SCHED_DEADLINE          6
    
    字段 描述 所在调度器类
    SCHED_NORMAL (也叫SCHED_OTHER)用于普通进程,通过CFS调度器实现。SCHED_BATCH用于非交互的处理器消耗型进程。SCHED_IDLE是在系统负载很低时使用 CFS
    SCHED_BATCH SCHED_NORMAL普通进程策略的分化版本。采用分时策略,根据动态优先级(可用nice()API设置),分配 CPU 运算资源。注意:这类进程比上述两类实时进程优先级低,换言之,在有实时进程存在时,实时进程优先调度。但针对吞吐量优化
    SCHED_IDLE 优先级最低,在系统空闲时才跑这类进程(如利用闲散计算机资源跑地外文明搜索,蛋白质结构分析等任务,是此调度策略的适用者) CFS
    SCHED_FIFO 先入先出调度算法(实时调度策略),相同优先级的任务先到先服务,高优先级的任务可以抢占低优先级的任务 RT
    SCHED_RR 轮流调度算法(实时调度策略),后 者提供 Roound-Robin 语义,采用时间片,相同优先级的任务当用完时间片会被放到队列尾部,以保证公平性,同样,高优先级的任务可以抢占低优先级的任务。不同要求的实时任务可以根据需要用sched_setscheduler()API 设置策略 RT
    SCHED_DEADLINE 新支持的实时进程调度策略,针对突发型计算,且对延迟和完成时间高度敏感的任务适用。基于Earliest Deadline First (EDF) 调度算法

    调度类

    sched_class结构体表示调度类,目前内核中有实现以下四种:

    extern const struct sched_class stop_sched_class;
    extern const struct sched_class dl_sched_class;
    extern const struct sched_class rt_sched_class;
    extern const struct sched_class fair_sched_class;
    extern const struct sched_class idle_sched_class;
    
    调度器类 描述
    idle_sched_class 每个cup的第一个pid=0线程:swapper,是一个静态线程。调度类属于:idel_sched_class,所以在ps里面是看不到的。一般运行在开机过程和cpu异常的时候做dump
    stop_sched_class 优先级最高的线程,会中断所有其他线程,且不会被其他任务打断。作用:1.发生在cpu_stop_cpu_callback 进行cpu之间任务migration;2.HOTPLUG_CPU的情况下关闭任务。
    rt_sched_class RT,作用:实时线程
    fair_sched_class CFS(公平),作用:一般常规线程

    目前系統中,Scheduling Class的优先级顺序为StopTask > RealTime > Fair > IdleTask

    开发者可以根据己的设计需求,來把所属的Task配置到不同的Scheduling Class中.

  • 相关阅读:
    杭州西郊千湖岛-天下第一秀水
    windows phone7 豆瓣FM
    wp7 中 HubTile控件自定义大小。
    wp7 HubTile
    Windows Phone 7之XNA游戏:重力感应
    WP7:模拟开始屏幕Tile漂动效果
    windows 8 项目
    手把手教你 用 wpf 制作metro ProgressRing (Windows8 等待动画)
    windows8 开发教程 教你制作 多点触控Helper可将任意容器内任意对象进行多点缩放
    仿windows8 开始菜单 实现HubTileBase 以及仿鲜果联播实现 PulsingTile(脉冲磁贴)
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/9568894.html
Copyright © 2011-2022 走看看