问题:如何开发调度策略
第一类是运行最短的工作,从而优化周转时间。第二类是交替运行所有工作,从而优化响应时间。
1、任务T周转时间是:T周转时间= T完成时间−T到达时间
假设所有的任务在同一时间到达,那么T到达时间= 0,因此T周转时间= T完成时间
2、先进先出(FIFO):先进先出(First In First Out或FIFO)调度,有时候也称为先到先服务(First Come First Served 或FCFS)。
3、最短任务优先:先运行最短的任务,然后是次短的任务。
非抢占式调度:系统会将每项工作做完,再考虑是否运行新工作。
抢占式调度:停止一个进程以运行另一个进程。
4、最短完成时间优先(Shortest Time-to-Completion First,STCF)或抢占式最短作业优先(Preemptive Shortest Job First ,PSJF)调度程序:每当新工作进入系统时,它就会确定剩余工作和新工作中,谁的剩余时间最少,然后调度该工作。
5、响应时间定义为从任务到达系统到首次运行的时间。
T响应时间= T首次运行−T到达时间
6、时间片轮转:RR(Round-Robin)轮转在一个时间片(time slice,有时称为调度量子,scheduling quantum)内运行一个工作,然后切换到运行队列中的下一个任务,而不是运行一个任务直到结束。它反复执行,直到所有任务完成。
时间片长度必须是时钟中断周期的倍数。
时间片太短是有问题的:突然上下文切换的成本将影响整体性能。系统设计者需要权衡时间片的长度,使其足够长,以便摊销(amortize)上下文切换成本,而又不会使系统不及时响应。
7、摊销技术:果时间片设置为10ms,并且上下文切换时间为1ms,那么浪费大约10%的时间用于上下文切换。如果要摊销这个成本,可以把时间片增加到100ms。在这种情况下,不到1%的时间用于上下文切换,因此时间片带来的成本就被摊销了。
8、重叠: 一种常见的方法是将A的每个10ms的子工作视为一项独立的工作。因此,当系统启动时,它的选择是调度10ms的A,还是50ms的B。对于STCF,选择是明确的:选择较短的一个,在这种情况下是A。然后,A的工作已完成,只剩下B,并开始运行。然后提交A的一个新子工作,它抢占B并运行10ms,这样做可以实现重叠(overlap),一个进程在等待另一个进程的I/O完成时使用CPU,系统因此得到更好的利用