- 对于不同的需求,会有不同的CPU调度策略。
L14 CPU调度策略
调度策略的要求
对于不同的需求,会有不同的调度策略:
- 为了尽快结束任务,就要让周转时间短,比如完成一个编译任务;
- 为了让用户操作尽快响应,就要让响应时间短,比如用户在使用 word 打字;
- 还要让系统的内耗时间少,系统的吞吐量大。
对于一台计算机来说,并不是只处理单一的任务,比如只处理要求周转时间短的任务(后台任务)或者只处理要求响应时间短的任务(前台任务),所以在处理不同类型的任务时,就会有矛盾,比如为了让响应时间短,那么 CPU 就需要频繁地切换进程,导致切换次数多,系统的内耗就大,最终导致吞吐量小,后台单位时间内完成的任务量就小,就会产生矛盾,所以进程的调度策略需要折中综合地考虑。
★前台任务和后台任务相比较,前台任务的优先级要高于后台任务,这是因为:
- 前台任务主要是涉及 I/O 操作的进程,即是用户和计算机交互的地方,为了让用户的体验感好,理应将前台任务的优先级设高。
- 前台任务相较于后台任务来说,CPU 的区间长度要更短,这就意味着,可以先执行前台任务,由于前台任务使用 CPU 的时间短,那在前台任务使用完 CPU 后,就可以去使用 I/O 设备,这时后台任务再来使用 CPU,就会形成前台任务使用 I/O,后台任务并行使用 CPU 的场景,效率比较高;反之,如果先让后台任务使用 CPU ,由于后台任务使用 CPU 的时间长,前台任务就要等待比较长的时间,陷入空转状态,用户体验感不好,效率也不高。
各种CPU调度算法
FCFS算法
- FCFS(First Come First Served,先来先服务)。
SJF算法
SJF(Short Job First,短作业优先)。
短作业优先算法是相对来说平均周转时间比较小的算法。
★RR时间片轮转调度算法
- 虽然 SJF 算法是周转时间比较小的算法,但是没有考虑到响应时间,所以又提出了 RR(Round-Robin)时间片轮转调度算法,时间片越小,响应时间就越短。
★优先级算法
实际的操作系统中,应该既考虑到要让周转时间尽量小,也要考虑到要让响应时间尽量小,所以可以将 SJF 算法和 RR时间片轮转调度算法综合考虑,就提出了优先级算法,前台任务用RR时间片轮转调度算法,后台任务用 SJF 算法,并且前台任务和后台任务之间用优先级进行调度。
为了兼顾前台任务和后台任务,不应该只有前台任务没有时才调度后台任务,否则如果一直有前台任务,那后台任务将一直无法执行,因此应该动态改变后台任务的优先级。
但当动态升高后台任务的优先级后,由于后台任务用 SJF 算法执行,而后台任务一般是 CPU 的区间长度较长的任务,所以会导致前台的响应时间变长,因此不管是前台任务还是后台任务,都应该使用时间片。
★最终得到结论:应该以RR时间片轮转调度算法为核心,并在此基础上引入优先级的概念(要能够考虑到短作业优先,还要能够考虑到前台任务优先)。