转 作业调度算法

http://blog.csdn.net/piaojun_pj/article/details/5931324

.先来先服务(FCFS, First Come First Serve)是最简单的调度算法,按先后顺序进行调度。

定义:

  按照作业提交或进程变为就绪状态的先后次序,分派CPU;

  当前作业或进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)。

  在作业或进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前作业或进程出让CPU。

适用场景:

  比较有利于长作业,而不利于短作业。因为长作业会长时间占据处理机。

  有利于CPU繁忙的作业,而不利于I/O繁忙的作业。

算法实现原理图:

2. 轮转法(Round Robin)

  轮转法是让每个进程在就绪队列中的等待时间与享受服务的时间成正比例。

定义:

  将系统中所有的就绪进程按照FCFS原则,排成一个队列。

  每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。

  在一个时间片结束时,发生时钟中断。

  调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。

  进程可以未使用完一个时间片,就出让CPU(如阻塞)。

时间片长度的确定:

  时间片长度变化的影响

  过长->退化为FCFS算法,进程在一个时间片内都执行完,响应时间长。

  过短->用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,响应时间长。

  对响应时间的要求:T(响应时间)=N(进程数目)*q(时间片)

  就绪进程的数目:数目越多,时间片越小

  系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使响应时间,平均周转时间和平均带权周转时间延长。

算法实现原理图:

3. 多级反馈队列算法(Round Robin with Multiple Feedback)

  多级反馈队列算法是轮转算法和优先级算法的综合和发展。

定义:

  设置多个就绪队列,分别赋予不同的优先级,如逐级降低,队列1的优先级最高。每个队列执行时间片的长度也不同,规定优先级越低则时间片越长,如逐级加倍。

  新进程进入内存后,先投入队列1的末尾,按FCFS算法调度;若按队列1一个时间片未能执行完,则降低投入到队列2的末尾,同样按FCFS算法调度;如此下去,降低到最后的队列,则按“时间片轮转”算法调度直到完成。

  仅当较高优先级的队列为空,才调度较低优先级的队列中的进程执行。如果进程执行时有新进程进入较高优先级的队列,则抢先执行新进程,并把被抢先的进程投入原队列的末尾。

优点:

  为提高系统吞吐量和缩短平均周转时间而照顾短进程。

  为获得较好的I/O设备利用率和缩短响应时间而照顾I/O型进程。

  不必估计进程的执行时间,动态调节

几点说明:

  I/O型进程:让其进入最高优先级队列,以及时响应I/O交互。通常执行一个小时间片,要求可处理完一次I/O请求的数据,然后转入到阻塞队列。

  计算型进程:每次都执行完时间片,进入更低级队列。最终采用最大时间片来执行,减少调度次数。

  I/O次数不多,而主要是CPU处理的进程。在I/O完成后,放回优先I/O请求时离开的队列,以免每次都回到最高优先级队列后再逐次下降。

  为适应一个进程在不同时间段的运行特点,I/O完成时,提高优先级;时间片用完时,降低优先级。

算法实现原理图:

4. 优先级法(Priority Scheduling)

  优先级算法是多级队列算法的改进,平衡各进程对响应时间的要求。适用于作业调度和进程调度,可分成抢先式和非抢先式。

静态优先级:

  作业调度中的静态优先级大多按以下原则确定:

  由用户自己根据作业的紧急程度输入一个适当的优先级。

  由系统或操作员根据作业类型指定优先级。

  系统根据作业要求资源情况确定优先级。

  进程的静态优先级的确定原则:

  按进程的类型给予不同的优先级。

  将作业的情态优先级作为它所属进程的优先级。

动态优先级:

  进程的动态优先级一般根据以下原则确定:

  根据进程占用有CPU时间的长短来决定。

  根据就绪进程等待CPU的时间长短来决定。

5.短作业优先法(SJF, Shortest Job First)

  短作业优先又称为“短进程优先”SPN(Shortest Process Next);这是对FCFS算法的改进,其目标是减少平均周转时间。

定义:

  对预计执行时间短的作业(进程)优先分派处理机。通常后来的短作业不抢先正在执行的作业。

SJF的特点:

  (1) 优点:

  比FCFS改善平均周转时间和平均带权周转时间,缩短作业的等待时间;

  提高系统的吞吐量;

  (2) 缺点:

  对长作业非常不利,可能长时间得不到执行;

  未能依据作业的紧迫程度来划分执行的优先级;

  难以准确估计作业(进程)的执行时间,从而影响调度性能。

SJF的变型:

  “最短剩余时间优先”SRT(Shortest Remaining Time)(允许比当前进程剩余时间更短的进程来抢占)

  “最高响应比优先”HRRN(Highest Response Ratio Next)(响应比R = (等待时间 + 要求执行时间) / 要求执行时间,是FCFS和SJF的折衷)

