CPU调度策略笔记
FIFO:先入先处理,是公平、简单、有效的方法。
但如果一个进程所需要的时间很少,在单纯的先入先出场景下就需要等待很长的时间,如果这个进程是负责对用户展示的,那么用户的使用体验就会很差
面对进程:CPU调度的目标应该是,
- 任务尽快结束(平均周转时间)
- 响应时间尽量短
- 系统开销尽量小。
这里平均周转时间是指每个进程结束的时间的平均。
但实际上系统开销和响应时间是有矛盾的。响应快必然需要更多的切换次数,带来更大的开销。
而前台任务关注响应时间,后台任务关注周转时间(平均周转时间少)。响应时间短,必然使后台任务的执行时间减少。
IO密集和CPU密集(IO约束,CPU约束)
- IO密集:IO的执行频繁,CPU执行计算的时间片普遍很短。
- CPU密集: IO不频繁,CPU计算的时间较长
实际上,我们应该先优先执行IO约束任务,这样在IO的时间里可以让CPU切换到 CPU约束任务。另外,通常IO密集任务也是前台任务,应该有更快的响应速度。
常见CPU调度算法:
- First come, first served,先来先服务。
- SJF, 短作业优先。有最小的平均周转时间。但如果用户操作的时间比较久,那用户的响应就会很慢。
- RR,为了保证SJF下的用户响应,采用分时间片轮转调度。时间片越小,响应越快,但开销越大。
问题:Word和GCC同时存在,前者关心响应时间,后者关注周转时间,如何调度?
需要引入优先级调度。但如果死板的执行优先级调度,就会有任务一直无法分配执行。
朴素想法: 动态提高优先级,可以解决有任务饥饿的情况,但如果有重负担任务的优先级被提高,响应时间无法保证。而前后台任务都用时间片,就退化成了RR。