
在上一节中,我们讨论了CPU调度以及有关CPU调度的一些基本内容. 在本节中,我们详细讨论了各种CPU调度算法的概念和核心过程.
1. 先到先得(FCFS)
是排在最前面并且先服务的调度算法. 无论哪个任务先出现,先执行任务.

如上所述,周转时间=任务结束时间-任务到达时间,因此,我们计算了上述四个任务的平均周转时间. 进程A的到达时间为0,进程B的到达时间为1,进程C的到达时间为2,进程D的到达时间为3. 因此,根据FCFS调度算法,我们调度A,B,C,D.

四个任务的平均周转时间=(5-0)+(65-1)+(165-2)+(175-3)/ 4 = 101.

因此,由于系统中可能有大量的简短任务,因此稍后输入的那些简短任务必须等待大量任务执行后,CPU才能处理这些简短任务. 在这种情况下,即使许多短任务的服务时间较短,其周转时间也相对较长. 我们可以尝试提前执行短期任务,提前执行短期任务,并减少以短期任务为主要任务的系统的平均周转时间. 由此,我们生成了一个简短的作业优先级CPU调度算法.
2. SJF(短期优先,短期优先)
这也非常简单,即首先安排服务时间最短的任务. 以上四个过程.

进程A的服务时间为5,进程B的服务时间为60任务调度算法,进程C的服务时间为100,进程D的服务时间为10. 因此,根据简短的CPU调度算法工作优先级,我们依次安排A,D,B,C.

因此,这四个任务的平均周转时间=(5-0)+(15-3)+(75-1)+(175-2)/ 4 = 66.

很明显,在以短作业为优先级的系统中,短作业优先调度算法的平均周转时间比先来先服务调度算法要短.
现在问题再次出现. 如果任务C需要紧急响应(例如Word文档任务),则它必须快速响应用户的键盘输入请求,这要求其响应时间要短. 显然,上面的SJF调度策略没有考虑响应时间的问题,因此任务C只是很短的周转时间,而下一个响应时间更长(您必须等待任务A,D和B完成在回应C之前.

因此,我们考虑了以时间片轮换的方式进行调度.
3.RR算法(按时间片循环调度)
以上述四个过程为例.


按时间片旋转的调度算法是设置一个时间片,例如10个CPU时间,然后不断地在A,B,C和D的四个进程之间切换,每个进程在10时刻执行. 达到该值时,它将切换到下一个进程执行时间10,直到所有执行完成.

为每个进程分配10个CPU时间,并轮流安排执行时间,以使每个进程的响应时间变短.
如果时间片设置太大,则响应时间将太长. 如果时间片设置太小,则整个系统都在不断切换过程任务调度算法,系统的大部分时间都浪费在切换过程上,从而导致系统吞吐量很小,在考虑了折衷之后,时间片设置为10 〜100ms,切换时间为0.1〜1ms.
说到这,SJF算法与系统的平均周转时间有关,而RR算法与系统的响应时间有关,但是如果系统需要同时具有较小的响应时间和周转时间短吗?
例如,word非常关心响应时间,而javac则更着重于周转时间来编译Java程序. 如果同时存在两种类型的任务该怎么办?
也就是说,前台中的任务更加关注响应时间,因为前台中的任务直接与用户进行交互,并且需要快速响应用户的请求. 后台任务更加关注周转时间,因此该任务需要快速结束.
一个非常直观的想法,为前台任务和后台任务定义两个队列. 前景使用RR算法,背景使用SJF算法. 仅当前台任务不可用时才安排后台任务.


但这会引起问题. 如果总是有前台任务,那么将永远不会安排后台任务. 这是我想告诉你的一个有趣的小故事: 1973年,当一名工人去麻省理工学院关闭IBM7094计算机时,他发现一个进程是在1967年提交的,但尚未运行.
这时,我们可以使后台任务优先级动态增加,但是一旦执行了后台任务(由SJF安排),前台任务的响应时间就必须变大.
如果我们将时间片同时用于前台任务和后台任务,那么它会退化为RR算法.
因此,仍有许多问题等待我们发现并找到解决问题的方法.
如果我们知道什么是前台任务,哪些是后台任务,那么前台任务在没有后台任务的情况下是否有效?后台任务没有前台任务就可以工作吗?如何优先考虑SJF中的短期工作?如何判断作业的长度?
直到现在,这些问题仍在疯狂地进行讨论和研究. 有兴趣进一步了解此方面的人员可以阅读相关文献或阅读Linux中以下CPU调度算法的源代码. 一个CPU调度算法必须考虑很多事情,我们可以看到我们的操作系统确实是人类的伟大发明.

本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-257471-1.html
福建有多少导弹对着台湾你知道吗
希望抓住机会