6. 最高响应比优先法(HRN,Highest Response_ratio Next)

  最高响应比优先法是对FCFS方式和SJF方式的一种综合平衡。FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。因此,这两种调度算法在某些极端情况下会带来某些不便。HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。

  响应比R定义如下: R =(W+T)/T = 1+W/T

  其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W / T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRN方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。

时间: 2024-11-05 22:29:36

转 作业调度算法的相关文章

Hadoop集群三种作业调度算法介绍

Hadoop集群中有三种作业调度算法,分别为FIFO,公平调度算法和计算能力调度算法先来先服务(FIFO)Hadoop中默认的调度器FIFO,它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业.FIFO比较简单,hadoop中只有一个作业队列,被提交的作业按照先后顺序在作业队列中排队,新来的作业插入到队尾.一个作业运行完后,总是从队首取下一个作业运行.这种调度策略的优点是简单.易于实现,同时也减轻了jobtracker的负担.但是它的缺点也是显然的,它对所有的作业都一视同仁,没有考虑

常见的作业调度算法总结

今天被问到操作系统的一些知识,发现自己一个不会,实在还是有点尴尬,之前的学习一直在框架,游戏引擎上,基本上忽略了学校大部分的理论知识-于是最近突然想学学操作系统了-反正也没什么事忙了!! ---------------------------------------- 操作系统是什么?[概念] 是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件 -----这句话感觉意思都懂,但是就是概括不出来- 进程是什么?[概念] 进程是操作系统结构的基础:是一次程序的执行

作业调度算法

先来先服务.短进程优先算法 一.实验目的 通过使用c对先来先服务.短进程优先算法的实现,进一步理解并掌握调度算法的逻辑过程,以及每种算法分别在进程调度和作业调度中的的处理方法. 二.实验原理 先来先服务:该算法在每次调度中,都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为他们分配资源.创建进程,然后放入就绪队列.在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,位置分配处理机,使之投入运行.该进程一直运行到完成或发生某事件而阻塞后才放

短作业调度算法

#include <stdio.h> struct sjf //定义进程的结构体{  char name[10]; //进程名 float arrivetime; //到达时间 float servicetime; //服务时间 float starttime;  //开始时间 float finishtime; //完成时间 float zztime; //周转时间 float dqzztime; //带权周转时间 };  sjf b[100]; //定义短作业优先算法进程的最大数量 voi

YARN中用的作业调度算法:DRF(Dominant Resource Fairness)

在Mesos和YARN中,都用到了dominant resource fairness算法(DRF),它不同于hadoop基于slot-based实现的fair scheduler和capacity scheduler,论文阅读:Dominant Resource Fairness: Fair Allocation of Multiple Resource Types .考虑在一个包括多种资源类型(主要考虑CPU和MEM)的系统的公平资源分配问题,其中不同用户对资源有不同的需求.为了解决这个问题

【Linux】 进程调度算法

Linux中的进程调度算法分类如下: 一.先来先服务和短作业(进程)优先调度算法 1.先来先服务调度算法(FCFS) 先来先服务(First Come First Service,FCFS)调度算法是一种最简单的.不可抢占式的调度算法,既可用于作业调度,也可用于进程调度.该算法按照进程进入就绪队列的先后顺序选择可以占用处理器的进程.每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源.创建进程,然后放入就绪队列.在进程调度中采用FCFS算法时,则每次调度

常见进程调度算法

常见进程调度算法 一.先来先服务和短作业(进程)优先调度算法 1.先来先服务调度算法 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度.当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源.创建进程,然后放入就绪队列.在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行.该进程一直运行到完成或发生某事件而阻塞后才放弃处理

操作系统中常见的调度算法

一.先来先服务调度算法 先来先服务的调度算法(FCFS)是一种最简单的调度算法,该算法既可以用于作业调度,也可以用于进程调度.当在作业调度中采用该算法时,每次都是从后备作业队列选择一个或多个最先进入该队列的作业,将他们调入内存,为他们分配内存,为他们分配资源,创建进程,然后放入就绪队列中.在进程中采用FCFS算法时,则每次调度室从就绪队列中选择一个最先进入该队列的进程,位置分配处理机,使之投入运行.该进程一直运行到完成或发生某事件而阻塞后才放弃处理机. FCFS调度算法有利于cpu繁忙型的作业,

常见的几种操作系统进程调度算法

什么是进程调度算法??? 进程调度算法:根据系统的资源分配策略所规定的资源分配算法. 一.先来先服务和短作业(进程)优先调度算法 1.先来先服务调度算法 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度.当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源.创建进程,然后放入就绪队列.在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理