调度算法

在了解调度算法之前我们先了解一下调度算法的评价指标从这几个方面入手:CPU利用率、系统吞吐量、周转时间、等待时间、响应时间


CPU利用率:指CPU“忙碌”的时间占总时间的比例

由于早期的CPU造价极其昂贵,因此人们会希望让CPU尽可能多地工作


系统吞吐量:单位时间内完成作业的数量
对于计算机希望尽可能少的时间处理完尽可能多的作业


周转时间:是指从作业被提交给系统开始,到作业完成为止的这段时间间隔
对于计算机用户来说,他很关心自己的作业从提交到完成花了多少时间
他包括四个部分:作业在外存后备队伍中等待被调用的时间、进程在就绪队伍上等待进程调度的时间、进程在CPU上执行的时间、进程等待I/O操作完成的时间。后三项在一个作业的整个处理过程中可能多次发生



带权周转时间必然>=1
带权周转时间与周转时间都是越小越好

对于周转时间相同的两个作业,实际运行时间长的作业在相同的时间内被服务的时间更多,带权周期时间更小,用户满意度更高
对于实际运行时间相同的两个作业,周转时间短的带权周转时间更小,用户满意度更高


等待时间:指进程/作业处于等待处理机状态之和,等待时间越长,用户满意度低
计算机用户希望自己的作业尽可能少的等待处理机
对于进程来说,等待时间就是指进程建立后等待被服务的时间之和,在等待I/O完成的期间其实进程也是被服务的,所以不计入等待时间
对于作业来说,不仅要考虑建立进程后的等待时间、还要加上作业在外存队列中的等待时间。
一个作业总共需要被CPU服务多久,被I/O设备服务多久一般是确定不变的,因此调度算法其实只会影响作业/进程的等待时间。当然,与前面指标类似,也有“平均等待时间”来评价整体性能


响应时间:指从用户提交请求首次产生响应所用的时间
对于计算机用户来说,会希望自己的提交请求尽早开始被系统服务、回应

适用于早期的批处理系统的调度算法


先来先服务(FCSF)

饥饿:某进程/作业长期得不到服务


短作业优先

非抢占式的短进程优先调度算法(SFP)

抢占式的短进程优先调度算法(SRTN)


注意几个小细节:
1、如果题目中未特别说明,所提到的“短作业/进程优先算法”默认非抢占式
2、很多书上都会说“SJF调度算法的平均等待时间、平均周转时间最少”
严格的说,这个表述是错误的,不严谨的,之前的例子表明抢占式的短进程优先算法(SRNT)得到的平均等待时间、平均周转时间更少:
应该加上一个条件“在所有进程同时可运行时”,采用SJF调度的平均等待时间、平均周转时间最少
或者说:“在所有进程都几乎同时到达时”,采用SJF调度算法的平均等待时间、平均周转时间最少
如果不加上上述前提条件,则应该说“抢占式的短作业/进程优先调度算法(最短剩余时间优先,SRNT算法)”的平均等待时间、平均周转时间最少
3、虽然严格意义上来说,SJF算法的等待时间、周转时间不一定是最少的,但相对于其他算法(如:FCFS),SJF依然可以获得较少的平均等待时间、平均周转时间
4、如果选择题中遇到“SJF 算法的平均等待时间、平均周转时间最少”的选项,那最好判断其他选项
是不是有很明显的错误,如果没有更合适的选项,那也应该选择该选项


高响应比优先算法
FCFS算法是每次调度的时候选择一个等待时间比较长的作业(进程)为其服务,但是没有考虑到作业的运行时间,因此导致对短作业不友好的问题
SJF算法是选择一个执行时间最短的作业为其进行服务,但是又完全不考虑各个作业的等待时间,因此导致对长作业不友好的问题,甚至还会导致饥饿问题
因此就提出了高响应比优先算法,即考虑到了各个作业的等待时间,也能兼顾运行时间


对于前面三种调度方法的对比

