操作零碎典型调剂算法

在操作零碎中存在多种调剂算法,个中有的调剂算法实用于功课调剂,有的调剂算法实用于过程调剂,有的调剂算法两者都实用。下面引见几种常用的调剂算法。

先来先效劳(FCFS)调剂算法

FCFS调剂算法是一种最复杂的调剂算法,该调剂算法既可以用于功课调剂也可以用于过程调剂。在功课调剂中,算法每次从后备功课队列当选择最先辈入该队列的一个或几个功课,将它们调入内存,分派需要的资本,创立过程并放入停当队列。
在过程调剂中,FCFS调剂算法每次从停当队列当选择最先辈入该队列的过程,将处置机分派给它,使之投入运转,直到完成或因某种缘由而壅塞时才释放处置机。
下面经过一个实例来阐明FCFS调剂算法的功能。假定零碎中有4个功课,它们的提交工夫辨别是8、8.4、8.8、9,运转工夫顺次是2、1、0.5、0.2,零碎釆用FCFS调剂算法,这组功课的均匀等候工夫、均匀周转工夫战争均带权周转工夫见表2-3。
表2-3 FCFS调剂算法的功能

功课号 提交工夫 运转工夫 开端工夫 等候工夫 完成工夫 周转工夫 带权周转工夫
1 8 2 8 0 10 2 1
2 8.4 1 10 1.6 11 2.6 2.6
3 8.8 0.5 11 2.2 11.5 2.7 5.4
4 9 0.2 11.5 2.5 11.7 2.7 13.5

均匀等候工夫 t = (0+1.6+2.2+2.5)/4=1.575
均匀周转工夫 T = (2+2.6+2.7+2.7)/4=2.5
均匀带权周转工夫 W = (1+2.6+5.牡13.5)/4=5.625
FCFS调剂算法属于弗成褫夺算法。从外表上看,它对一切功课多是公道的,但若一个长功课先抵达零碎,就会使前面很多短功课等候很长工夫,因而它不克不及作为分时零碎和及时零碎的次要调剂战略。但它常被联合在其他调剂战略中运用。例如,在运用优先级作为调剂战略的零碎中,常常对多个具有相反优先级的过程按FCFS准绳处置。
FCFS调剂算法的特色是算法复杂,但效力低;对长功课比拟有利,但对短功课晦气(绝对SJF和高呼应比);有利于CPU忙碌型功课,而晦气于I/O忙碌型功课。

短功课优先(SJF)调剂算法

短功课(过程)优先调剂算法是指对短功课(过程)优先调剂的算法。短功课优先(SJF)调剂算法是从后备队列当选择一个或若干个估量运转工夫最短的功课,将它们调入内存运转。而短过程优先(SPF)调剂算法,则是从停当队列当选择一个估量运转工夫最短的过程,将处置机分派给它,使之立刻履行,直到完成或发作某事情而壅塞时,才释放处置机。
例如,思索表2-3中给出的一组功课,若零碎釆用短功课优先调剂算法,其均匀等候工夫、均匀周转工夫战争均带权周转工夫见表2-4。
表2-4 SJF调剂算法的功能

功课号 提交工夫 运转工夫 开端工夫 等候工夫 完成工夫 周转工夫 带权周转工夫
1 8 2 8 0 10 2 1
2 8,4 1 10.7 2.3 11.7 3.3 3.3
3 8.8 0.5 10.2 1.4 10.7 1.9 3.8
4 9 0.2 10 1 10.2 1.2 6

