调度算法
通常将作业或进程归入各种就绪或阻塞队列。有的算法适用于作业调度,有的算法适用于进程调度,有的两者都适应。
1.先来先服务(FCFS, First Come First Serve)
先来先服务(FCFS, First Come First Serve)是最简单的调度算法,按先后顺序进行调度。
1 FCFS算法
按照作业提交或进程变为就绪状态的先后次序,分派CPU;
当前作业或进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)。
在作业或进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前作业或进程出让CPU。最简单的算法。
2 FCFS的特点
比较有利于长作业,而不利于短作业。
有利于CPU繁忙的作业,而不利于I/O繁忙的作业。
2 轮转法(Round Robin)
轮转法(Round Robin)是让每个进程在就绪队列中的等待时间与享受服务的时间成正比例。
1 轮转法
Ø 将系统中所有的就绪进程按照FCFS原则,排成一个队列。
Ø 每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。
Ø 在一个时间片结束时,发生时钟中断。
Ø 调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。
Ø 进程可以未使用完一个时间片,就出让CPU(如阻塞)。
Ø
2 时间片长度的确定
Ø 时间片长度变化的影响
² 过长->退化为FCFS算法,进程在一个时间片内都执行完,响应时间长。
² 过短->用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,响应时间长。
Ø 对响应时间的要求:T(响应时间)=N(进程数目)q(时间片)
Ø 就绪进程的数目:数目越多,时间片越小
Ø 系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使响应时间,平均周转时间和平均带权周转时间延长。
3 多级反馈队列算法(Round Robin with Multiple Feedback)
多级反馈队列算法时间片轮转算法和优先级算法的综合和发展。
优点:
² 为提高系统吞吐量和缩短平均周转时间而照顾短进程。
² 为获得较好的I/O设备利用率和缩短响应时间而照顾I/O型进程。
² 不必估计进程的执行时间,动态调节。
1 多级反馈队列算法
² 设置多个就绪队列,分别赋予不同的优先级,如逐级降低,队列1的优先级最高。每个队列执行时间片的长度也不同,规定优先级越低则时间片越长,如逐级加倍。
² 新进程进入内存后,先投入队列1的末尾,按FCFS算法调度;若按队列1一个时间片未能执行完,则降低投入到队列2的末尾,同样按FCFS算法调度;如此下去,降低到最后的队列,则按“时间片轮转”算法调度直到完成。
² 仅当较高优先级的队列为空,才调度较低优先级的队列中的进程执行。如果进程执行时有新进程进入较高优先级的队列,则抢先执行新进程,并把被抢先的进程投入原队列的末尾。
²
2 几点说明
² I/O型进程:让其进入最高优先级队列,以及时响应I/O交互。通常执行一个小时间片,要求可处理完一次I/O请求的数据,然后转入到阻塞队列。
² 计算型进程:每次都执行完时间片,进入更低级队列。最终采用最大时间片来执行,减少调度次数。
² I/O次数不多,而主要是CPU处理的进程。在I/O完成后,放回优先I/O请求时离开的队列,以免每次都回到最高优先级队列后再逐次下降。
² 为适应一个进程在不同时间段的运行特点,I/O完成时,提高优先级;时间片用完时,降低优先级。
调度算法是指:根据系统的资源分配策略所规定的资源分配算法。常见的进程调度算法有:
1先来先去服务
2时间片轮转法
3多级反馈队列算法
4最短进程优先
5最短剩余时间优先
6最高响应比优先
7多级反馈队列调度算法
一、先来先去服务
先来先去服务调度算法是一种最简单的调度算法,也称为先进先出或严格排队方案。当每个进程就绪后,它加入就绪队列。当前正运行的进程停止执行,选择在就绪队列中存在时间最长的进程运行。该算法既可以用于作业调度,也可以用于进程调度。先来先去服务比较适合于常作业(进程),而不利于段作业(进程)。
二、时间片轮转法
轮转法是基于适中的抢占策略的,以一个周期性间隔产生时钟中断,当中断发生后,当前正在运行的进程被置于就绪队列中,然后基于先来先去服务策略选择下一个就绪作业的运行。这种技术也称为时间片,因为每个进程再被抢占之前都给定一片时间。
三、最短进程优先
最短进程优先是一个非抢占策略,他的原则是下一次选择预计处理时间最短的进程,因此短进程将会越过长作业,跳至队列头。该算法即可用于作业调度,也可用于进程调度。但是他对长作业不利,不能保证紧迫性作业(进程)被及时处理,作业的长短只是被估算出来的。
四、最短剩余时间优先
最短剩余时间是针对最短进程优先增加了抢占机制的版本。在这种情况下,进程调度总是选择预期剩余时间最短的进程。当一个进程加入到就绪队列时,他可能比当前运行的进程具有更短的剩余时间,因此只要新进程就绪,调度程序就能可能抢占当前正在运行的进程。像最短进程优先一样,调度程序正在执行选择函数是必须有关于处理时间的估计,并且存在长进程饥饿的危险。
1)10:00Job1到达并投入运行。此时内存中有作业:Job1
2)10:05 Job2到达并进入内存。此时,Job1运行时间剩余是25min, Job2运行剩余时间是20min,根据SRTF,Job2开始运行。
3)10:25 Job2运行结束。Job3、Job4在后备队列中,据SJF,Job3进入内存,据SRTF,Job3开始运行。内存:Job1、Job3
4)10:30 Job3运行结束。Job4在后备队列中,Job4进入内存,据SRTF,Job4开始运行。内存:Job1、Job4
5)10:40 Job4运行结束。Job1重新继续运行。
6)11:05 Job1运行结束。
作业系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源。这就是调度。目的是控制资源使用者的数量,选取资源使用者许可占用资源或占用资源。
基本介绍 中文名 :调度算法 所属领域 :作业系统 调度算法,评价因素,吞吐量,CPU利用率,周转时间,确定进程调度原则,调度算法分类,先来先服务(FCFS),轮转法(Round Robin),多级反馈伫列算法,linux进程调度算法, 调度算法 在作业系统中调度是指一种资源分配,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法。对于不同的的系统和系统目标,通常采用不同的调度算法,例如,在批处理系统中,为了照顾为数众多的段作业,应采用短作业优先的调度算法;又如在分时系统中,为了保证系统具有合理的回响时间,应当采用轮转法进行调度。目前存在的多种调度算法中,有的算法适用于作业调度,有的算法适用于进程调度;但也有些调度算法既可以用于作业调度,也可以用于进程调度。 通常将作业或进程归入各种就绪或阻塞伫列。 调度算法要求:高资源利用率、高吞吐量、用户满意等原则。 进程调度所采用的算法是与整个系统的设计目标相一致的: 1批处理系统:增加系统吞吐量和提高系统资源的利用率; 2分时系统:保证每个分时用户能容忍的回响时间。 3实时系统:保证对随机发生的外部事件做出实时回响。 评价因素 吞吐量 单位时间内CPU完成作业的数量。 CPU利用率 从0%~100%。 周转时间 评价批处理系统的性能指标。 Ti = 作业完成时刻 - 作业提交时刻 确定进程调度原则 在系统角度来说,公平性:每个进程(不论优先权)都有机会被运行;较大的吞吐量。 用户角度:及时性:回响速度要快;较短的周转时间:不应当让用户等待时间过长。 调度算法分类 先来先服务(FCFS) 先来先服务(FCFS, First Come First Serve)是最简单的调度算法,按先后顺序进行调度。 1 FCFS算法 按照作业提交或进程变为就绪状态的先后次序,分派CPU; 当前作业或进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)。 在作业或进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前作业或进程出让CPU。最简单的算法。 2 FCFS的特点 比较有利于长作业,而不利于短作业。 有利于CPU繁忙的作业,而不利于I/O繁忙的作业。 轮转法(Round Robin) 轮转法(Round Robin)是让每个进程在就绪伫列中的等待时间与享受服务的时间成正比例。 1 轮转法 将系统中所有的就绪进程按照FCFS原则,排成一个伫列。 每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。 在一个时间片结束时,发生时钟中断。 调度程式据此暂停当前进程的执行,将其送到就绪伫列的末尾,并通过上下文切换执行当前的队首进程。 进程可以未使用完一个时间片,就出让CPU(如阻塞)。 2 时间片长度的确定 时间片长度变化的影响2 过长->退化为FCFS算法,进程在一个时间片内都执行完,回响时间长。2 过短->用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,回响时间长。 对回响时间的要求:T(回响时间)=N(进程数目)q(时间片) 就绪进程的数目:数目越多,时间片越小 系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使回响时间,平均周转时间和平均带权周转时间延长。 多级反馈伫列算法 多级反馈伫列算法时间片轮转算法和优先权算法的综合和发展。优点:2 为提高系统吞吐量和缩短平均周转时间而照顾短进程。2 为获得较好的I/O设备利用率和缩短回响时间而照顾I/O型进程。2 不必估计进程的执行时间,动态调节。 1 多级反馈伫列算法2 设定多个就绪伫列,分别赋予不同的优先权,如逐级降低,伫列1的优先权最高。每个伫列执行时间片的长度也不同,规定优先权越低则时间片越长,如逐级加倍。2 新进程进入记忆体后,先投入伫列1的末尾,按FCFS算法调度;若按伫列1一个时间片未能执行完,则降低投入到伫列2的末尾,同样按FCFS算法调度;如此下去,降低到最后的伫列,则按“时间片轮转”算法调度直到完成。2 仅当较高优先权的伫列为空,才调度较低优先权的伫列中的进程执行。如果进程执行时有新进程进入较高优先权的伫列,则抢先执行新进程,并把被抢先的进程投入原伫列的末尾。 2 几点说明 I/O型进程:让其进入最高优先权伫列,以及时回响I/O互动。通常执行一个小时间片,要求可处理完一次I/O请求的数据,然后转入到阻塞伫列。 计算型进程:每次都执行完时间片,进入更低级伫列。最终采用最大时间片来执行,减少调度次数。 I/O次数不多,而主要是CPU处理的进程。在I/O完成后,放回优先I/O请求时离开的伫列,以免每次都回到最高优先权伫列后再逐次下降。2为适应一个进程在不同时间段的运行特点,I/O完成时,提高优先权;时间片用完时,降低优先权。 3shortest job next 系统计算程式调用的时间,时间最短的先执行。 linux进程调度算法 linux核心的三种调度方法: 1 SCHED_OTHER 分时调度策略, 2 SCHED_FIFO实时调度策略,先到先服务 3 SCHED_RR实时调度策略,时间片轮转 实时进程将得到优先调用,实时进程根据实时优先权决定调度权值,分时进程则通过nice和counter值决 定权值,nice越小,counter越大,被调度的机率越大,也就是曾经使用了cpu最少的进程将会得到优先调 度。 SHCED_RR和SCHED_FIFO的不同: 当采用SHCED_RR策略的进程的时间片用完,系统将重新分配时间片,并置于就绪伫列尾。放在伫列 尾保证了所有具有相同优先权的RR任务的调度公平。 SCHED_FIFO一旦占用cpu则一直运行。一直运行直到有更高优先权任务到达或自己放弃。 如果有相同优先权的实时进程(根据优先权计算的调度权值是一样的)已经准备好,FIFO时必须等待该 进程主动放弃后才可以运行这个优先权相同的任务。而RR可以让每个任务都执行一段时间。 SHCED_RR和SCHED_FIFO的相同点: SHCED_RR和SHCED_FIFO都只用于实时任务。 创建时优先权大于0(1-99)。 按照可抢占优先权调度算法进行。 就绪态的实时任务立即抢占非实时任务。 所有任务都采用linux分时调度策略时。 1 创建任务指定采用分时调度策略,并指定优先权nice值(-20~19)。 2 将根据每个任务的nice值确定在cpu上的执行时间(counter)。 3 如果没有等待资源,则将该任务加入到就绪伫列中。 4 调度程式遍历就绪伫列中的任务,通过对每个任务动态优先权的计算(counter+20-nice)结果,选择 计算结果最大的一个去运行,当这 个时间片用完后(counter减至0)或者主动放弃cpu时,该任务将被放在 就绪伫列末尾(时间片用完)或等待伫列(因等待资源而放弃cpu)中。 5 此时调度程式重复上面计算过程,转到第4步。 6 当调度程式发现所有就绪任务计算所得的权值都为不大于0时,重复第2步。 所有任务都采用FIFO时: 1 创建进程时指定采用FIFO,并设定实时优先权rt_priority(1-99)。 2 如果没有等待资源,则将该任务加入到就绪伫列中。 3 调度程式遍历就绪伫列,根据实时优先权计算调度权值(1000+rt_priority),选择权值最高的任务使用 cpu,该FIFO任务将一直占有cpu直到有优先权更高的任务就绪(即使优先权相同也不行)或者主动放弃(等 待资源)。 4 调度程式发现有优先权更高的任务到达(高优先权任务可能被中断或定时器任务唤醒,再或被当前运行 的任务唤醒,等等),则调度程式立即在当前任务 堆叠中保存当前cpu暂存器的所有数据,重新从高优先权 任务的堆叠中载入暂存器数据到cpu,此时高优先权的任务开始运行。重复第3步。 5 如果当前任务因等待资源而主动放弃cpu使用权,则该任务将从就绪伫列中删除,加入等待伫列,此时 重复第3步。 所有任务都采用RR调度策略时 1 创建任务时指定调度参数为RR,并设定任务的实时优先权和nice值(nice值将会转换为该任务的时间片 的长度)。 2 如果没有等待资源,则将该任务加入到就绪伫列中。 3 调度程式遍历就绪伫列,根据实时优先权计算调度权值(1000+rt_priority),选择权值最高的任务使用 cpu。 4 如果就绪伫列中的RR任务时间片为0,则会根据nice值设定该任务的时间片,同时将该任务放入就绪队 列的末尾。重复步骤3。 5 当前任务由于等待资源而主动退出cpu,则其加入等待伫列中。重复步骤3。 系统中既有分时调度,又有时间片轮转调度和先进先出调度 1 RR调度和FIFO调度的进程属于实时进程,以分时调度的进程是非实时进程。 2 当实时进程准备就绪后,如果当前cpu正在运行非实时进程,则实时进程立即抢占非实时进程。 3 RR进程和FIFO进程都采用实时优先权做为调度的权值标准,RR是FIFO的一个延伸。FIFO时,如果两 个进程的优先权一样,则这两个优先 级一样的进程具体执行哪一个是由其在伫列中的未知决定的,这样导 致一些不公正性(优先权是一样的,为什么要让你一直运行),如果将两个优先权一样的任务 的调度策略都 设为RR,则保证了这两个任务可以循环执行,保证了公平。
1程序算法
struct PCB
{
int pname;
int pri;
int runtime;
int waitting;
struct PCBnext;
}
pcb[7];
struct PCBrunning,ready,wait;
int sin=0;
main()
{ 创建PCB[3]--PCB[9]并插入ready队列;/pname分别为3--9,
pri=0,runtime=10,waittime=0 /
for(;;)/系统程序,完成初始化和处理机分派功能 /
{cast{sig=0:swtch;
sig=1:waiter;
sig=3:proc3;
sig=4:proc4;
sig=5:proc5;
sig=6:proc6;
sig=7:proc7;
sig=8:proc8;
sig=9:proc9;}
}
}
2进程调度程序
swtch()
{
while(ready==NULL)wakeup();
移出就绪队列第一个PCB;
送running指针;
若pri=1,则runntime=4,否则runtime=10;
将running→pname 送sig
}
3。 将进程等待函数
wait()
{将运行进程插入wait队列,优先数置1;
sig=0;
}
4。进程唤醒函数
wakeup()
{
将wait队列中所有的PCB中waittime减1;
将wait队列中的所有的waittime=0的PCB揭除;
插入到ready队列中第一个优先级为0的PCB前面
}
进程调度概念: *** 作系统必须为多个,吗进程可能有竞争的请求分配计算机资源。对处理器而言,可分配的资源是在处理器上的执行时间,分配途径是调度。调度功能必须设计成可以满足多个目标,包括公平、任何进程都不会饿死、有效地使用处理器时间和低开销。此外,调度功能可能需要为某些进程的启动或结束考虑不同的优先级和实时最后期限。
这些年以来,调度已经成为深入研究的焦点,并且已经实现了许多不同的算法。如今,调度研究的重点是开发多处理系统,特别是用于多线程的。
下面简介几种调度算法。
一、先来先服务和短作业(进程)优先调度算法
1.先来先服务调度算法
先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。
2.短作业(进程)优先调度算法
短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。
二、高优先权优先调度算法
1.优先权调度算法的类型
为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入了最高优先权优先(FPF)调度算法。此算法常被用于批处理系统中,作为作业调度算法,也作为多种 *** 作系统中的进程调度算法,还可用于实时系统中。当把该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程,这时,又可进一步把该算法分成如下两种。
1) 非抢占式优先权算法
在这种方式下,系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成;或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先权最高的进程。这种调度算法主要用于批处理系统中;也可用于某些对实时性要求不严的实时系统中。
2) 抢占式优先权调度算法
在这种方式下,系统同样是把处理机分配给优先权最高的进程,使之执行。但在其执行期间,只要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理机分配给新到的优先权最高的进程。因此,在采用这种调度算法时,是每当系统中出现一个新的就绪进程i 时,就将其优先权Pi与正在执行的进程j 的优先权Pj进行比较。如果Pi≤Pj,原进程Pj便继续执行;但如果是Pi>Pj,则立即停止Pj的执行,做进程切换,使i 进程投入执行。显然,这种抢占式的优先权调度算法能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。
2.高响应比优先调度算法
在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行得不到保证。如果我们能为每个作业引入前面所述的动态优先权,并使作业的优先级随着等待时间的增加而以速率a 提高,则长作业在等待一定的时间后,必然有机会分配到处理机。该优先权的变化规律可描述为:
由于等待时间与服务时间之和就是系统对该作业的响应时间,故该优先权又相当于响应比RP。据此,又可表示为:
由上式可以看出:
(1) 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业。
(2) 当要求服务的时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,因而它实现的是先来先服务。
(3) 对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可获得处理机。简言之,该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。因此,该算法实现了一种较好的折衷。当然,在利用该算法时,每要进行调度之前,都须先做响应比的计算,这会增加系统开销。
三、基于时间片的轮转调度算法
1.时间片轮转法
1) 基本原理
在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU 分配给队首进程,并令其执行一个时间片。时间片的大小从几ms 到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内响应所有用户的请求。
2.多级反馈队列调度算法
前面介绍的各种用作进程调度的算法都有一定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程,而且如果并未指明进程的长度,则短进程优先和基于进程长度的抢占式调度算法都将无法使用。而多级反馈队列调度算法则不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。在采用多级反馈队列调度算法的系统中,调度算法的实施过程如下所述。
(1) 应设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第一个队列的时间片长一倍,……,第i+1个队列的时间片要比第i个队列的时间片长一倍。
(2) 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列,……,如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n 队列便采取按时间片轮转的方式运行。
(3) 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程。
以上就是关于什么是调度算法全部的内容,包括:什么是调度算法、进程调度算法的国内外研究现状有哪些、 *** 作系统的调度算法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)