常见进程调度算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/x_y_r129/article/details/51685421

进程调度:实质是一种资源分配。决定将CPU分配给就绪队列中的某个进程。
发生进程调度原因:
(1)正在执行的进程执行完毕;
(2)执行中的进程因发生I/O请求或等事件而暂停执行
(3)时间片用完;
(4)在进程通信或同步过程中执行了某项原语操作,如P操作(wait操作);
(5)高优先级进入。

作业调度:简单来说就是决定将外存后备队列的哪一作业调入内存。

进程调度与作业调度的关系:
作业调度属于高级调度,调度对象是作业。
进程调度属于低级调度,调度对象是进程。多道批处理、分时和实时OS中都必须配置这级调度。
按一定的算法从磁盘上的“输入井”中选择资源能得到满足的作业装入内存,使作业有机会去占用处理器执行。但是,一个作业能否占用处理器,什么时间能够占用处理器,必须由进程调度来决定。所以,作业调度选中 了一个作业且把它装入内存时,就应为该作业创建一个进程,若有多个作业被装入内存,则内存中同时存在多个进程,这些进程的初始状态为就绪状态,然后,由进程调度(优先数)来选择当前可占用处理器的进程,进程运行中由于某种原因状态发生变化,当它让出处理器时,进程调度就再选另一个作业的进程运行。 因此,作业调度与进程调度相互配合才能实现多道作业的并行执行。

简单来说:比如两道作业管理进程的批处理系统。内存中一个作业运行,一个作业就绪。不是每个作业都有就绪的机会,具体哪一个作业会得到这个机会,取决于进程调度算法。

一、先来先服务调度算法
FCFS是一种非抢占方式,既可用于作业调度,也可用于进程调度。
在作业调度中采用该算法时:每次调度从后备作业队列中选择一个或多个最先进入该队列的作业,将他们调入内存,为他们分配资源、创建进程,然后放入就绪队列;
在进程调度中采用该算法时:每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。
FCFS算法有利于于长作业(进程),而不利于短作业(进程);有利于CPU繁忙型作业(进程),而不利于I/O繁忙型作业(进程)。
二、短作业(进程)优先调度算法
短作业优先调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将他们调入内存运行;
短进程优先调度算法是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使它立即执行直到完成。
缺点:
(1)该算法对长作业不利;
(2)完全未考虑作业的紧迫程度;
(3)作业或进程的长短是由用户提供的估计运行时间,用户有可能有意或者无意的缩短估计运行时间,使其不一定能做到短作业或短进程优先调度。
三、优先权调度算法
由于短作业优先调度算法照顾不到紧迫型作业,引入了最高优先权调度算法。
作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存;
进程调度时,把处理及分配给就绪队列中优先权最高的进程。
(1)非抢占式优先算法
系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程一直执行下去,直至完成。主要用于批处理系统,也可用于要求不严的实时系统。
这里写图片描述
(2)抢占式优先算法
系统把处理机分配给就绪队列中优先权最高的进程后,在该进程执行期间,一旦出现了另一个优先权更高的进程,进程调度立即停止当前进程的执行,重新把处理机分配给新到的优先权最高的进程。常用于要求较严格的实时系统以及对性能要求较高的批处理和分时系统。
这里写图片描述

四、时间片轮转
仅适用于进程调度。
系统将所有就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,由一个计数器发出时钟中断请求,调度程序便停止该进程执行,把它送往就绪队列末端,然后再把处理机分配给就绪队列新的队首进程,同时也让它执行一个时间片。
时间片的选择:选很小的时间片有利于短作业,因为它能较快的完成,但会频繁的发生中断、进程上下文的切换,从而增加系统开销;反之,选择太长的时间片,使每个进程都能在一个时间片内完成,那就退化成为FCFS算法,一个可取的大小是时间片略大于一次典型的交互所需要的时间。
这里写图片描述

没有更多推荐了,返回首页