进程调度的概念比较简单,我们假设在一个单核处理器的系统中,同一时刻只有一个进程可以拥有处理器资源,那么其他的进程只能在就绪队列中等待,等到处理器空闲之后才有计划获得处理器资源来运行。在这种场景下,操作系统就需要从众多的就绪进程中选择一个最合适的进程来运行,这个就是调度器需要做的事情。linux内核管理过程中是按照线程完成调度工作,与线程所属进程基本上没有什么关系。

1. 调度简介

在计算机开始的初期调度算法非常简单,多道程序按照顺序方式进行执行,管理过程只需要做好基本的输入和输出管理即可。但是,现代社会计算机CPU速度非常快,输入输出已经限制了程序的运行。当前运行的进程基本上划分为I/O请求信和CPU密集型,随着时代的发展,实际计算机越来越偏向于I/O请求型计算机发展,CPU密集型逐渐用外部基本的IC替代其复杂的计算工作。

1.1. 调度情况

通常来说,操作系统是应用程序和可用资源直接的媒体,CPU是一个重要的资源,调度器可以临时分配一个任务在CPU上执行。为了使各个进程间可以公平共享CPU时间,而同时又要考虑不同的任务优先级,所以就需要一个调度器,来保证以下功能有效的分配CPU时间片,根据用户的目标来提供一个很好的用户体验。当面对一些互相冲突的目标的时候,提供一个最优化的调度算法,例如既要为关键实时任务最小响应时间,又要最大限度的提高CPU的总体利用率。知道了进程的分类,那就可以知道哪些场景需要调度来协调,如IO消耗性的,例如磁盘,打印机,网络等场景。调度在不同场景下的目标有。

我们以生活中为例,来看看调度器对我们实际生活的影响,以我们手机上的一个场景为例。如我们手机上运行一个机器学习的程序,大约CPU需要运行30分钟,我们也需要播放音乐。如果没有调度器:

对于手机上运行的学习进程和播放进程,学习进程属于批处理进程,而播放音乐属于实时进程,如果整体播放延时比较大就会出现卡顿的情况,用户体验就会很差。如果没有调度器,对于用户就需要30分钟才能播放音乐,那么它可能等不到30分就会抛弃这个手机。

如果有调度器:调度器让生活更美好

调度器“任性化”将程序切片执行,对于用户就可以边听音乐边等待他的程序运行完,能够完美的实现二者的兼容。

1.2. 调度行为与何时调度

如果站在CPU的角度来看进程,有些进程一直占用处理器,有些进程只需要一部分处理器资源即可。所以进程按照这个特性可以分为两类

  1. CPU消耗型:CPU消耗型的进程会把大部分的时间用在运行代码上,并且会一直占用CPU。一个常见的例子就是while循环的运行,如运行大量计算的程序等。
  2. IO消耗性:IO消耗性的进程会把大部分的时间用在提交I/O请求或等待I/O请求,所以这类的进程通常只需要很少的处理器计算资源即可,如需要键盘的输入进程或等待网路I/O的进程。

存在调度的基本情况类型如下:

  1. 在创建子进程以后,父进程与子进程执行顺序需要调度
  2. 一个进程退出时需要确定调度
  3. 当一个进程阻塞在I/O和信号量上时,需要调度其他进程进入执行
  4. 当I/O中断发生时,必须做出调度决策

1.3. 调度算法分类

不同环境或者领域需要实现目标不同,需要不同的调度算法方向也是不一样的。具体可以划分成三种类型,分别是交互式、批处理、实时。其特征如下:

  1. 交互式进程: 与人机交互的进程,例如鼠标、键盘、触摸屏等相关的应用,这类进程的特点是系统响应时间越短越好,否则用户就会抱怨系统卡顿。一般个人PC和掌上设备属于这种类型。
  2. 批处理进程: 此类进程默默运行,可能会占用比较多的系统资源,对响应时间没有确定的要求。网络处理器和数据流水处理都属于这种类型。
  3. 实时进程: 有些应用对整体时延有严格的要求,如VR设备,从头部转动到画面显示的间隔时间有明确的要求,否则人的体验不是太好;同时例如工业控制系统,不符合时延可能会导致严重的事故。工厂中RTOS系统属于这种类型。