均匀等候工夫 t = (0+2.3+1.4+1)/4=1.175
均匀周转工夫 T = (2+3.3+1.9+1.2)/4=2.1
均匀带权周转工夫 W = (1+3.3+3.8+6)/4=3.525
SJF调剂算法也存在不容无视的缺陷:

  • 该算法对长功课晦气,由表2-3和表2-4可知,SJF调剂算法中长功课的周转工夫会添加。更严重的是,假如有一长功课进入零碎的后备队列,因为调剂程序老是优先调剂那些 (即便是落后来的)短功课,将招致长功课临时不被调剂(“饥饿”景象,留意辨别“死锁”。后者是零碎环形等候,前者是调剂战略成绩)。
  • 该算法完整未思索功课的紧急水平,因此不克不及包管紧急性功课会被实时处置。
  • 因为功课的长短只是依据用户所供给的估量履行工夫而定的,而用户又能够会有意或有意地延长其功课的估量运转工夫,致使该算法纷歧定能真正做到短功课优先调剂。

留意,SJF调剂算法的均匀等候工夫、均匀周转工夫起码。

优先级调剂算法

优先级调剂算法又称优先权调剂算法,该算法既可以用于功课调剂,也可以用于过程调剂,该算法中的优先级用于描绘功课运转的紧急水平。
在功课调剂中,优先级调剂算法每次从后备功课队列当选择优先级最髙的一个或几个功课,将它们调入内存,分派需要的资本,创立过程并放入停当队列。在过程调剂中,优先级调剂算法每次从停当队列当选择优先级最高的过程,将处置机分派给它,使之投入运转。
依据新的更高优先级过程可否抢占正在履行的过程,可将该调剂算法分为:

  • 非褫夺式优先级调剂算法。当某一个过程正在处置机上运转时,即便有某个更为主要或紧急的过程进入停当队列,依然让正在运转的过程持续运转,直到因为其本身的缘由而自动让出处置机时(义务完成或等候事情),才把处置机分派给更为主要或紧急的过程。
  • 褫夺式优先级调剂算法。当一个过程正在处置机上运转时,如有某个更为主要或紧急的过程进入停当队列,则立刻暂停正在运转的过程,将处置机分派给更主要或紧急的过程。

而依据过程创立后其优先级能否可以改动,可以将过程优先级分为以下两种:

  • 静态优先级。优先级是在创立过程时肯定的,且在过程的全部运转时期坚持不变。肯定静态优先级的次要根据有过程类型、过程对资本的请求、用户请求。
  • 静态优先级。在过程运转进程中,依据过程状况的变更静态调剂优先级。静态调剂优先级的次要根据为过程占领CPU工夫的长短、停当过程等候CPU工夫的长短。

高呼应比优先调剂算法

高呼应比优先调剂算法次要用于功课调剂,该算法是对FCFS调剂算法和SJF调剂算法的一种综合均衡,同时思索每一个功课的等候工夫和估量的运转工夫。在每次停止功课调剂时,先盘算后备功课队列中每一个功课的呼应比,从当选出呼应比最高的功课投入运转。
呼应比的变更纪律可描绘为:

依据公式可知:

  • 看成业的等候工夫相反时,则请求效劳工夫越短,其呼应比越高,有利于短功课。
  • 当请求效劳工夫相反时,功课的呼应比由其等候工夫决议,等候工夫越长,其呼应比越高,因此它完成的是先来先效劳。
  • 关于长功课,功课的呼应比可以随等候工夫的添加而进步,当其等候工夫足够长时,其呼应比即可升到很高,从而也可取得处置机。克制了饥饿形态,统筹了长功课。

工夫片轮转调剂算法

工夫片轮转调剂算法次要实用于分时零碎。在这种算法中,零碎将一切停当过程按抵达工夫的先后次第排成一个队列,过程调剂程序老是选择停当队列中第一个过程履行,即先来先效劳的准绳,但仅能运转一个工夫片,如100ms。在运用完一个工夫片后,即便过程并未完成其运转,它也必需释放出(被褫夺)处置机给下一个停当的过程,而被褫夺的过程前往到停当队列的末尾从新列队,等待再次运转。
在工夫片轮转调剂算法中,工夫片的巨细对零碎功能的影响很大。假如工夫片足够大,以致于一切过程都能在一个工夫片内履行终了,则工夫片轮转调剂算法就退步为先来先效劳调剂算法。假如工夫片很小,那么处置机将在过程间过于频仍切换,使处置机的开支增大,而真正用于运转用户过程的工夫将增加。因而工夫片的巨细应选择恰当。
工夫片的长短平日由以下要素肯定:零碎的呼应工夫、停当队列中的过程数量和零碎的处置才能。

