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

1.      先来先服务(FCFS)调度算法

FCFS调度算法是一种最简单的调度算法,该调度算法既可以用于作业调度也可以用于进程调度。在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。

在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。

FCFS调度算法属于不可剥夺算法。从表面上看,它对所有作业都是公平的,但若一个长作业先到达系统,就会使后面许多短作业等待很长时间,因此它不能作为分时系统和实时系统的主要调度策略。但它常被结合在其他调度策略中使用。例如,在使用优先级作为调度策略的系统中,往往对多个具有相同优先级的进程按FCFS原则处理。

FCFS调度算法的特点是算法简单,但效率低;对长作业比较有利,但对短作业不利(相对SJF和高响应比);有利于CPU繁忙型作业,而不利于I/O繁忙型作业。

2.      短作业优先(SJF)调度算法

短作业(进程)优先调度算法是指对短作业(进程)优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法,则是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。

SJF调度算法的缺点:

①该算法对长作业不利,SJF调度算法中长作业的周转时间会增加。更严重的是,如果有一长作业进入系统的后备队列,由于调度程序总是优先调度那些 (即使是后进来的)短作业,将导致长作业长期不被调度。

②该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业会被及时处理。

③由于作业的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。

3.      优先级调度算法

优先级调度算法又称优先权调度算法,该算法既可以用于作业调度,也可以用于进程调度,该算法中的优先级用于描述作业运行的紧迫程度。在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。

根据新的更高优先级进程能否抢占正在执行的进程,可将该调度算法分为: ①非剥夺式优先级调度算法。当某一个进程正在处理机上运行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在运行的进程继续运行,直到由于其自身的原因而主动让出处理机时(任务完成或等待事件),才把处理机分配给更为重要或紧迫的进程。

②剥夺式优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更重要或紧迫的进程。

根据进程创建后其优先级是否可以改变,可以将进程优先级分为以下两种:

①静态优先级。优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。确定静态优先级的主要依据有进程类型、进程对资源的要求、用户要求。

②动态优先级。在进程运行过程中,根据进程情况的变化动态调整优先级。动态调整优先级的主要依据为进程占有CPU时间的长短、就绪进程等待CPU时间的长短。

4.      高响应比优先调度算法

高响应比优先调度算法主要用于作业调度,该算法是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。

根据公式可知:

①当作业的等待时间相同时,则要求服务时间越短,其响应比越高,有利于短作业。

②当要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务。

③对于长作业,作业的响应比可以随等待时间的增加而提高,当其等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。克服了饥饿状态,兼顾了长作业。

5.      时间片轮转调度算法

时间片轮转调度算法主要适用于分时系统。在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如100ms。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。

在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。如果时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则时间片轮转调度算法就退化为先来先服务调度算法。如果时间片很小,那么处理机将在进程间过于频繁切换,使处理机的开销增大,而真正用于运行用户进程的时间将减少。因此时间片的大小应选择适当。

时间片的长短通常由以下因素确定:系统的响应时间、就绪队列中的进程数目和系统的处理能力。

6.      多级反馈队列调度算法(集合了前几种算法的优点)

多级反馈队列调度算法是时间片轮转调度算法和优先级调度算法的综合和发展,通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标。例如,为提高系统吞吐量和缩短平均周转时间而照顾短进程;为获得较好的I/O设备利用率和缩短响应时间而照顾I/O型进程;同时,也不必事先估计进程的执行时间。

多级反馈队列调度算法:

多级反馈队列调度算法的实现思想如下:

