目录
1.First- Come, First-Served (FCFS) Scheduling
2.Shortest-Job-First (SJF) Scheduling
Determining Length of Next CPU Burst
3.Example of Shortest-remaining-time-first (最短剩余时间优先调度)
6.Multilevel Queue Scheduling(多级队列调度)
简介
经常以进程来说明: 进程调度 <==> CPU 调度
//让出CPU的具体实现
extern Queue ReadyQueue;
extern Queue DiskWaitQueue;
...
DiskWaitQueue.EnQueue(pCur);
Dispatch();
...
Dispatch()
{
pNew = PickNext(ReadyQueue);
//该函数就是CPU调度,调度就是下一步该选择哪一个进程或线程来执行(分配CPU资源)
Switch(pCur,pNew);
}
//进程和线程都可能是调度单位,统称为任务
那么什么是好的调度(举个银行的例子)?
从银行的运转来看
希望柜员越忙越好:CPU效率高
希望接待的客户越多越好:吞吐率高
从客户的角度来看
尽快响应:响应时间(从发出请求到响应)短
尽快结束任务:周转时间(从任务进入到任务结束)短
1.First- Come, First-Served (FCFS) Scheduling
先到先服务调度 调度的顺序就是任务到达就绪队列的顺序
采用FCFS策略的平均等待时间通常不是最小,且如果进程CPU区间时间变化很大,平均等待时间也会变化很大。
Convoy effect (护航效果 )- short process behind long process
护航效应:所有其他进程都等待一个大进程释放CPU。
与可能允许较短进程先行相比,护航效应会导致CPU和设备的使用率变得很低。
特点:①非抢占,“公平”②短作业等待时间长③不适合交互系统
假定任务的到达顺序为: P1,P2,P3,P4,P5
任务 | CPU区间 |
---|---|
P1 | 10 |
P2 | 29 |
P3 | 3 |
P4 | 7 |
P5 | 12 |
2.Shortest-Job-First (SJF) Scheduling
Associate with each process the length of its next CPU burst (CPU区间段)
实际上是最短下一个CPU区间的算法,因为调度检查进程的下一个CPU区间的长度,而不是其总长度。若俩进程具有相同的长度,使用FCFS调度来处理。
SJF是最佳的:对于给定的一组进程,SJF算法的平均等待时间最小。
同样还是上面那个例子
SJF可以保证最小的平均等待时间
Determining Length of Next CPU Burst
Can only estimate the length,Can be done by using the length of previous CPU bursts, using exponential averaging,nCommonly, α set to ½。
3.Example of Shortest-remaining-time-first (最短剩余时间优先调度)
抢占显然具有优点
4.Priority Scheduling
实例1:I/O bound任务应获得更大的优先权,使得I/O尽量忙,并和CPU并行工作。
实例2:定义多个优先队列: 前台任务、后台任务。只有高优先级队列为空时才调度其他任务。
ProcessA a | arri Burst TimeT | Priority |
---|---|---|
P1 | 10 | 3 |
P2 | 1 | 1 |
P3 | 2 | 4 |
P4 | 1 | 6 |
P5 | 5 | 2 |
Average waiting time = (0+1+6+16+18)/ 5=8.2 ms
5.适合交互式的调度: Round Robin (RR)
平均等待时间: (0+32+20+23+40)/5 = 23
RR优点: 定时有响应,等待时间较短
RR缺点: 上下文切换次数较多
RR中时间片的选择
时间片太大:响应时间太长,如时间片500ms ´ 10任务,响应需要5秒。
时间片太小:吞吐量变小,周转时间变长。如时间片20ms,上下文切换5ms,20%的切换代价。
6.Multilevel Queue Scheduling(多级队列调度)
通常在使用多级队列调度算法时,进程进入系统时被永久地分配到一个队列。例如,如果前台进程和后台进程分别有独立队列,进程并不从一个队列转移到另一个队列,这是因为进程并不改变前台或后台性质。这种设置的优点是低调度开销,缺点是不够灵活。
7.CPU调度的总结
1.并发能提高效率 Þ 并发的核心是进程能让出CPU
2.进程让出CPU Þ 下一个进程使用CPU Þ 这个选择就是调度
3.进程、线程(内核级、用户级)都能调度 Þ 任务调度
4.调度任务分类: 交互式,批处理
5.调度时机分类: 抢占式、非抢占式
6.CPU调度算法: FCFS, SJF, Priority(批处理); RR(交互式)
7.CPU调度算法: 多级队列, 多级反馈队列(混合)