处理机调度:多道程序环境下,动态的把处理机分配给就绪队列中的一个进程使之执行。
提高处理机的利用率、改善系统性能,很大程度上取决于处理机调度的性能。
处理机调度便成为OS设计的中心问题之一。分配的任务由处理机调度程序完成。
一、处理机调度的基本概念
作业进入系统驻留在外存的后备队列上,再至调入内存运行完毕,可能要经历下述三级调度。
高级调度(High Scheduling)
中级调度(Intermediate-Level Scheduling)
低级调度(Low Level Scheduling)
进程调度方式
1)非抢占方式(Non-preemptive Mode)
一旦处理机分配给某进程,该进程一直执行。决不允许其他进程抢占已分配运行进程的处理机。
2)抢占方式(Preemptive Mode)
允许调度程序根据某种原则,暂停某个正在执行的进程,将处理机重新分配给另一进程。
针对批处理系统的性能指标。作业从提交到完成所经历的时间。
CPU执行用时Ts
总的等待时间Tw = 在后备队列中等待 + 就绪队列上等待
- 阻塞队列中等待(等待I/O操作用时)
周转时间T=Ts+Tw
带权周转时间W= T/Ts
平均周转时间、平均带权周转时间(n个作业求平均)
二、 调度算法
1、先来先服务调度算法FCFS
一种最简单的调度算法,按先后顺序进行调度。既可用于作业调度,也可用于进程调度。
按照作业提交,或进程变为就绪状态的先后次序分派CPU;
新作业只有当当前作业或进程执行完或阻塞才获得CPU运行
被唤醒的作业或进程不立即恢复执行,通常等到当前作业或进程出让CPU。 (所以,默认即是非抢占方式)
- 短作业(进程)优先调度算法SJF/SPF
- 高优先权优先调度算法HPF
- 基于时间片的轮转调度算法RR
(1)时间片轮转算法
1.将系统中所有的就绪进程按照FCFS原则,排成一个队列。
2.每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。
3.在一个时间片结束时,发生时钟中断。
4.调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前就绪的队首进程。
进程阻塞情况发生时,未用完时间片也要出让CPU
(2)多级反馈队列算法FB
1)设置多个就绪队列,各队列有不同的优先级,优先级从第一个队列依次降低。
2) 赋予各队列进程执行时间片大小不同, 优先权越高,时间片越短。
3)当一个新进程进入内存,引发的调度过程
准备调度:先将它放入第一个队列的末尾,按FCFS原则排队等待调度。
IF时间片内完成,便可准备撤离系统;
IF时间片内未能完成,调度程序便将该进程转入第二队列的末尾等待再次被调度执行。
当第一队列中的进程都执行完,系统再按FCFS原则调度第二队列。在第二队列的稍放长些的时间片内仍未完成,再依次将它放入第三队列。
依次降到第n队列后,在第n队列中便采取按时间片轮转的方式运行。 - 常用的几种实时调度算法
目前有许多实时调度算法,其中两种实时调度算法:
最早截止时间优先EDF(Earliest Deadline First)算法
最低松弛度优先LLF(Least Laxity First)算法
1)最早截止时间优先EDF
根据任务的开始截止时间来确定任务的优先级。截止时间越早,其优先级越高。
系统保持一个实时任务就绪队列
队列按各任务截止时间的早晚排序
调度程序总是选择就绪队列中的第一个任务,分配处理机使之投入运行。
新任务产生时,是否等当前程序执行完:
抢占式/非抢占式
可能会使作业错过,但可适用于软实时系统
2)最低松弛度优先LLF
根据任务紧急(或松弛)的程度,来确定任务的优先级。任务的紧急程度越高(松弛度值越小),优先级就越高。
松弛度= 截止完成时间 – 还需执行时间 - 当前时间
可理解为当前时刻到开始截止时刻间的差距,随着时间的推进,这个差值逐渐变小,任务越来越紧迫。