2.2.5 调度算法(二)

在上一节中我们讲了三种调度算法,分别是先来先服务算法,短作业优先算法,高相应比优先算法,今天我们再来学习三种算法,分别是时间片轮转算法,优先级调度算法,多级反馈队列算法。

目录

2.2.5 调度算法(二)

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

2.2.5.2 优先级调度算法

2.2.5.3 多级反馈调度算法

2.2.5.4 三种调度算法比较


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

  时间片轮转算法:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如 100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。我们需要注意的是时间片轮转算法应用的对象是进程,因为只有进程才会被分配时间片而作业并不会。时间片轮转算法是一种抢占式的算法,由时钟装置发出中断信号来通知CPU时间已到。

有一组进程,如下图所示,请用时间片轮转算法给出进程的执行顺序,时间片分别设为2以及5 。

时间片为2时,进程到达情况如下:

0时刻:只有P1这一个进程所以P1上处理机运行。

2时刻:P2到达,被存放在就绪队列的队头,刚好P1时间片完于是P1插入到队尾,P2上处理机运行。

4时刻:P3到达,P2时间片用完被插入到P3之后,但此时队头中为P1,于是将P1上处理机运行。

5时刻:P4到达,但是此时P1时间片还没完于是将P4插入到队尾

6时刻:P1的时间片完,下处理机并插入到队尾,处于队头的P3进行调度。

7时刻:虽然P3的时间片还没完但P3已经结束了运行,所以队头的P2发生调度

  9时刻:进程P2时间片用完,并刚好运行完,发生调度,P4上处理机
 
  11时刻:P4时间片用完,重新回到就绪队列。P1上处理机
  12时刻:P1运行完,主动放弃处理机,此时就绪队列中只剩P4,P4上处理机
  14时刻:就绪队列为空,因此让P4接着运行一个时间片。
  16时刻:所有进程运行结束
 
上述过程的运行示意图如下:
  
至于时间片大小为5时,情况与时间片大小为2类似,请大家自己分析,这里只贴出结果:
这是大家可能会发现,时间片为5的轮转算法与先来先服务算法的调度情况是一致的,所以如果时间片划分过大那么时间片轮转算法就会退化为先来先服务算法;另一方面,如果时间片划分过小就会导致进程切换频繁,系统开销过大。

2.2.5.2 优先级调度算法

优先级调度算法:每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程。优先级调度算法既有抢占式又有非抢占式,总之一切都是根据优先级高低来决定的。

在如图所示的进程中,我们规定优先数越大,优先级越高,分别用抢占式以及非抢占式给出调度顺序:

  非抢占式:(括号中是处于就绪队列中的进程)

0时刻(P1):只有P1到达,P1上处理机。

  7时刻(P2、P3、P4):P1运行完成主动放弃处理机,其余进程都已到达,P3优先级最高,P3上处理机。
  8时刻( P2、P4 ):P3完成,P2、P4优先级相同,由于P2先到达,因此P2优先上处理机
  12时刻( P4):P2完成,就绪队列只剩P4,P4上处理机。
  16时刻( ):P4完成,所有进程都结束

调度结果如下图所示:

抢占式:

0时刻(P1):只有P1到达,P1上处理机。

2时刻(P2):P2到达就绪队列,优先级比P1更高,发生抢占。P1回到就绪队列,P2上处理机。

4时刻(P1、P3):P3到达,优先级比P2更高,P2回到就绪队列,P3抢占处理机。
5时刻(P1、P2、P4):P3完成,主动释放处理机,同时,P4也到达,由于P2比P4更先进入就绪队列,因此选择P2上处理机
7时刻(P1、P4):P2完成,就绪队列只剩P1、P4,P4上处理机。
11时刻(P1 ):P4完成,P1上处理机
16时刻():P1完成,所有进程均完成。
调度结果如下图所示:
当然,优先级可以不是固定的,操作系统可以灵活的调整优先级让等待时间长的进程优先得到服务。

2.2.5.3 多级反馈调度算法

多级反馈调度算法实际上是对以上各种算法的折中考虑,算法规则如下:

  • 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
  • 新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若用完时间片进程还未结束,则进程进入下一级队列队尾。如果此时已经是在最下级的队列,则重新放回该队列队尾
  • 只有第 k 级队列为空时,才会为 k+1 级队头的进程分配时间片

多级反馈调度算法只适用于进程调度,且也有抢占式和非抢占式两种:抢占式的算法。在 k 级队列的进程运行过程中,若更上级的队列(1~k-1级)中进入了一个新进程,则由于新进程处于优先级更高的队列中,因此新进程会抢占处理机,原来运行的进程放回 k 级队列队尾。

对于以下进程,我们采用抢占式的多级反馈进程调度算法来进行进程调度:(这个过程实在是太难弄了.....我想弄成GIF但失败了)

调度的顺序为P1(1) —> P2(1) —> P1(2)—> P2(1)—> P3(1)—> P2(2)—> P1(4) —> P1(1)(括号中为运行的时间片长度)。

2.2.5.4 三种调度算法比较