多级反应队列调剂算法(聚集了前几种算法的长处)

多级反应队列调剂算法是工夫片轮转调剂算法和优先级调剂算法的综合和开展,如图2-5 所示。经过静态调剂过程优先级和工夫片巨细,多级反应队列调剂算法可以统筹多方面的零碎目的。例如,为进步零碎吞吐量和延长均匀周转工夫而照料短过程;为取得较好的I/O装备应用率和延长呼应工夫而照料I/O型过程;同时,也不用事前估量过程的履行工夫。


图2-5  多级反应队列调剂算法

多级反应队列调剂算法的完成思惟如下:

  1. 应设置多个停当队列,并为各个队列付与分歧的优先级,第1级队列的优先级最高,第2级队列次之,其他队列的优先级逐次下降。
  2. 付与各个队列中过程履行工夫片的巨细也各不相反,在优先级越高的队列中,每一个过程的运转工夫片就越小。例如,第2级队列的工夫片要比第1级队列的工夫片长一倍, ……第i+1级队列的工夫片要比第i级队列的工夫片长一倍。
  3. 当一个新过程进入内存后,起首将它放入第1级队列的末尾,按FCFS准绳列队等候调剂。当轮到该过程履行时,如它能在该工夫片内完成,即可预备撤离零碎;假如它在一个工夫片完毕时髦未完成,调剂程序便将该过程转入第2级队列的末尾,再异样地按FCFS 准绳等候调剂履行;假如它在第2级队列中运转一个工夫片后仍未完成,再以异样的办法放入第3级队列……如斯下去,当一个出息程从第1级队列顺次降到第 n 级队列后,在第 n 级队列中便釆用工夫片轮转的方法运转。
  4. 仅当第1级队列为空时,调剂程序才调剂第2级队列中的过程运转;仅当第1 ~ (i-1)级队列均为空时,才会调剂第i级队列中的过程运转。假如处置机正在履行第i级队列中的某过程时,又有新过程进入优先级较高的队列(第 1 ~ (i-1)中的任何一个队列),则此时新过程将抢占正在运转过程的处置机,即由调剂程序把正在运转的过程放回到第i级队列的末尾,把处置机分派给新到的更高优先级的过程。

多级反应队列的优势有:

  • 终端型功课用户:短功课优先。
  • 短批处置功课用户:周转工夫较短。
  • 长批处置功课用户:经由后面几个队列失掉局部履行,不会临时得不四处理。
时间: 2024-10-07 00:18:26

操作零碎典型调剂算法的相关文章

java常用的数组、字符串、集合操作以及数据结构与算法基本知识

java中常用封装的数组 .字符串. 集合来操作对象,但数据结构中常用的有栈和队列   数与图以及他们之间的排序,查找. 数组声明没有分配内存空间  只有创建或者是初始化时才分配,创建时把数组中的数据类型数据所在的内存空间首地址赋值给数组名,在创建每个对象时,都会给该对象分配地址和它存储的数据 .如变量    int arr[]; int arr[]={1,2,3};  arr=new int[10] ,int arr[][]={{1,9,7},{1,2,3}}  int arr[][]=new

具体CAS操作实现(无锁算法)

具体CAS操作 上一篇讲述了CAS机制,这篇讲解CAS具体操作. 什么是悲观锁.乐观锁?在java语言里,总有一些名词看语义跟本不明白是啥玩意儿,也就总有部分面试官拿着这样的词来忽悠面试者,以此来找优越感,其实理解清楚了,这些词也就唬不住人了. synchronized是悲观锁,这种线程一旦得到锁,其他需要锁的线程就挂起的情况就是悲观锁. CAS操作的就是乐观锁,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止. 那么问题来了,什么是CAS操作? CAS是Comp