1.4. 调度器目标

针对不同的目标环境,设计调度算法的侧重点也是不一样的。当然,多有系统都会有如下几项的公共特点:

  • 公平 - 给每个进程公平的CPU份额
  • 策略强制执行 - 保证规定的策略被执行
  • 平衡 - 保存系统的所有部分都忙碌
  • 低功耗 - 对于目前的移动设备,如何设计一个更优的调度算法,来保证系统的低功耗也需要重点

对于批量处理系统

  • 吞吐量 - 每小时最大的作业数。最大系统利用率(高吞吐量),对于一些批处理系统中需要考虑
  • 周转时间 - 从提交到中止的最小时间

对于交互式系统

  • 响应时间 - 快速响应请求。此类进程经常与用户进行交互, 因此需要花费很多时间等待键盘和鼠标操作. 当接受了用户的输入后, 进程必须很快被唤醒, 否则用户会感觉系统反应迟钝,主要用于一些交互式系统需要重点考虑
  • 均衡性 - 满足用户的期望

实时系统

  • 满足截至时间 - 避免丢失数据。这些进程由很强的调度需要, 这样的进程绝不会被低优先级的进程阻塞. 并且他们的响应时间要尽可能的短
  • 可预测性 - 在多媒体系统中避免品质降低

确定如何从就绪队列中选择下一个执行的进程进入调度,需要解决以下问题。如何挑选就绪队列中的哪一个进程,通过什么样的调度准则来选择。调度算法的要求,希望得到**“更快”**服务,那么如何定义什么是更快呢?根据调度器的目标,其可以重点关注:

高吞吐量:传输文件时的高带宽
低响应延时:玩游戏时的低延迟
调度器的响应目标考虑:

减小响应时间:及时处理用户的输入请求,尽快将输出反馈给用户
减小平均响应的时间波动:在交互系统中,可预测性比高差异低平均更重要
低延迟调度改善了用户的交互体验:如果移动鼠标时,屏幕中的光标没动,那么客户会如何做呢?会不会重启
处理器调度吞吐 量目标考虑

增加吞吐量:减小开销,主要是上下文切换的开销,系统资源的高利用(CPU /IO设备)
减小等待时间:减小每个进程的等待时间
处理器公平的定义:

2. 交互式系统中的调度

3.1 先来先服务算法(First Come First Served, FCFS)

每次从就绪队列选择最先进入队列的进程,然后一直运行,直到进程退出或被阻塞,才会继续从队列中选择第一个进程接着运行。

依据进程进入就绪队列的先后顺序排列,进程进入等待或者结束状态时,就绪队列中的下一个进程占用CPU,3个进程,计算时间分别为12,3,3,FCFS算法的周转时间,根据任务到达的顺序不同,周转时间不同

结合大家学习中,遇到的实际例子,我们来学习下整个过程,例如该过程中,调度器是我们生活中遇到的学霸,而此时有3个同学想学霸请教问题,其思路如下

该问题对于C同学来说,有一个很大的问题是,我的问题很简单,却需要等那么长的时间,所以对于该算法的特征如下:

优点 缺点
简单  1. 平均等待时间波动较大,短进程可能排到长进程后面
2. IO资源和CPU资源的利用率较低,对于上面的例子,如果该同学需要查阅相关文档,那么学霸就需要一直等待,浪费学霸的资源

3.2 短进程优先算法(SPN)

它会优先选择运行时间最短的进程来运行,这有助于提高系统的吞吐量。

选择就绪队列中执行时间最短进程占用CPU进入运行状态,就绪队列按预期的执行时间来排序

进程的平均周转时间为:

