概述

什么是进程调度

  • 进程调度:在可运行态进程之间分配有限处理器时间资源的内核子系统。

    一、调度策略

    4.1进程类型

  • I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状态,但运行时间短,等待请求过程时处于阻塞状态。如交互式程序。

  • 处理器消耗型进程:时间大都用在执行代码上,除非被抢占否则一直不停的运行。

  • 综合型:既是I/O消耗型又是处理器消耗型。

  • 调度策略要在:进程响应迅速(响应时间短)和最大系统利用率(高吞吐量)之间寻找平衡。

    4.2 调度概念

  • 优先级:基于进程价值和对处理器时间需求进行进程分级的调度。

  • 时间片:表明进程被抢占前所能持续运行的时间,规定一个默认的时间片。时间片过长导致系统交互性的响应不好,

  • 程序并行性效果差;时间片太短增大进程切换带来的处理器耗时。矛盾!

  • 间片耗尽进程运行到期,暂时不可运行状态。直到所有进程时间片都耗尽,重新计算进程时间片。

  • Linux调度程序提高交互式程序优先级,提供较长时间片;实现动态调整优先级和时间片长度机制。

  • 进程抢占:Linux系统是抢占式,始终运行优先级高的进程。

4.3 策略

  • 决定调度程序在何时让进程运行。

    4.3.1 I/O消耗型和处理器消耗型的进程

  • I/O消耗型:大多时间在提交或等待I/O请求。

  • 处理器消耗型:大多时间在执行代码。不属于I/O驱动类型。

4.3.2 进程优先级

  • 相同优先级按照轮转方式进行调度。

  • 调度程序总是选择时间片未用尽且优先级高的进程运行。

4.3.3 时间片

  • nice值作为权重将调整进程所使用的处理器时间使用比。

  • I/O消耗型:不需要长的时间片。

  • 处理器消耗型:需要越长越好的时间片。

4.3.4 调度策略的活动

文字编辑程序显然是 1/0 消耗型的,因为它大部分时间都在等待用户的键盘输入〈无论用户的输入速度有多快,都不可能赶上处理的速度λ 用户总是希望按下键系统就能马上响应。视频编码程序是处理器消耗型的。

4.4 Linux调度算法

4.4.1 调度器类

以模块方式提供的,这样做的目的是允许不同类型的进程可以有针对性地选
择调度算哉。

4.4.2 Unix系统中的进程调度

4.4.3 公平调度

CFS的做怯是允许每个进程运行一段时间、循环轮转、选择运行最少的进程作为下一个运行进程,而不再采用分配给每个进程时间片的做法了,在所有可运行进程总数基础上计算出一个进程应该运行多久。 - -

nice 值在 CFS 中被
作为进程获得的处理器运行比的权重:越高的nice 值(越低的优先级)进程在得更低的处理器
使用权重。

可运行进程数量趋于无穷,每个最少也能获得 lms 的运行时间。

任何进程所获得的处理器时间是由它自己和其他所有可运行进程nice 值的相对差值决定的。

4.5 Linux调度的实现

4.5.1 时间记账

所有的调度器都必须对进程运行时间做记账。CFS 使用调度器实体结构(定义在文件<linux/sched.h>的 struct_sched _entity 中)来追踪进程运行记账。CFS 使用 vruntime 变量来记录一个程序到底运行了多长时间以及它还应该再运行多久。定义在kemeVsched_fair.c 文件中的 update_curr()函数实现了该记账功能。update_ currO 计算了当前进程的执行时间,并且将其存放在变量delta_exec 中,update_ curr()是囱系统定时器周期性调用。

4.5.3 调度器入口

主要入口点是函数schedule(),它定义在文件kemel/sched.c中。

4.5.4 睡眠和唤醒

睡眠:为了等待一些事件。内核的操作都相同 2 进程把自己标记成休眠状态,从可执行红黑树中移出,放入等待队列,然后调用 schedule()选择和执行一个其他进程。唤醒的过程刚好相反进程被设置为可执行状态,然后再从等待队列中移到可执行红黑树中。

4.6.1 用户抢占

  • 用户抢占在以下情况时产生:

  • 从系统调返回用户空间时;
  • 从中断处理程序返回用户空间时;

4.6.2 内核抢占

内核抢占会发生在:

