1.进程调度的目标
-
概述上来讲:
(1)在合适的时候以一定的策略选择一个就绪进程运行
(2)调度时机?
(3)调度策略?
(3)调度目标? -
进程调度的目标
(1)相应速度尽可能快
(2)进程处理的时间尽可能短
(3)系统吞吐量尽可能大,吞吐量:单位时间内运行更多的进程,(3)和(4)的本质是一样的
(4)资源利用率尽可能高
(5)对所有进程要公平
(6)避免饥饿,饥饿:进程长时间得不到资源
(7)避免死锁
上述的部分原则之间存在自相矛盾,eg:
(1)的结果会导致:对进程更多的调度,会额外的消耗更多的CPU时间,所以CPU有效的工作时间会降低,导致每个进程的处理时间会延长,导致(2)的时间变长;
(1)的结果会导致:CPU更频繁的切换,调度要更频繁的进行,造成CPU的有效工作时间降低,导致单位时间内运行的进程更少,导致(3)的系统吞吐量降低 -
对于进程调度的目标而言,两个量化的衡量指标
(1)周转时间和平均周转时间
(2)带权周转时间和平均带权周转时间
2.典型的调度算法
- 有以下几种:
(1)先来先服务调度(First Come First Serve)
(2)短作业优先调度算法(Short Job First)
(3)响应比高者优先调度算法
(4)优先数调度算法
(5)循环轮转调度法(ROUND-ROBIN)
(6)可变时间片轮转调度法
(7)多重时间片循环调度法 - (1)先来先服务调度(First Come First Serve)
算法:
按照作业进入系统的时间先后来挑选作业。
先进入系统的作业优先被运行
特点:
容易实现,效率不高;
只考虑作业的等候时间,没考虑到运行时间的长短。
所以一个晚来的,但是很短的作业可能需要等待很长时间才能被运行,因为本算法不利用短作业
- (2)短作业优先调度算法(Short Job First)
算法:
参考运行时间,选取运行时间最短的作业投入运行
特点:
易于实现,效率不高;
忽视了作业等待时间,一个早来但是很长的作业将会在很长时间得不到调度,易出现资源饥饿现象
- (3)响应比高者优先调度算法,比(1)(2)好
响应比定义:
作业的响应时间和与运行时间的比值
响应比=响应时间/运行时间=(等待时间+运行时间)/运行时间=1+等待时间/运行时间
算法:
计算每个作业的响应比,选择响应比最高的作业优先投入运行
特点:
响应比==1+等待时间/运行时间
若作业等待时间相同,则运行时间越短的作业,其响应比越高,so:越容易被调度,因而:有利于短作业;
若作业运行时间相同,则等待时间越长的作业,其响应比越高,so:越容易被调度,因而:有利于等候长的作业;
对于运行时间长的作业,其优先级可以随等待时间的增加而提高,档期等待足够久的时候,也有可能获取CPU
- (4)优先数调度算法
算法:
根据进程的优先数,把CPU分配给最高的进程
进程优先数=静态优先数+动态优先数
静态优先数:在进程创建时候确定,在整个进程运行期间不再改变;
动态优先数:动态优先数在进程运行期间可以改变;
静态优先数的确定:
基于进程所需的资源多少
基于程序运行时间的长短
基于进程的类型:IO/CPU,前台/后台/,核心/用于
动态优先数的确定:
当使用CPU超过一定时长时;so,可以减少优先数,让别的进程被调度
当进程I/O操作时;
当进程等待超过一定时长时;so,可以增加优先数,让其快点被调度
- (5)循环轮转调度法(ROUND-ROBIN):左轮手枪
概念:
把所有就绪进程按照先进显出的原则排成队列。
新来进程追加到队列末尾。
进程以时间片q为单位轮流使用CPU。刚刚运行一个时间片的进程排到队列末尾,等待下一轮运行。
队列逻辑上是环形的。
如下图所示:
优点:
公平:每个就绪进程有平等机会获得CPU
交互:每个进程等待(N-1)*q的时间就可以重新获得CPU
时间片q的大小
(1)若q太大
交互性差,甚至退化到FCFS调度算法
(2)若q太小
进程切换屏藩,系统开销增加
改进:
时间片的的大小可变;
组织多个就绪队列;