还是基于刚才学霸解决问题的实例来看看这个算法的执行顺序,首先A同学先执行,当执行到2后,同学B和C都来寻求学霸解决问题,但是此时A占用了学霸,所以当A解决完问题后,发现同学C问题简单,所以就优先解决C的问题

优点 缺点
平均周转时间较短 1. 不公平,可能出现导致饥饿,连续的短进程流会使得长进程长时间无法获得CPU资源
2. 平均响应时间过长
3. 需要预知未来,需要解决预估下一个CPU计算的持续时间

2.3 时间片轮转算法(RR, Round-Robin)

定义:每个进程被分配一个时间段,称为时间片(*Quantum*),即允许该进程在该时间段中运行。如果时间片用完,进程还在运行,那么将会把此进程从 CPU 释放出来,并把 CPU 分配另外一个进程;如果该进程在时间片结束前阻塞或结束,则 CPU 立即进行切换;
通过时间片,分配处理器资源的基本单元,当时间片结束后,按FCFS算法切换到下一个就绪进程,我们还是以刚才例子为例,此时为

但是这种算法也需要重点考虑时间片长度,因为切换进程,需要有额外的上下文切换

时间片太长

  • 等待时间过长
  • 极限情况下退化成FCFS

时间片太短

  • 反应迅速,但产生大量的上下文切换
  • 大量上下文切换开销会影响系统的吞吐量

时间片长度选择目标

  • 选择一个合适的时间片长度
  • 经验规律:维持上下文切换开销处于1%以内

3. 调度优先级

对于操作系统中的任务是不同的,例如,系统进程和用户进程、前台进程和后台进程,如果不加以区分,那么系统中关键的任务无法及时处理,后台运算导致视频播放卡顿,所以基于此,重要的任务需要被优先调度,就产生了优先级的概念。

3.4.1 多队列调度算法(MQ)

对于该调度算法,就绪队列被划分成多个独立的子队列,如前台(交互)、后台(批处理),每个队列拥有自己的调度策略,如前台-RR,后台-FCFS,队列间的调度

**固定优先级:**先处理前台,后处理后台,可能导致饥饿
**时间片轮转:**每个队列读的到一个确定的能够调度器进程的总时间,如80%CPU时间用于前台,20%CPU时间用于后台


还是以学霸解决问题为例,基于此的算法为:

所以该算法特征为:

维护多个优先级队列
高优先级的任务优先执行
同优先级内使用Round Robin调度

3.4.2 公平共享调度(FSS, Fair Share Scheduling)

公平共享调度控制用户对系统资源的访问

一些用户组比其他用户组更重要
保证不重要的组无法垄断资源
未使用的资源按比例分配
没有达到资源使用率目标的组获得更高的优先级

4 调度算法总结

算法  优点 缺点
先来先服务算法 简单 不公平,平均等待时间较差
短进程优先算法 平均周转时间最小

1. 不公平,可能导致饥饿

2. 需要精确预测计算时间

时间片轮转算法 公平 平均等待时间较差
公平共享调度 公平是第一要素
多队列调度算法 多种算法的集成 

