- 首先了解什么是调度?
调度实质是一种资源分配,调度程序从内存中选择一个可执行的进程,为之分配CPU。
- 调度的层次?
作业从进入系统到后备队列,再从运行到结束退出系统为止,期间经过不同级别的调度:
- 高级调度
高级调度又长程调度或作业调度。是将在外存上处于后备队列中的作业调入内存,为其创建进程、分配资源、放入就绪队列。(外存 ---> 内存)
- 中级调度
中级调度又称内存调度。是将不能运行的进程调到外存等待(挂起状态),当其具备影响条件且内存有空闲时,再调内存。(提高内存利用率,系统吞吐量)
- 低级调度
低级调度又称进程调度。是为就绪队列中的进程分配处理机。(内存 ---> CPU)
- 调度算法中涉及概念:
- 周转时间
周转时间指作业被提交给系统开始,到作业完成为止的这段时间间隔。
周转时间Ti = 完成时间 - 到达时间
- 平均周转时间
每个用户希望自己作业周转时间最短,而对于系统管理者则希望平均周转时间最短。对应n个作业,及其对应作业周转时间Ti,可得平均周转时间:
![]()
- 带权周转时间
带权周转时间,即作业周转时间Ti与系统为它提供服务时间Ts之比:
- 平均带权周转时间
对与n个作业,每个作业带权周转时间为Wi,则平均带权周转时间
:
- CPU利用率
CPU利用率,即作业执行时间Ci 与 周转时间Ti的比率。即:
- 响应比
响应比,即作业响应时间(等待时间+运行时间)与运行时间之比:
常用调度算法:
- 先来先服务调度(FCFS)
特点:
- 按作业(进程)先后次序进行调度;
- 非抢占方式。(进程一旦执行,一直到运行结束或阻塞时,才将其退出,处理机分配给其他进程)
- 可以采用队列来实现。
按FSFS执行,平均作业周转时间较长,不作为主调策略,但适合长作业。
- 短作业优先调度(SJF)
特点:
- 作业计算时间越短,优先级越高;
- 可采用抢占式或非抢占式;
- 用于高级调度。
优点:
与FCFS相比,提高系统吞吐量。
缺点:
- 需要知道作业运行时间,一般系统会估计作业运行时间,估计时间一般偏长;
- 对长作业不利,长作业周转时间明显增加,可能得不到服务(饥饿现象);
- 采用此算法,人-机无法交互;
- 未考虑作业紧迫程度。
- 高优先权优先调度(PSA)
特点:
- 按照进程优先级大小进行调度;
- 相同优先级的按照FCFS顺序调度;
- 主要用于进程。
调度算法类型:
- 抢占式:处理机分配给优先级最高的进程,但如果在其运行期间有更高优先级的进程时,调度程序就会将处理机分配到新优先级最高的进程;
- 非抢占式:一旦处理机分配给一个进程,则其将一直执行下去,直至运行结束或是阻塞退出。
优先级类型:
- 静态优先级: 是在进程创建时确定,在进程的运行整个期间保持不变。
- 动态优先级: 是在进程创建时分配一个优先级,随着进程的推进或等待时间的增加而改变。
- 高响应比优先调度(HRRN)
特点:
- 响应比高的先调度;
- 非抢占策略。
优点:
- 有利于短作业:等待时间相同,服务时间越短,响应比越高;
- 实现先来先服务:服务时间相同,等待时间越短,响应比越高;
- 即使是长作业,随着等待时间增加,其响应比也会增加,也有机会被调用。
缺点:
由于要计算响应比,所以增加了系统开销。
- 时间轮转调度(RR)
特点:
- 按进程FCFS策略,组织进程就绪队列;
- 确定合适大小时间片;
- 得到时间片的进程即被分配处理机运行,直到时间片结束或程序运行结束;
- 可抢占策略。
- 多级反馈队列调度
特点:
- 多个进程就绪队列,每个对应一个调度优先级别,各级不同;
- 各级就绪队列中进程具有不同时间片,依优先级从高到低成倍增加;
- 各级队列按FIFO原则排序。
算法实现: