目录
3.3.1 进程调度的任务、机制和方式
1. 进程调度的任务
- 保存处理机的现场信息
- 按某种算法选取进程
- 把处理机分配给进程
2. 进程调度机制
- 排队器
- 分派器
- 上下文切换器
3. 进程调度的方式
1)非抢占方式(Nonpreemptive Mode)
一旦把处理机分配给某进程就让它一直运行下去,直至该进程完成或因某事件发生而被阻塞时,才把处理机分配给其它进程。
决不会因为时钟中断或任何其它原因去抢占当前正在运行进程的处理机。
2)抢占方式(Preemptive Mode)
抢占的原则:
- 优先权原则
- 短进程优先原则
- 时间片原则
3.3.2 轮转调度算法
1. 时间片轮转法(Round Robin,RR)
按照 FCFS 算法,将所有的就绪进程排成一个就绪队列,并设置每隔一定时间间隔产生一次中断。当时间片耗尽时,由计时器发出时钟中断请求,进程调度程序据此信号来停止当前进程的执行,并将其送往就绪队列的末尾。
激活系统中的进程调度程序:
- 将 CPU 分配给队首进程
- 当该进程的时间片耗尽或运行完毕时,系统将 CPU 分配给新的队首进程
这样就能保证就绪队列中的所有进程,在一给定的时间内,均能获得一个时间片的处理机执行时间。从而使系统在给定的时间内,响应所有用户的请求。
2. 时间片的设置
进程切换将会增加系统的额外开销。
- 时间片太小:频繁地执行进程调度和进程上下文的切换,增加了系统的开销
- 时间片太大:退化为 FCFS,无法满足短作业和交互式用户的需求
因此,时间片大小的确定应综合考虑系统的最大用户数、响应时间、系统效率等多种因素。
设置合理的时间片:能让大约 80% 的进程在一个时间片内完成。
3. 举例
进程名 | A | B | C | D | E | 平均 | |
到达时间 | 0 | 1 | 2 | 3 | 4 | ||
服务时间 | 4 | 3 | 4 | 2 | 4 | ||
RR q=1 | 完成时间 | 12 | 10 | 16 | 11 | 17 | |
周转时间 | 12 | 9 | 14 | 8 | 13 | 11.2 | |
带权周转时间 | 3 | 3 | 3.5 | 4 | 3.25 | 3.35 | |
RR q=4 | 完成时间 | 4 | 7 | 11 | 13 | 17 | |
周转时间 | 4 | 6 | 9 | 10 | 13 | 8.4 | |
带权周转时间 | 1 | 2 | 2.25 | 5 | 3.25 | 2.7 |
采用基于 RR 调度法,进程的平均周转时间和平均带权周转时间并不比采用 FCFS 和 SPF 算法小。除此之外,上图忽略了进程切换时的系统开销,而在实际操作系统中,这类额外开销是客观存在的。加上进程切换所需的系统开销时间,RR 算法的平均带权周转时间还会增加。
甘特图
在任一时间片初,
- 先让新到达的进程排到队尾
- 再让耗尽上一个时间片的进程排到队尾
蓝色指示队首
q=1
q=4
时间片选择得太长,每个进程都能在一个时间片内完成,此时 RR 算法便退化为 FCFS 算法。
4. 小结
RR 算法常用于分时系统及事务处理系统,合理的时间片大小将带来满意的响应时间。
通常,合理的时间片指,能让大约 80% 的进程在一个时间片内完成。
- 对于短的、计算型的进程较有利。
- 不适合于批处理系统的进程调度。
- 不利于 I/O 型的进程。
改进的方法之一,可以将 I/O 阻塞事件完成的进程单独组织一个就绪队列,该队列进程的时间片可以设置的小一些,且优先调度。
3.3.3 优先级调度算法
1. 优先级调度算法的类型
1)非抢占式优先级调度算法
一旦把处理机分配给 就绪队列中优先级最高的进程 就让它一直运行下去,直至该进程完成或因某事件发生而被阻塞时,才把处理机分配给其它进程。
2)抢占式优先级调度算法
把处理机分配给就绪队列中优先级最高的进程,使之执行。但在其执行期间,只要出现了一个优先级更高的进程,调度程序就将处理机分配给新到的优先级最高的进程。
Q:如何设定进程的优先级?
- 进程完成功能的重要性
- 进程完成功能的急迫性
- 进程对资源的占用程度。如:可以为短进程或短作业赋予较高的优先级。
2. 优先级的类型
1)静态优先级
静态优先级是在创建进程时确定的,在进程的整个运行期间保持不变。优先级是利用某一范围内的一个整数来表示的,例如 0~255 中的某一整数,又把该整数称为优先数。
确定进程优先级大小的依据有三个方面:
- 进程类型。通常系统进程的优先权高于一般用户进程的优先级。
- 进程对资源的需求。对资源要求少的进程应赋予较高的优先级。
- 用户要求。根据进程的紧迫程度及用户所付费用的多少确定优先级。
2)动态优先级
动态优先级是指在创建进程之初,先赋予其一个优先级,然后其值随进程的推进或随其等待时间的增加而改变,以便获得更好的调度性能。
3.3.4 多队列调度算法
- 该算法将系统中的进程就绪队列拆分为多个
- 将不同类型或性质的进程固定分配在对应的就绪队列
- 不同的就绪队列采用不同的调度算法
- 进程可以有不同的优先级,队列也可以有不同的优先级
3.3.5 多级反馈队列调度算法
1. 调度机制
1)设置多个就绪队列。
- 为各个队列赋予不同的优先级。
- 为各个队列设置不同长度的时间片。
第一个队列的优先级最高,第二个次之,其余队列的优先级逐个降低。在优先级愈高的队列中,其时间片就愈小。
2)每个队列都采用 FCFS 算法。当新进程进入内存后,首先将它放入第一队列的末尾,按 FCFS 原则排队等待调度。
- 当轮到该进程执行时,如它能在该时间片内完成,便可撤离系统;
- 如果它在一个时间片结束时尚未完成,调度程序便将其转入第二队列的末尾等待调度。
3)如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列,依次类推。
4)仅当第一队列空闲时,调度程序才调度第二队列中的进程运行。
如果处理机正在第 i 队列中为某进程服务时又有新进程进入任一优先级较高的队列,此时须立即把正在运行的进程放回到第 i 队列的末尾,而把处理机分配给新到的高优先级进程。
2. 调度算法的性能
该算法具有较好的性能,能较好地满足各种类型用户的需要。
1)终端型作业用户
交互型作业通常较小,能在第一队列规定的时间片内完成,可使终端型作业用户感到满意。
2)短批处理作业用户
对于普通的短作业,则可在第一队列中执行完成;对于稍长的短作业,则也可在第二、三队列中执行完成。周转时间都较短。
3)长批处理作业用户
对于长作业,它将依次在第 1,2, … ,n 个队列中运行,然后再按轮转方式运行,用户不必担心其作业长期得不到处理。