在了解底层机制后,现在开始高层策略。

文章中对工作负载有简单的假设:1.每个job有相同运行时间,2.所有jobs同时到达,3.job一旦开始则run到结束,4.所有job使用CPU,5.每个作业运行时间已知。

调度指标:一、turnaround time(性能指标,关注的是job完成时间)。性能往往和fairness不一致。

FIFO:简单,容易实现,但放宽假设1后,turnaround time变长。

SJF:得到最短turnaround time,但放宽假设2,时间又变长了。

STCF:为了解决SJF的问题,同时放宽假设3,(jobs开始后必须完成),实施抢占式调度。

二、response time。以上调度能满足batch computing systems,但用户要求系统提供交互,则产生这个指标。

Round Robin(time-slicing):其中,时间切片必须是定时器中断周期的整数倍。切的太细会是context switching开销过大,稍微长一点来摊销切换成本。

值得注意的是:context switching的成本不仅来自保存和恢复寄存器的OS操作,当程序运行时,它们在CPU缓存,TLB,branch predictors和其他on-chip hardware上构建大量状态,切换job会flush状态,引入新状态,这才是最重开销。

三、合并I/O:进程发出I/O后被阻塞,完成后发出中断,转为就绪状态。提高资源利用率。