目录
一、调度类型与准则
(一) 调度类型
1. 高级调度 (作业调度)
负责在一个作业执行完成、退出系统后,在处于后备状态的作业中选择一个或多个作业,为其分配系统资源并创建进程,然后调到就绪队列,等待分配处理机。
2. 中级调度 (对换程序)
负责将暂时不能执行的进程调到外存中挂起,使其不再占用内存资源空间,当这些进程再次具有执行条件并且内存有空闲时,再把它们重新调回内存中,使其处于就绪或阻塞状态。
3. 低级调度 (进程调度)
负责按照进程调度算法分配处理机给处于就绪队列的进程,进程调度的频率非常高,也是操作系统最基本的调度。
(1) 进程调度方式
不可剥夺方式 (非抢占方式):进程调度采用这种方式时,处理机被分配给某个进程执行后,该进程占有的处理机绝不允许被其它的进程强占。
可剥夺方式 (抢占方式):进程调度采用这种方式时,允许进程按照某种原则抢占其它进程占有的处理机,被打断的进程调到就绪队列等待。
(2) 进程调度时机
进程调度在进程退出和进程阻塞时肯定会发生,新进程创建、中断发生和时钟中断时也经常发生。
(二) 调度的性能准则
1. 面向用户的准则
(1) 响应时间要快
响应时间指的是用户提交请求到系统发出响应的时间间隔。
(2) 周转时间要短
周转时间指的是用户提交一个作业进入操作系统到作业执行完成退出操作系统的时间间隔,周转时间 = 等待时间 + 执行时间 = 完成时间 - 到达时间。但是对于操作系统来说,平均周转时间才是提高系统资源利用率的指标。
平均周转时间 T {T} T = 1 n \frac{1}{n} n1 ∑ i = 1 n \sum\limits_{i=1}^n i=1∑n T i T_{i} Ti , n 是作业个数, T i T_{i} Ti 是每一个作业的周转时间。
为进一步衡量一个作业在处理机上的等待时间和执行时间,定义了带权周转时间 W i {W_{i}} Wi ,带权周转时间 = 周转时间 / 执行时间, 平均带权周转时间 W {W} W = 1 n \frac{1}{n} n1 ∑ i = 1 n \sum\limits_{i=1}^n i=1∑n W i W_{i} Wi 。
(3) 优先权原则
按照进程的大小、等待时间、紧急程度等诸多因素给进程规定优先级,再根据进程的优先级高低来调度。
(4) 截止时间要有保证
截止时间分为截止开始时间和截止结束时间,是衡量实时操作系统性能的重要指标。
2. 面向系统的准则
(1) 系统吞吐量要高
系统吞吐量就是单位时间内系统执行完成的作业数,是评估批处理系统的重要指标。
(2) 处理机的利用率要高
处理机的高效利用是设计调度算法的关键,也是衡量整个操作系统性能的重要指标。
(3) 各种资源要平衡利用
优秀的调度算法不仅要高效使用处理机,也要合理利用其它的系统资源,比如内、外存,输入和输出设备等。
(4) 公平原则
在用户或操作系统没有特殊要求的情况下,应该公平对待每一个进程,避免进程进入“死等”状态。
二、调度算法
1. 先来先服务算法(FCFS)
先来先服务算法用于作业调度和进程调度,按照作业或进程到达的先后顺序进行调度。作业调度采用该算法时,调度程序从后备队列中选择最先进入的作业,调入内存并为其新建进程,再调到就绪队列等待。进程调度采用该算法时,选择最先进入就绪队列的进程,分配处理机执行该进程,直到执行完成或者遇到I/O事件进入阻塞队列。
以下五个进程采用先来先服务调度算法:
进程名 | 到达时间 | 运行时间 | 完成时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|---|
A | 0 | 3 | 3 | 3 | 1 |
B | 1 | 5 | 8 | 7 | 1.4 |
C | 2 | 2 | 10 | 8 | 4 |
D | 3 | 4 | 14 | 11 | 2.75 |
E | 4 | 2 | 16 | 12 | 6 |
平均周转时间 | 平均带权周转时间 |
---|---|
8.2 | 3.03 |
2. 时间片轮转调度算法(RR)
为就绪队列中的每个进程分配一个时间片,时间片是一个进程能够在处理机执行的最大时间,时间片用完时,系统时钟会发出中断来暂停当前执行的进程,该进程会被调到就绪队列队末等待下一次调度。
合理选择时间片的长度是该算法设计的关键,如果时间片太长,许多很短的进程就能在一个时间片内完成,该算法就退化成了先到先服务算法了,时间太短,导致一次用户交互都会执行很多次系统调度,会增加系统的响应时间。
3. 短作业(短进程)优先调度算法(SJF/SPF)
短作业(进程)优先就是在作业处在后备队列(进程处于就绪队列)时,对作业的整个执行时间(进程在处理机上的执行时间)进行预估,优先调度时间最短的作业(进程)。
以下五个进程在不可剥夺的调度方式下,采用短进程优先调度算法:
进程名 | 到达时间 | 运行时间 | 完成时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|---|
A | 0 | 3 | 3 | 3 | 1 |
B | 1 | 5 | 16 | 15 | 3 |
C | 2 | 2 | 5 | 3 | 1.5 |
D | 3 | 4 | 11 | 8 | 2 |
E | 4 | 2 | 7 | 3 | 1.5 |
平均周转时间 | 平均带权周转时间 |
---|---|
6.4 | 1.8 |
4. 优先权调度算法(Priority)
优先权调度算法用于作业调度和进程调度,根据作业或进程的优先权高低选择进程调度,根据系统的进程调度方式可分为不可剥夺和可剥夺两种。
- 使用不可剥夺方式时,优先权最高的进程分配到处理机就会一直运行到结束或者遇到某事件释放处理机,不会因为出现更高优先权的进程而停止。
- 使用可剥夺方式时,调度程序先会把处理机分配给当前优先权最高的进程运行,一旦出现比当前正在执行进程的优先权更高的进程,当前运行的进程就会被停止,调到就绪队列末,处理机被分配给新出现的优先权更高的进程执行,直到拥有更高优先权的进程出现剥夺当前进程的执行。
优先权调度算法的关键在于优先权的决定方式,优先权分为静态优先权和动态优先权两种。
- 静态优先权在进程创建时就根据用户或者系统的要求决定了,在进程运行结束之前都不会改变。
- 动态优先权会在进程的执行中发生改变,等待时间和处理机的服务时间会影响进程的动态优先权,一个进程的等待时间增加时,其优先权也会升高;当一个进程长时间占有处理机时,其优先权也会随之降低。