一、基本概念

  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值的相对差

Linux内核初探 之 进程(三) —— 进程调度算法的更多相关文章

  1. 《Linux内核分析》 第八节 进程的切换和一般的执行过程

    张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 第八 ...

  2. Linux内核设计第六周 ——进程的描述和创建

    Linux内核设计第六周 ——进程的描述和创建 第一部分 知识点总结 一.进程描述符task_struct数据结构 1.操作系统的三大功能: 进程管理.内存管理.文件系统 2.进程的作用: 将信号.进 ...

  3. Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介

    原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理 ...

  4. Linux内核分析第八周——进程的切换和系统的一般执行过程

    Linux内核分析第八周--进程的切换和系统的一般执行过程 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/cou ...

  5. Linux内核设计第八周 ——进程的切换和系统的一般执行过程

    Linux内核设计第八周 ——进程的切换和系统的一般执行过程 第一部分 知识点总结 第二部分 实验部分 1.配置实验环境,确保menu内核可以正常启动 2.进入gdb调试,在shedule和conte ...

  6. 《Linux内核分析》第三周学习报告

    <Linux内核分析>第三周学习报告                                    ——构造一个简单的Linux系统MenuOS 姓名:王玮怡  学号:201351 ...

  7. 《Linux内核分析》第三周学习笔记

    <Linux内核分析>第三周学习笔记 构造一个简单的Linux系统MenuOS 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.stud ...

  8. Linux内核中影响tcp三次握手的一些协议配置

    在Linux的发行版本中,都存在一个/proc/目录,有的也称它为Proc文件系统.在 /proc 虚拟文件系统中存在一些可调节的内核参数.这个文件系统中的每个文件都表示一个或多个参数,它们可以通过 ...

  9. 【读书笔记】《Linux内核设计与实现》进程管理与进程调度

    大学跟老师做嵌入式项目,写过I2C的设备驱动,但对Linux内核的了解也仅限于此.Android系统许多导致root的漏洞都是内核中的,研究起来很有趣,但看相关的分析文章总感觉隔着一层窗户纸,不能完全 ...

随机推荐

  1. Kali 安装 Google 中文输入法

    前言 安装了 Linux 并设置中文后,为了操作起来更便捷准备安装一个中文输入法 之前安装搜狗输入法,由于搜狗输入法基于 qt4,估计短期是 GG 了 所以这次选择了 Google 输入法 以下是安装 ...

  2. 金蝶cloud成本核算流程

  3. Opencv笔记(九)——图像阈值

    学习目标: 学习简单阈值,自适应阈值,Otsu's 二值化等 学习函数cv2.threshold,cv2.adaptiveThreshold 等. 一.简单阈值 与名字一样,这种方法非常简单.但像素值 ...

  4. [CTS2019]无处安放(提交答案)

    由于蒟蒻太菜没报上CTS,只能在家打VP. 感觉这题挺有意思的,5h中有3h在玩这题,获得74分的“好”成绩. 说说我的做法吧: subtask1~3:手玩,不知道为什么sub2我只能玩9分,但9和1 ...

  5. 22)PHP,数组排序函数

    详情见:   手册:函数参考-->变量和类型相关扩展-->数组--->对数组进行排序

  6. The Chosen One+高精度

    题目描述 Welcome to the 2017 ACM-ICPC Asia Nanning Regional Contest. Here is a breaking news. Now you ha ...

  7. 推荐几款开源的js日期控件

    做为一个正规的网站,经常需要一些日期或时间的筛选,所以我们今天就推荐二十多款javascript的js日期/时间筛选插件.个个经典,绝对有你需要的. My97DatePicker ,国人开发的一款js ...

  8. python的可迭代对象

    今日所得 迭代器 可迭代对象 迭代器对象 for循环内部原理 生成器 生成器表达式 内会函数 面对过程编程 迭代器 迭代就是指更新换代的过程,要重复进行,而且每次的迭代都必须基于上一次的结果. 我们使 ...

  9. svn使用2(转)

    首先打开VisualSVN Server Manager,如图: 可以在窗口的右边看到版本库的一些信息,比如状态,日志,用户认证,版本库等.要建立版本库,需要右键单击左边窗口的Repositores, ...

  10. 每个月执行一次任务,保存90天的mongo日志数据

    用mongo 的dump 和 restore实现 shell版 #!/bin/bash mongodump --host -d lewifi -c auditOrigData -q {}} -o ~/ ...