:这几种算法主要关心对用户的公平性、平均周转时间、平均等待时间这几个评价系统整体性能的这几个指标,但是不关心“响应时间”,也并不区分任务的紧急程度,因此对于用户来说,交互性很糟糕。因此这三种算法一般适用于早期的批处理系统,当然,FCFS算法也常结合其他算法使用,在现在也扮演着很重要的角色。
以上三个算法交互性很糟糕,那我们接下来介绍一下,适用于交互系统的调度算法


时间片轮转(RR)

时间片大小为2时



时间片为5时

当时间片为5时,在这种情况下就和先来先服务调度算法执行的结果相同了,所以如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法退化为先来先服务调度算法,并且会增大进程响应时间。因此时间片不能太大。另一方面,进程调度、切换是有时间代价的(保存、恢复运行环境),因此如果时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。可见时间片也不能太小


优先级调度算法

非抢占式的优先级调度算法

抢占式优先级调度算法

补充:
就绪队列未必只有一个,可以按照不同优先级来组织。另外也可以把优先级高的进程放在更靠近队头的位置
根据优先级是否可以动态改变,可将优先级分为静态优先级动态优先级
静态优先级:创建进程时确定,之后一直不变
动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级

1、如何合理地设置各类进程的优先级?
答:通常,系统进程优先级高于用户进程
前台程序进程优先级高于后台进程
操作系统更偏好I/O型进程(或称I/O繁忙型进程)
注:与I/O型进程相对的是计算机进程(或称CPU繁忙型进程)

2、如果采用是动态优先级,什么时候应该调整?
答:可以从追求公平、提高资源利用率等角度考虑
如果某进程在就绪队列中等待了很长时间,则可以适当的提高其优先率
如果某进程占用处理机时间很长,则可以适当降低其优先率
如果发现一个进程频繁地进行I/O操作,则可适当提升其优先级


多级反馈调度队列算法
FCFS算法的优点是公平,SJF算法的优点是尽快处理完短作业,平均等待/周转时间等参数都很优秀,时间片轮转调度算法可以让各个进程得到及时的响应,优先级调度算法可以灵活地调整各个进程被服务的机会为了将这些算法折中权衡,得到一个综合表现优秀平衡的算法,多级反馈队列调度算法诞生了

对于前面三种调度方法的对比

注:比起早期的批处理操作系统来说,由于计算机造假大幅度降低,因此之后出现的交互性操作系统(包括分时操作系统、实时操作系统)更注重系统的响应时间、公平性、平衡性等指标。而这几种算法恰好也能较好的满足交互系统的需求,因此这三种算法适用于交互式系统。(比如UNIX使用的就是多级反馈队列调度算法)