算法 抢占? 优点 缺点 饥饿? 补充
时间片轮转
抢占
公平,适用于分时系统
频繁切换有开销,不区分优先级
不会 时间片大小设计的影响
优先级调度
非抢占与抢占均可
区分优先级,适用于实时系统
可能导致饥饿
动态优先级设置
多级反馈队列
抢占 都是优点    

操作系统(十七)调度算法(二)相关推荐

  1. 计算机操作系统——处理机调度算法

    计算机操作系统--处理机调度算法 一.处理机调度的层次和调度算法的目标 1.处理及调度的层次 高级调度:(周期较长,大约几分钟一次) 又称为长程调度或作业调度 调度对象:作业 功能:根据算法决定将外存 ...

  2. 如何让你的操作系统更安全二

    如何让你的操作系统更安全二 360+NOD32 将流氓病毒一扫光 360安全卫士的简介: 360是一款专门用于对付流氓软件的克星,目前成为装机必备的工具.([url]http://www.360.cn ...

  3. 操作系统--时间片轮转调度算法(RR算法)

    操作系统–时间片轮转调度算法(RR算法) 实验内容: 模拟实现时间片轮转调度算法,具体如下: 设置进程体:进程名,进程的到达时间,服务时间,,进程状态(W--等待,R--运行,F--完成),进程间的链 ...

  4. 天津理工大学《操作系统》实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解

    天津理工大学<操作系统>实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解 实验内容 1. 本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不 ...

  5. 操作系统原理实验二(三)

    继续完成操作系统原理的实验 4.5(实验目的:熟悉Window线程创建过程)在windows环境下,利用高级语言编程环境(限定为VS环境或VC环境)调用CreateThread函数实现"并发 ...

  6. ROS机器人操作系统学习(二)

    ROS机器人操作系统学习(二) ROS概念 通信机制+开发工具+应用功能+生态系统 提高机器人研发中的软件复用率 通信机制 松耦合分布式通信 开发工具 应用功能 生态系统 节点与节点管理器 话题与服务 ...

  7. 操作系统权限提升(二十三)之Linux提权-通配符(ws)提权

    系列文章 操作系统权限提升(十八)之Linux提权-内核提权 操作系统权限提升(十九)之Linux提权-SUID提权 操作系统权限提升(二十)之Linux提权-计划任务提权 操作系统权限提升(二十一) ...

  8. 操作系统作业调度算法c语言,操作系统课程设计报告电梯调度算法c语言实现.doc...

    操作系统课程设计报告电梯调度算法c语言实现 操作系统课程设计报告电梯调度算法c语言实现 :调度 算法 电梯 课程设计 操作系统 操作系统课程设计报告 模拟操作系统课程设计 写一个简单的操作系统 篇一: ...

  9. 用一个创业故事串起操作系统原理(二)

    来自:刘超的通俗云计算 上一节说到小马同学的公司已经创立了,还请来了周瑜和张昭作为帮手,所谓"兄弟齐心,其利断金".可是,现在这家公司,还得从接第一个外部项目开始. 第四回:首个项 ...

  10. 【操作系统】实验二 作业调度模拟程序

    实验二作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调 ...

最新文章

  1. ios单应用模式_如何为iOS 13暗模式设置应用
  2. 48本3D视觉领域学习书籍,请自取
  3. hibernate和jdbc的优缺点,概述
  4. 应用程序错误电脑黑屏_电脑黑屏了怎么办,电脑硬件win黑屏的6大原因以及解决方法...
  5. Nagios Apache报Internal Server Error错误的解决方法
  6. iOS微博项目(一)
  7. Unix操作系统目录存放内容
  8. 计算机科学技术专业解析,专业解读—计算机科学与技术
  9. EJB3.0零碎要点---在部署web本地客户端的时候org.apache.jasper.JasperException: java.lang.ClassCastException: $Proxy
  10. Nginx Unit 1.8.0 发布,动态 Web 应用服务器
  11. 10g手动创建数据库
  12. 牛客网编程练习之编程马拉松:发工资
  13. js原生attachEvent与addEventListener的用法
  14. 联想Thinkpad E430 原装win8改版win7的BIOS设置
  15. Python量化分析,计算KDJ
  16. “自贸云”+“自贸大数据”将加速辽宁自贸区建设与创新
  17. Leaflet地图 -- 绘制台风风圈
  18. appbase 和docbase
  19. 基于纠错编码的数字水印matlab,method robustness是什么意思
  20. 链塔智库|区块链产业要闻及动态周报(2020年10月第2周)

热门文章

  1. c#中获取服务器IP,客户端IP以及Request.ServerVariables详细说明
  2. 【转载】SVD在推荐系统中的应用
  3. 如何设置使eclipse修改代码不重启tomcat
  4. Python数据格式:%s字符串,%d整型,%f浮点型
  5. mysql安装可能遇到的错误和安装过程
  6. LVS NAT/DR
  7. Delphi的StringReplace[转]
  8. 全球酒店详情查看API接口-基于极核数据
  9. Socket支持多用户并发访问的解决办法
  10. 游戏开发模式一:组件模式(Component)