CPU调度策略
作者:互联网
目录
cpu调度与进程调度
- 调度指的是从就绪队列中找一个任务来执行,虽然一般认为线程是调度的最小单位,进程是资源分配的基本单位,从这里边也可以看成,调度的含义,其实就是切换指令执行序列,从一个线程到另一个线程,或从一个进程到另一个进程。
示例:FIFO与Priority
- 一个简单的调度思路是,谁先进入就绪状态,就先调度谁,但是这样可能一些很简单的任务需要排队很久才能调度,于是还有一种思路是给各个任务分优先级,比如让任务短的进程可以适当优先。
响应时间,周转时间,等待时间
- 响应时间:从进程就绪到第一次获得CPU响应的时间。
- 周转时间:从进程就绪到执行完成花费的总时间。
- 等待时间:进程处于就绪态等待CPU所花费的总时间。
常见基本调度算法
FCFS先来先服务
- 如上图所示,按任务到达顺序依次调度,则平均周转时间计算如下:
- 虽然上例中5个任务到达的时间不同,但是当调度的时候,它们已经都在就绪队列里了,所以计算平均周转时间的时候,是从开始调度的时刻为起点,然后累加每个任务执行完毕后的时刻点,再除以任务总数得到的。也可以认为某个时刻的周转时间就是等待时间加运行时间。
短作业优先
- 将就绪队列中的作业按照执行时间排序,将短作业先执行,这样每个作业的周转时间都会变短(除了最后一个作业),因此平均周转时间也会变短。
- 短作业优先调度的平均周转时间是最短的。
按时间片轮转调度,Round Robin(RR)
- 如上例中,短作业优先虽然平均周转时间短,但是具体到某一个作业,它的响应时间可能非常长,比如作业P2,响应时间32,这可能是不可接受的,因此可以将每个任务的执行时间分成若干个时间片来做。
优先级调度
- 短作业优先减少了平均周转时间,时间片轮转减少了响应时间,但是比如Word很关心响应时间,而gcc更关心周转时间,如果两类任务同时存在怎么办?
- 我们通常把word这种称为前台任务,而gcc这种归类于后台任务,一个直观想法是基于前台和后台任务定义两种就绪队列,前台就绪队列用时间片轮转调度,后台就绪队列用短作业优先调度。同时,规定前台任务优先级高于后台任务,即只有前台任务全部执行完毕才调度后台任务。
- 但是上述的前台任务优先级高于后台任务的这种绝对优先级调度会产生问题,如果一直不断地有前台任务,那么后台任务可能永远都没有执行的机会,因此优先级不能是这样固定的。
- 一个综合的思路是,在前台任务队列和后台任务队列内部都使用时间片轮转调度,但是在此之上要给前台任务和后台任务赋予动态的优先级,设置优先级的过程中要考虑短作业先做,前台任务先做。即轮转调度为核心,并巧妙设计优先级。
- 此外还有很多问题,比如我们并不知道哪些是前台哪些是后台任务,因此调度算法要有一定的学习能力。
标签:优先级,策略,调度,任务,时间,前台,后台任务,CPU 来源: https://www.cnblogs.com/chkplusplus/p/16338994.html