CPU调度
CPU调度是多道程序操作系统的基础。通过在进程之间切换CPU,操作系统可以提高计算机的吞吐率。
每当CPU空闲时,操作系统必须按照一定的策略从就绪队列当中选择一个进程来执行。
调度的对象:进程或线程。其方式与原则是一样的。所以经常以进程来说明。
那么说CPU调度<=>进程调度
调度算法的设计目标
面对客户:调度算法的设计目标应该是用户满意。
面对进程:CPU调度的目标应该是进程满意。
而让进程满意的关键就是时间,我们要做的事:
- 尽快结束任务:周转时间(从任务进入到任务 )短
- 用户操作尽快响应:响应时间(从操作发生到响应)短
- 系统内耗时间少:吞吐量(完成的任务量)大
一个系统中存在多个任务,会存在调度的矛盾。
吞吐量和响应时间有矛盾
响应时间小=>切换次数多=>系统内耗大=>吞吐量小前台任务和后台任务的关注点不同
前台任务关注响应时间,后台任务关注周转时间IO约束型程序和CPU约束型程序各有特点
CPU约束型程序以计算为主,CPU区间会较多,还会有少量长的CPU区间。如gcc。
I/O约束型程序以I/O为主,但配合I/O处理会有大量短的CPU区间。如word。
所以调度算法的设计需要折中,综合。
各种调度算法
(1)First Come,First Served(FCFS)先来先服务
平均周转时间:
(10+39+42+49+61)/5=40.2
(2)SJF短作业优先
平均周转时间:
(10+13+42+49+61)/5=35
短作业优先:如果存在i < j,而pi>pj,交换pi,pj。
短作业优先的周转时间是最小的。
如果调度结果为p1,p2,…,pn,则周转时间为:
p1+(p1+p2)+(p1+p2+p3)+…=∑(n+1-i)pi=n*