典型排序算法比较

根据带排序数据是否全部放入内存,排序分为内排序和外排序. 下面就根据我看书的体会,主要分析内排序的性能. 内排序的种类:插入排序(直接插入排序,希尔排序),选择排序(简单选择排序.堆排序),交换排序(冒泡排序.快速排序),归并排序. 其中用的比较多的是插入排序.归并排序.快速排序. 排序算法的比较:性能的比较可以从以下5个方面进行分析:时间复杂度(平均情况.最好情况.最差情况),空间复杂度(辅助空间),稳定性. 平均情况角度,三种改进算法胜过希尔排序,并且远好于三种简单算法. 最好情况角度,冒泡

AACOS:基于编译器和操作系统内核的算法设计与实现

AACOS:基于编译器和操作系统内核的算法设计与实现 [计算机科学技术] 谢晓啸 湖北省沙市中学 [关键词]: 编译原理,操作系统内核实现,算法与数据结构,算法优化 0.索引 1.引论 1.1研究内容 1.2研究目的 1.3研究提要 正文 2.1研究方法 2.2编译器部分 2.2.1从计算器程序中得到的编译器制作启示 2.2.2在编译器中其它具体代码的实现 2.2.3编译器中栈的高级应用 2.2.3编译器中树的高级应用 2.2.4编译器与有限状态机 2.3操作系统内核部分 2.3.1操作系统与底

数据结构开发(24):二叉树中属性操作、层次遍历与典型遍历

0.目录 1.二叉树中属性操作的实现 2.二叉树结构的层次遍历 3.二叉树的典型遍历方式 4.小结 1.二叉树中属性操作的实现 二叉树的属性操作: 二叉树中结点的数目: 定义功能:count(node) 在 node 为根结点的二叉树中统计结点数目 在BTree.h中实现统计结点数目: protected: int count(BTreeNode<T>* node) const { int ret = 0; if( node != NULL ) { ret = count(node->l

处置机调剂:调剂的概念、机遇、切换、进程以及调剂方法和根本原则

调剂的概念 1. 调剂的根本概念 在多道程序零碎中,过程的数目常常多于处置机的个数,过程争用途理机的状况就在所不免.处置机调剂是对处置机停止分派,就是从停当队列中,依照必定的算法(公道.髙效)选择一个过程并将处置机分派给它运转,以完成过程并发地履行.处置机调剂是多道程序操作零碎的根底,它是操作零碎设计的中心成绩. 2. 调剂的条理 一个功课从提交开端直到完成,常常要阅历以下三级调剂,如图2-4所示.1) 功课调剂.又称初级调剂,.其次要义务是按必定的准绳从外存上处于后备形态的功课中遴选一个(或多

Dijkstra算法(三)之 Java详解

前面分别通过C和C++实现了迪杰斯特拉算法,本文介绍迪杰斯特拉算法的Java实现. 目录 1. 迪杰斯特拉算法介绍 2. 迪杰斯特拉算法图解 3. 迪杰斯特拉算法的代码说明 4. 迪杰斯特拉算法的源码 转载请注明出处:http://www.cnblogs.com/skywang12345/ 更多内容:数据结构与算法系列 目录 迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想

迪杰斯特拉算法介绍

迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本思想 通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算). 此外,引进两个集合S和U.S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求出最短路径的顶点(以及该顶点到起点s的距离). 初始时,S中只有起点s:U中是除s之外的顶点,并且U中顶点的路径是"起点s

单源最短路Dijkstra算法——matlab实现

迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本思想 通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算). 此外,引进两个集合S和U.S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求出最短路径的顶点(以及该顶点到起点s的距离). 初始时,S中只有起点s:U中是除s之外的顶点,并且U中顶点的路径是"起点s