《操作系统》-调度算法相关推荐

  1. 操作系统hpf算法事例_操作系统调度算法是什么

    操作系统调度算法是什么 导读:小编根据大家的需要整理了一份关于<操作系统调度算法是什么>的内容,具体内容:学习操作系统的朋友们肯定遇到过调度算法,目的是控制资源使用者的数量,选取资源使用者 ...

  2. linux嵌入式系统算法,嵌入式Linux操作系统调度算法研究

    嵌入式Linux操作系统调度算法研究 嵌入式操作系统在互联网时代的今天得到广泛应用.Linux系统本身并不是严格的实时操作系统.为了提高它对实时任务的处理能力,国内外对Linux进行了不断的实时性能的 ...

  3. 经典的操作系统调度算法-多级反馈队列(MLFQ)

    这里介绍一种著名的调度算法,多级反馈队列(multi-level feedback queue,MLFQ),这种调度策略不但应用在Solaris和FreeBSD和Linux Schedule_RR P ...

  4. 常见操作系统调度算法研究(2)

    轮转策略 轮转策略(Round-Robin)简称为RR,在RR里面,每个准备就绪的任务只能在有限的时间内运行,也就是说不管这个任务完成与否,都会切换任务到下一个. 由于它要频繁的切换队列,我们可以把准 ...

  5. 多级队列调度算法可视化界面_C++实现操作系统调度算法(FSFS,SJF,RR,多级反馈队列算法)...

    #include #include #include #include using namespace std; unsigned int q_id=0; //用于队列进程号的全局变量 unsigne ...

  6. 操作系统调度算法--高响应比优先调度算法解析

    高响应比优先调度算法(Highest Response Radio Next,HRRN)是一种对CPU中央控制器响应比的分配的算法.HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之 ...

  7. 操作系统——调度算法

    目录 调度算法的评价指标 1.cpu利用率 2.系统吞吐量​ 3.周转时间​ 4.等待时间 5.响应时间​ 总结 调度算法(批处理系统) 1.先来先服务(FCFS) 示例 2.短作业优先(SJF) 非 ...

  8. 计算机核心基础、计算机硬件组成原理、计算机硬件组成详解、硬盘接口及操作系统、计算机网络简述、OSI七层协议、子网划分、 VLAN简述

    一.编程语言 1.什么是编程语言? 人与人沟通使用人类的语言 人与计算机沟通使用编程语言 2.什么是编程? 把想要让计算机做事的步骤想清楚 用一种计算机能听懂的语言(编程语言)把做事的步骤翻译下来 3 ...

  9. 操作系统课程设计进程调度模拟

    程序下载链接:https://download.csdn.net/download/m0_56241309/86945709 进程调度模拟 摘要:进程调度是操作系统中必不可少的一种调度,在3中OS中都 ...

  10. 1 - 操作系统发展史及其基础知识

    操作系统发展史及其基础知识 参考内容:https://www.cnblogs.com/linhaifeng/p/6295875.html:百度百科:写在此处的目的是巩固老师所讲知识,课后为了方便复习 ...

最新文章

  1. W3C XSL Transformations (XSLT) Version 2.0 翻译计划
  2. ML之Validation:机器学习中模型验证方法的简介、代码实现、案例应用之详细攻略
  3. 2019-10-12 线性最小方差估计和正交定理
  4. 为什么let在php中报错,PHPlet在Windows下的安装
  5. 前端框架除了layui还有哪些
  6. linux系统外接硬盘_linux通过fstab自动挂载外接磁盘
  7. 鸿蒙系统适配机型_小米手机系统软件部总监公布小米各机型安卓P适配计划
  8. 神奇的幻方2015提高组d1t1
  9. java架构师进阶之独孤九剑:数据结构以及书籍推荐
  10. django 1.8 官方文档翻译:13-1-3 密码管理
  11. frameset 的问题与解决
  12. UVA 12300 Smallest Regular Polygon(正多边形)
  13. Ubuntu18.04 安装 Mysql 5.7 问题
  14. 树的最长路径详解(C++)
  15. 基于RV1126平台imx291分析 --- 写在开始
  16. 学习笔记(01):ThreeJS视频教程-了解着色器基础
  17. 软件测试——bug相关知识
  18. springmvc 银联商家向用户转账
  19. 计算机一级考试网络题的图标,全国计算机等级考试一级模拟试题四
  20. 【转载】MiniUtilityFramework(九):CText和TEXT

热门文章

  1. 新研究发现Masimo ORi™(氧储备指数)可用于早期检出单肺通气期间的血氧降低
  2. 计算机英语第3版课后单词,PC电脑相关词汇三
  3. OpenCV 实时对象跟踪(质心跟踪)
  4. 分布式系统(微服务架构)的一致性和幂等性和相关概念解析
  5. 常见测试工具总结:LR、Selenium
  6. HTML5印章绘制电子签章图片,中文英文椭圆章、中文英文椭圆印章 电子签章图片采集
  7. 二级建造师报考条件不符,选择代报名靠谱吗?
  8. Qt - 换肤功能实现
  9. 深度学习辅助决策医疗器械软件审评要点(征求意见稿)
  10. Linux的pcie模拟网卡,Intel英特尔PCIe万兆网卡虚拟功能驱动4.11.1版For Linux(2021年3月5日发布)...