《现代操作系统—中文第三版》读书笔记之——调度算法

来源:互联网 发布:php重载 编辑:程序博客网 时间:2024/05/29 02:08

 2.4调度

2.4.1调度介绍

在单cup计算机系统处理多道程序时,通常就会有多个进程或线程同时竞争cpu。只要有两个或者更多的进程处于就绪状态,这种竞争就会发生。此时必须选择下一个要运行的进程占领cpu。在操作系统中,完成选择工作的这一部分称为调度程序(scheduler),该程序使用的算法称为调度算法。
2.4.2调度算法分类
不同的环境需要不同的调度算法,这里划分三种环境:
1)批处理。
2)交互式。
3)实时。
1.非抢占式算法:挑选一个进程,然后让该进程运行直至被阻塞,或者让该进程自动释放CPU。即使该进程运行了很长一段时间,也不会被强制挂起。在批处理系统中该算法广为适用,减少了进程的切换,改善了性能。
2.强占式算法:挑选一个进程,并且让该进程运行某个固定时段的最大值;如果在该时段结束时该进程仍在运行,它就被挂起,由调度程序挑选另一个进程运行。交互式系统中普遍适用。

2.4.3批处理系统中的调度算法

1.先来先服务(FCFS)

如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列的后面,那么先来先服务(FCFS: first come first service)总是把当前处于就绪队列之首的那个进程调度到运行状态。

也就说,它只考虑进程进入就绪队列的先后,而不考虑它的下一个CPU周期的长短及其他因素。FCFS算法简单易行,但性能却不大好。比较有利于长作业,而不利于短作业。有利于CPU繁忙的作业,而不利于I/O繁忙的作业。

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

又称为“短进程优先”SPN(Shortest Process Next);这是对FCFS算法的改进,其目标是减少平均周转时间。对预计执行时间短的作业(进程)优先分派处理机。通常后来的短作业不抢先正在执行的作业。
(1) 优点:
比FCFS改善平均周转时间和平均带权周转时间,缩短作业的等待时间;提高系统的吞吐量;
(2) 缺点:
对长作业非常不利,可能长时间得不到执行;未能依据作业的紧迫程度来划分执行的优先级;难以准确估计作业(进程)的执行时间,从而影响调度性能。

3. SJF的变型

最短剩余时间优先SRT(Shortest Remaining Time)
允许比当前进程剩余时间更短的进程来抢占,属于抢占式算法。
最高响应比优先HRRN(Highest Response Ratio Next)
响应比R = (等待时间 + 要求执行时间) / 要求执行时间,是FCFS和SJF的折衷

2.4.4交互式系统中的调度算法

1.轮转调度

将系统中所有的就绪进程按照FCFS原则,排成一个队列。每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。在一个时间片结束时,发生中断。调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。进程可以未使用完一个时间片,就出让CPU(如阻塞)。就绪进程的数目:数目越多,时间片越小
系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使响应时间,平均周转时间和平均带权周转时间延长。

2.多级队列

设置多个就绪队列,分别赋予不同的优先级,如逐级降低,队列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完成时,提高优先级;时间片用完时,降低优先级。

3.优先级调度

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






 

 

 

0 0
原创粉丝点击