进程调度基本原理 - 进程管理(十三)相关推荐

  1. 操作系统基本原理---进程管理

    处理机:计算机系统中存储程序和数据,并按照程序规定的步骤执行指令的部件.程序是描述处理机完成某项任务的指令序列.指令则是处理机能直接解释.执行的信息单位.处理机包括中央处理器,主存储器,输入-输出接口 ...

  2. 进程管理(十三)---进程调度基本原理

    1. 为什么需要调度 进程调度的概念比较简单,我们假设在一个单核处理器的系统中,同一时刻只有一个进程可以拥有处理器资源,那么其他的进程只能在就绪队列中等待,等到处理器空闲之后才有计划获得处理器资源来运 ...

  3. Linux进程管理(一)进程数据结构

    Linux进程管理 Linux进程管理(一)进程数据结构 Linux进程管理(二)进程调度 Linux进程管理(三)进程调度之主动调度 Linux进程管理(四)进程调度之抢占式调度 Linux进程管理 ...

  4. Linux进程管理:上帝视角看进程调度

    目录 滴答视角 滴答 时钟中断 进程的调度 切换进程 数据结构视角 操作系统启动流程视角 滴答视角 滴答 计算机中有一个设备,叫定时器,准确说叫可编程定时/计数器. 这个定时器每隔一段时间就会向 CP ...

  5. 面试-操作系统-进程管理-进程-进程调度-死锁

    文章目录 ==概念== 备注 简单说下你对并发和并行的理解? 同步.异步.阻塞.非阻塞的概念? 操作系统概念? 一个程序从开始运行到结束的完整过程,你能说出来多少? 用户态和内核态是如何切换的? 什么 ...

  6. Linux 进程管理之进程调度与切换

    进程调度相关内核结构 我们知道,进程运行需要各种各样的系统资源,如内存.文件.打印机和最 宝贵的 CPU 等,所以说,调度的实质就是资源的分配.系统通过不同的调度算法(Scheduling Algor ...

  7. 操作系统功能模块之进程管理中的进程是什么?进程调度又是什么?

    目录 1.进程学习的知识点思维导图 2.进程的概念 3.进程管理需要做什么 4.PCB进程控制块(Process controler block) 4.1 进程调度 4.1.1 并行 4.1.2 并发 ...

  8. Linux的基本学习(十三)——进程管理(上)

    Linux的基本学习(十三)--进程管理(上) 前言 承接上面的内容,我们来继续学习Linux操作系统 进程(Process) 触发任何一个事件时,系统都会将它定义成为一个进程,并且给予这个进程一个I ...

  9. linux 监控进程调度,linux进程启动调度监控和管理

    linux进程启动调度监控和管理 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 4.90 积分 实验一:Linux进程管理姓名韩师燕学号201109 ...

最新文章

  1. 福布斯:混合现实未来的八大应用场景
  2. 字节跳动取消大小周后首次发薪,员工炸锅:薪资普降 17%
  3. 缺少资源,打印机操作无法继续,打印机子系统不可用
  4. c++ opencv实现区域填充_使用OpenCV实现图像覆盖
  5. 2007年的SEO优化趋势
  6. java虚拟机 山寨机_十年前的山寨机居然有系统?没错,还是纯国产的
  7. 自然语言处理项目之文档主题分类
  8. 我的Linux系统开始学习的过程
  9. 同学,这些事比考证重要的多
  10. 超定方程组的经典Gram-Schmidt正交化解法
  11. Framework类库
  12. 海洋cms播放器html,海洋cms怎么添加播放器
  13. 运动步数已更新,方法教程来了!
  14. 连手机热点宿主机无法连上VMvare linux Centos
  15. DPU网络开发SDK—DPDK(七)
  16. 右上角的引用文献格式_论文要引用的小符号右上角怎么打?
  17. Error in v-on handler: “TypeError: this.$refs.popup.isShow is not a function“
  18. windows installer服务坏了修复方法
  19. 【JAVA编程】根据年龄, 来打印出当前年龄的人是哪个阶段
  20. 租用香港服务器机房机柜,费用由哪些部分组成

热门文章

  1. 各式结构化数据 动态 接入-存储-查询 的处理办法 (第一部分)
  2. html鼠标悬停点击,jQuery实现鼠标点击悬浮特效
  3. 埃文科技推出免费区县级别IP地址定位库 提升IP地址定位行业标准
  4. 推荐几个程序设计竞赛网站
  5. Opencv的视频捕捉功能+多线程
  6. MySQL高级语句简单介绍
  7. servlet Context
  8. 行测-判断推理-图形推理-样式规律-空间重构-六面体
  9. Codeforces 1257C Dominated Subarray 题解
  10. 线程句柄以及createthread()和closehadle()