• Linux内核初探 之 进程(三) —— 进程调度算法




    一、基本概念

    1. 抢占
      • Linux提供抢占式多任务,基于时间片和优先级对进程进行强制挂起
      • 非抢占的系统需要进程自己让步(yielding)
    2. 进程类型
      • IO消耗型
        • 经常处于可运行态,等待IO操作过程会阻塞
        • 提高调度频率,缩短运行时间
      • CPU消耗型
        • cpu时间用于计算
        • 降低调度频率,延长运行时间
      • Linux优先保证响应性能,倾向于优化IO消耗型
    3. 进程优先级

      • 内核的优先级

        • 静态优先级:

          static_prio = MAX_RT_PRIO + nice + 20  [100, 139]
          
        • 实时优先级 —— 值越大优先级越高

          rt_prio = 99(High) ~ 0(Low)    
          
        • 动态优先级 —— 值越小优先级越高

          • rt

            prio = MAX_RT_PRIO - 1 - rt_prio    [0, 99]    用于实时进程
            
          • 普通

            prio = static_prio            [100, 139] 用于普通进程
            
        • normal优先级

          normal_prio = MAX_PRIO - 20        [120]    默认进程优先级,nice = 0
          
      • 常量

        MAX_RT_PRIO = 100
        MAX_PRIO = 140
        nice = [-20, 19] 
        
      • 关系图

        (High)    0  1 ...    98  99  100 101    ...         120 ...        138 139  (Low)
         |__|_____________|___|___|___|____________|______________|___|
        
           (High)    99 98 ...     1   0  100 101    ...         120 ...        138 139  (Low)
            |__|_____________|___|   |___|____________|______________|___|    
                rt_prio                 static_prio    
    
                                          -20 -19    ...          0 ...             18  19  
                                      |___|____________|______________|___|    
                                                     nice
    
                                                     120
                                                      |
                                                 normal_prio
    
               RT RT ...         RT  RT  0   1 ...          20 ...        38   39  (Low)
     大专栏  Linux内核初探 之 进程(三) —— 进程调度算法top(PR)    |__|_____________|___|___|___|____________|______________|___|
    
    1. 时间片
      • IO消耗型需要短时间片提高系统响应,CPU需要长时间片减小切换消耗以及提高cache命中
      • Linux默认时间片较短,且不是直接分配到进程,CFS分配处理器使用比,当新任务的使用比小于当前进程的时候,可以抢占当前任务
        • 比如响应界面输入的处理器时间小于执行复杂计算,则前者可以抢占后者,使用户输入迅速得到响应
      • nice值作为权重调整处理器使用比

    二、Linux调度算法

    1. 调度器类schedular class
      • schedular class以模块方式提供调度器,可动态添加,按优先级选取
    2. 完全公平调度CFS
      • Linux默认SCHED_OTHER策略
    3. 按优先级分配时间片的问题
      • 将nice值映射到绝对时间片,nice值差异越大,时间片差异越大。没有按照整个可用时间片的比例分配,导致优先级低的时候,时间片少,进程切换频繁
        • 如nice值-20时间片100ms,20时间片5ms,则即使系统只有两个时间片20的进程,也各只有5ms
        • 往往低优先级(高nice值)需要更长时间片,与策略相反
      • 相对nice值的差异
        • nice值1代表5ms处理器时间
          • 为0和1,时间片为100和95,为19和20,时间片为10和5
        • nice值加减1的效果取决于初始值
      • 系统定时器决定了
        • 时间片必需是定时器节拍的整数倍
        • 两个时间片之间的差异
        • 时间片会随定时器节拍改变
    4. 完全公平调度CFS
      • 基于概念:将处理器时间平均分配给系统中的所有进程,每个进程的运行时间相当,运行时100%占有处理器
      • 允许每个进程运行一段时间,选择运行最少的运行
      • 按处理器使用比,nice值作为权重
      • 小的调度周期交互性更好,但切换代价高,影响系统吞吐,被限制为1ms以避免切换消耗
      • 进程所获得的处理器时间为其它可运行进程nice值的相对差
  • 相关阅读:
    FindWindowEx使用方法
    什么是VSync
    getParameter
    高等数学积分公式大全
    为什么没有好用的Android游戏引擎?
    Best Time to Buy and Sell Stock III
    5.3 适配器模式(4.1)
    在动态网络下实现分布式共享存储
    人类智商一般在多少左右?爱因斯坦的智商是多少?
    海量数据处理面试题集锦
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12284247.html
Copyright © 2020-2023  润新知