s5-2 Cpu调度算法
调度程序采用什么算法选择一个进程(作业)?
如何评价调度算法的性能?
调度准则
CPU利用率 – 使CPU尽可能的忙碌
吞吐量 – 单位时间内运行完的进程数
周转时间 – 进程从提交到运行结束的全部时间
等待时间 – 进程在就绪队列中等待调度的时间片总和
响应时间 – 从进程提出请求到首次被响应的时间段[在分时系统环境下不是输出完结果的时间]
调度算法影响的是等待时间,而不能影响进程真正使用 CPU 的时间和 I/O 时间
调度算法
• 先来先服务(FCFS)
• 短作业优先(SJF)
• 优先权调度(Priority Scheduling)
• 时间片轮转(Round Robin)
• 多级队列调度(Multilevel Queue)
• 多级反馈队列调度算法(Multilevel Feedback Queue)
5-2 先来先服务(FCFS)
First-Come, First-Served (FCFS) Scheduling
最简单的调度算法
可用于作业或进程调度
算法的原则是按照作业到达后备作业队列(或进程进入就绪队列)的先后次序来选择作业(或进程)
FCFS 算法属于非抢占方式: : 一旦一个进程占有处理机 , 它就一直运行下去,直到该进程完成或者因等待某事件而不能继续运行时才释放处理机 。
FCFS 算法易于实现,表面上很公平,实际上有利于长作业,不利于短作业;有利于 CPU 繁忙型,不利于 I/O 繁忙型
Convoy effect 护航效应
假设有一个CPU进程和许多I/O型进程
当CPU进程占用CPU运行时, I/O型进程可能完成了其I/O操作,回到就绪队列等待CPU, I/O设备空闲
CPU进程释放CPU后, I/O型进程陆续使用CPU,并很快转为
I/O操作,CPU空闲
5-3 短作业优先(SJF)
(关联到每个进程下次运行的 CPU 脉冲长度,调度最短的进程)
两种情况:
非抢占式调度 – – 一旦进程拥有 CPU , 它的使用权限只能在该 CPU 脉冲结束后让出
抢占式调度 – – 发生在有比当前进程剩余时间片更短的进程到达时,也称为最短剩余时间优先调度
SJF 是最优的 – – 对一组指定的进程而言 , 它给出了最短的平均等待时间
采用SJF有利于系统减少平均周转时间,提高系统吞吐量。
一般情况下SJF调度算法比FCFS调度算法的效率要高一些, 但实现相对要困难些。
如果作业的到来顺序及运行时间不合适,会出现饥饿现象,例如,系统中有一个运行时间很长的作业JN,和几个运行时间小的作业,然后,不断地有运行时间小于JN的作业的到来,这样,作业JN就因得不到调度而饿死。
另外,作业运行的估计时间也有问题。
5-4 优先级和RR 时间片轮转
优先权调度(Priority Scheduling)
每个进程都有自己的优先数[整数]
CPU分配给最高优先级的进程[假定最小的整数最高的优先级]
SJF是以下一次CPU脉冲长度为优先数的优先级调度
1. 静态优先权在进程创建时确定,且在整个生命期中保持不变
2. 静态优先权的问题 Problem=Starvation – low priority processes may never execute
(问题饥饿 – 低优先级的可能永远得不到运行).
一个很有意思的例子:当MIT的IBM7094机器于1973年关掉时,人们发现一个于1967年提交的一个低优先权的进程还没有得到运行。
Solution=Aging – as time progresses increase the priority of the process
(解决方法=老化 – 视进程等待时间的延长提高其优先数)
动态优先权是指进程的优先权可以随进程的推进而改变,以便获得更好的调度性能
改变优先权的因素
- 进程的等待时间
- 已使用的时间处理机
- 资源使用情况
时间片轮转(Round Robin)
每个进程将得到小单位的 CPU 时间[时间片], 通常为 10 - 100 毫秒 。时间片用完后 , 该进程将被抢占并插入就绪队列末尾
一般来说,RR的平均周转时间比SJF长,但响应时间要短一些
1. q large –> FCFS
2. q small –> q q must be large with respect o to context switch, otherwise
overhead s is too high (q 相对于切换上下文的时间而言足够长,否则将导致系统开销过大 ).
一组进程的平均周转时间并不一定随着时间片的增大而降低。一般来说,如果大多数(80%)进程能在一个时间片内完成,就会改善平均周转时间
5-5 多级队列、多级反馈队列
多级队列调度(Multilevel Queue)
多级队列
按进程的属性来分类,如进程的类型、优先权、占用内存的多少,每类进程组成一个就绪队列,每个进程固定地处于某一个队列,如
Ready queue is partitioned into separate queues(就绪队列分为):
foreground (interactive)(前台)[交互式]
background (batch) (后台) [批处理]
Each queue has its own scheduling algorithm(每个队列有自己的调度算法)
foreground – RR
background – FCFS
Scheduling must be done between the queues(调度须在队列间进行).
固定优先级调度,即前台运行完后再运行后台。有可能产生饥饿
给定时间片调度,即每个队列得到一定的 CPU 时间,进程在给定时间内执行;如,80% 的时间执行前台的 RR 调度,20% 的时间执行后台的 FCFS 调度
多级反馈队列调度算法(Multilevel Feedback Queue)
存在多个就绪队列,具有不同的优先级,各自按时间片轮转法调度
各个就绪队列中时间片的大小各不相同,优先级越高的队列时间片越小。
允许进程在队列之间移动
当一个进程执行完一个完整的时间片后被抢占处理器,被抢占的进程优先级降低一级而进入下级就绪队列,如此继续,直至降到进程的基本优先级。而一个进程从阻塞态变为就绪态时要提高优先级
最后会将I/O型和交互式进程留在较高优先级队列
进程能在不同的队列间移动;可实现老化
多级反馈队列调度程序由以下参数定义):
number of queues ( 队列数 )
scheduling algorithms for each queue ( 每一队列的调度算法 )
method used o to determine when o to upgrade a a process ( 决定进程升级的方法 )
method used o to determine when o to demote a a process ( 决定进程降级的方法 )
method used o to determine which queue a a process will enter when that process needs service ( 决
定需要服务的进程将进入哪个队列的方法
s5-2 Cpu调度算法的更多相关文章
- 进程状态转换、CPU调度算法
进程的状态转换 进程在运行中不断地改变其运行状态.通常,一个运行进程必须具有以下三种基本状态. 进程状态 执行态run:进程正在使用CPU 等待态wait:进程正在等待I/O完成,不在使用也不能使用C ...
- 操作系统概念学习笔记三 cpu调度算法
一 基本概念 1 队列中的记录通常是进程的进程控制块. 2 CPU调度决策可在如下四种环境下发生 a 当一个进程从运行状态切换到等待状态 例如,I/O请求或调用wait以等待一个子进程的终止 b 党一 ...
- CPU调度算法
批处理系统中的调度算法: *需要考虑的因素: 1. 吞吐量 2. cpu利用率 3. 周转时间 4. 公平性* 1.先来先服务: FCFS: 优点:实现简单 缺点:可能造成周转时间长 2.最短作业优先 ...
- 【转】CPU调度
转自:http://blog.csdn.net/xiazdong/article/details/6280345 CPU调度 用于多道程序 以下先讨论对于单CPU的调度问题. 回顾多道程序,同时把 ...
- 操作系统概念学习笔记 10 CPU调度
操作系统概念学习笔记 10 CPU调度 多道程序操作系统的基础.通过在进程之间切换CPU.操作系统能够提高计算机的吞吐率. 对于单处理器系统.每次仅仅同意一个进程执行:不论什么其它进程必须等待,直到C ...
- 操作系统中的几种调度算法(JAVA版)
import java.text.DecimalFormat; import java.util.Arrays; import java.util.Scanner; /* * 作者:Chensx102 ...
- s5-1 CPU调度
基本概念 通过多道程序设计得到 CPU 的最高利用率 (CPU-- I/O 脉冲周期 - - 进程的执行包括进程在 CPU 上执行和等待 I/O ) 进程的执行以 CPU 脉冲开始,其后跟着 I/O ...
- Linux性能优化之CPU优化(一)
前言 何为性能优化?个人认为,性能优化是为了提高应用程序或系统能力为目的.那么如何才能实现对应用程序的性能调优呢?这里很设计到很多的内容,包括Linux内核.CPU架构以及Linux内核对资源的分配以 ...
- 线程池线程数与(CPU密集型任务和I/O密集型任务)的关系
近期看了一些JVM和并发编程的专栏,结合自身理解,来做一个关于(线程池线程数与(CPU密集型任务和I/O密集型任务)的关系)的总结: 1.任务类型举例: 1.1: CPU密集型: 例如,一般我们系统的 ...
随机推荐
- Delphi: TMemo垂直滚动条自动显示
项目中碰到此问题,之前一直没留意,研究一番用上,以做备忘.参考其它解决方法,不尽完美,自试之,达到效果. 直上代码: type TMemo = class(StdCtrls.TMemo) protec ...
- layui禁用侧边导航栏点击事件
layui是一款优秀的前端模块化css框架,作者是贤心 —— 国内的一位前端大佬. 我用layui做过两个完整的项目,对她的感觉就是,这货非常适合做后台管理界面,且基于jquery,很容易上手.当然, ...
- 好文:javascript中的四种循环
https://juejin.im/entry/5a1654e951882554b8373622?utm_medium=hao.caibaojian.com&utm_source=hao.ca ...
- SpringBoot使用@Value从yml文件取值为空--注入静态变量
SpringBoot使用@Value从yml文件取值为空--注入静态变量 1.application.yml中配置内容如下: pcacmgr: publicCertFilePath: ...
- Union and Intersection of two sorted lists 并集和交集
跟面试官确认是arrayList还是singly-linked list /* Union 并集:两个升序的list a, b, 返回其并集(升序排序)*/ public class UnionTw ...
- ubuntu系统ssh遇到port 22:No route to host问题
ssh遇到这个port 22:No route to host这个问题 检查防火墙状态 (iptables -L) 检查ssh状态 (ps -elf |grep ssh) 检查网络状态(换根网线)
- AngularJS——第7章 依赖注入
第7章 依赖注入 AngularJS采用模块化的方式组织代码,将一些通用逻辑封装成一个对象或函数,实现最大程度的复用,这导致了使用者和被使用者之间存在依赖关系. 所谓依赖注入是指在运行时自动查找依赖关 ...
- Windows下adobe Reader中pdf字体helvetica被替换为ArialMT
笔者最近java项目中用itext-2.1.7导出pdf,使用了Helvetica,这个字体是内置的字体,本地Adobe Reader版本9.0 导出的文字是img.nur.cn实际效果 查看了pdf ...
- php伪静态与重定向
什么是伪静态 伪静态是相对于真静态来讲的,伪静态只是改变了URL格式,实际还是动态页面,有真静态一样的SEO,真静态访问一个静态页面,服务器(apache,nginx)直接读取磁盘静态文件,伪静态是动 ...
- C# iframe session 丢失
在页面A中使用iframe引用另一站点页面B,但页面B上面的session总是丢失,百度了一下,不用改程序,直接在iis里面操作,解决方法如下 1.打开IIS管理器 inetmgr 2.选择被嵌入if ...