(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-06 05:32:14

操作系统中常见的进程调度算法的相关文章

操作系统中常用的进程调度算法

操作系统中对进程的调度算法大体上可以分为三类: 1.先来先服务算法 2.优先级法 3.时间片轮法 接下来简要介绍一下这三类算法. 一.先来先服务算法 (FCFS:    First Come First Service) 原理: 这是最简单的一种调度算法,用到了队列的思想.每次调度都从进程就绪队列中选择队首的进程(也就是最先进入队列的进程)进行调度. 直到进程的执行被阻塞,或进程结束,再调用下一个进程,依然是从队列中选择队首的进程的. 这里要注意,上文我说的队列中的进程实际上是进程的PCB,因为

Linux 常见的进程调度算法

1.在介绍进程调度之前,先对进程的状态的概念应该有所了解,下面是关于进程状态的一些基本概念:进程的状态分为三种,分别为: 1).运行态:该状态表明进程在实际占用CPU 2).就绪态: 该状态下进程可以运行,但因为其他进程正在运行而暂时停止 3).阻塞态: 该状态下进程不能运行,除非某种外部事件的发送 运行态→等待态 往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的. 等待态→就绪态 则是等待的条件已满足,只需分配到处理器后就能运行. 运行态→就绪态 不是由于自身原因,而是由外界原因使

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

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

常见的进程调度算法

一.进程和作业的区别 区别:进程是一个程序在一个数据集上的一次执行,而作业是用户提交给系统的一个任务.  关系:一个作业通常包括几个进程,几个进程共同完成一个任务,即作业.  作业调度是宏观调度,它决定了哪一个作业能进入主存.进程调度是微观调度,它决定各作业中的哪一个进程占有中央处理器. 二.先来先服务和短作业(进程)优先调度算法 ①先来先服务(FCFS) 可用于作业调度和进程调度,简单来说,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源.创建进程

《操作系统_时间片轮转RR进程调度算法》

转自:https://blog.csdn.net/houchaoqun_xmu/article/details/55540250 时间片轮转RR进程调度算法 一.概念介绍和案例解析时间片轮转法 - 基本原理:  在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片.时间片的大小从几ms到几百ms.当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾:然后,

操作系统中的几种调度算法(JAVA版)

1 import java.text.DecimalFormat; 2 import java.util.Arrays; 3 import java.util.Scanner; 4 5 /* 6 * 作者:Chensx1020 7 * 时间:2016-12-11 8 * 功能:CPU调度算法 9 * 1)先到先服务调度算法(FCFS) 10 * 2)最短作业优先调度算法,非抢占式(SJF) 11 * 3)优先级调度算法(PSA) 12 * 4)轮转法调度算法(RR) 13 * 5)最高响应比调度

浅析几个常见进程调度算法

今天来谈谈操作系统的几个常见的进程调度算法.那么第一步首先要了解什么是进程调度算法?简单来说就是根据系统的资源分配策略所规定的资源分配算法.举个例子来说明.假设任务一在执行完成后选择哪个任务来进行使得某一因素最小,这个因素可能是进程执行的总时间或是磁盘寻道时间等等.因此对于不同的系统目标有着不同的要求,要选择的调度算法也就不尽相同.接下来,就聊聊几个常见的进程调度算法.  First>>  先来先服务调度算法  FCFS 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业

操作系统中的进程与线程

操作系统中的进程与线程 转自:http://www.cnblogs.com/CareySon/archive/2012/05/04/ProcessAndThread.html 简介 在传统的操作系统中,进程拥有独立的内存地址空间和一个用于控制的线程.但是,现在的情况更多的情况下要求在同一地址空间下拥有多个线程并发执行.因此线程被引入操作系统. 为什么需要线程? 如果非要说是为什么需要线程,还不如说为什么需要进程中还有其它进程.这些进程中包含的其它迷你进程就是线程. 线程之所以说是迷你进程,是因为

常见的进程优先调度算法

什么是进程调度以及为什么有进程调度算法 无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数.这将导致它们互相争夺处理机.另外,系统进程也同样需要使用处理机.这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行. 常见的进程调度算法   先进先出算法 算法总是把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便一直执行下去,直到该进程完成或阻塞时,才释放处理机. 例如,有三个进程P1.P2和P3先后进入就绪队列,它们的执行期分别是21