中断处理程序正在执行,且返回内核空间之前
内核代码再一次具有可抢占性
如果内核中的任务显式地调用 schedule()
如果内核中的任务阻塞(这同样也会导敖调用 schedule()

4.7 实时调度策略

两种策略
SCHED_FIFO和 SCHED_RR

SCHED_FIFO 实现了一种简单的、先入先出的调度算怯
SCHED_RR 是带有时闹片的 SCHED_FIFO,一种实时轮流调度算挂.

4.8 与调度相关的系统调用

4.8.1 与调度策略和优先级相关的系统调用

sched_setparam()和sched__getparam()分别用于设置和获取进程的实时优先级

nice()函数会调用内核的 set_ user_ nice()函数,这个函数会设置进程的 task_struct 的 static_prio 和prio 值。

转载于:https://www.cnblogs.com/5320zhq/p/5384757.html

20135320赵瀚青LINUX第四章读书笔记相关推荐

  1. 20135320赵瀚青LINUX第十八章读书笔记

    概述:调试工作艰难是内核级开发区别于用户级开发的一个显著特点 18.1准备开始 内核调试往往是一个令人挠头不已的漫长过程.幸运的是,在这些费劲的问题中也有不少比较简单而且容易消灭的小bug,运气好你可 ...

  2. 20135320赵瀚青LINUX内核分析第一周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.概述 第一周的学习内容主 ...

  3. 期末总结20135320赵瀚青LINUX内核分析与设计期末总结

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 对LINUX内核分析与设计这 ...

  4. 期权、期货及其他衍生产品 第四章读书笔记 利率

    期权.期货及其他衍生产品 第四章读书笔记 利率 利率的种类 我国的利率体系 中央银行利率 金融机构利率 金融市场利率 利率的度量 连续复利利率和与之等价的每年m次复利利率的关联 零息利率 债券定价 债 ...

  5. 《人人都是产品经理》第四章读书笔记及读后感作文2400字

    <人人都是产品经理>第四章读书笔记及读后感作文2400字: 最近一直在忙别的学习,以至于好久没有更新公众号了,也好久没有写读书笔记了.<人人都是产品经理>这本书其实早在一个月前 ...

  6. Android深度探索(卷一)第四章读书笔记

    通过对git使用方法的学习, 第四章就介绍了源代码的下载和编译. 4.1 下载.编译和测试Android源代码 4.1.1 配置Android源代码下载环境:1创建一个用于存放下载脚本文件的目录.2下 ...

  7. 领域驱动第四章-读书笔记

    以后简称作者为巨牛.^_& 第四章讲解的重点就是分离.领域的分离. 说实在的,读之前觉得,自己的设计模式用的也比较熟练了,OOP的设计也做过很多个了,分离什么都是小儿科.读完之后才发现,以前的 ...

  8. 《文明之光》第四章读书笔记

    第四章--科学之路 综述:古希腊在几何学,物理学,天文学上的贡献,最能体现出他们在建立完整科学体系上做出的成就. 第一节--几何学 几何学的起源并非古希腊,而是埃及和美索不达米亚,关于几何学的记载最早 ...

  9. 《Python深度学习》第四章读书笔记

    第四章 机器学习基础 本章重点:处理机器学习问题的通用工作流程: 定义问题与要训练的数据. 收集这些数据,有需要的话用标签来标注数据. 选择衡量问题成功的指标. 你要在验证数据上监控哪些指标? 确定评 ...

最新文章

  1. 机器学习:一种新的编程范式
  2. agv matlab应用,简单介绍一下agv调度控制系统常见的软件应用
  3. 特征工程的宝典-《Feature Engineering for Machine Learning》翻译及代码实现
  4. sql判断null/空缺值
  5. system table CRMC_BO_RANGES
  6. 九大排序算法Java实现
  7. Linux inode 详解
  8. 安卓案例:网格布局实现计算器界面
  9. C语言之预处理探究(三):头文件包含
  10. 上下求索——基于双向推理的多跳知识库问答技术
  11. Servlet JSP - 转发与重定向的区别
  12. HTML右下角音乐播放器,利用HTML5实现网页底部音乐播放器代码
  13. 为什么大学没有前端课程?
  14. 学习笔记14--环境感知传感器技术之毫米波雷达
  15. 计算机网络(第7版)第二章(应用层)知识点整理
  16. tipask访问不到地址,appach和linux的引用头不一样
  17. 【有手就会系列】四步通过文字生成二次元小姐姐图片
  18. Linux 中的TAB键妙用
  19. 数组——sort排序、reverse倒序
  20. 从ST官网获取标准外设库以及官方例程

热门文章

  1. java 图片阴影_Java如何为 PPT 中的图形添加阴影效果
  2. winnet api 实现Get请求
  3. ipc$连接失败的常见原因
  4. 【Python实现数据可视化】创建3D柱状图
  5. 简单易懂的 pwnable.kr 第三题[bof]Writeupt
  6. 基于JAVA服务器监控系统设计,远程数字图像监控系统中web服务器的设计与实现...
  7. 面向 Java 开发人员的 Scala 指南: 深入了解 Scala 并发性
  8. Oracle中如何插入特殊字符: 和 ' (多种解决方案)
  9. Hibernate query by Example
  10. python调用R语言,关联规则可视化