标签(空格分隔): 进程调度 调度算法 操做系统算法
定义
: 操做系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,由于资源的有限性,必须按照必定的原则选择进程(请求)来占用资源, 咱们称之为调度。spa
其目的是控制资源使用者的数量,选取资源使用者许可占用资源或占用资源。处理机调度的三个层次:操作系统
做业调度的算法也适用于进程调度线程
服务时间\(T_s\): 系统为做业或进程提供服务的时间
周转时间\(T_i\): 做业或进程被提交给系统到做业或进程完成为止的时间间隔.
一般包括:设计
做业在外存后备队列上等待调度的时间.
进程在就绪队列上等待进程调度的时间.
进程在cpu上执行的时间.
进程等待I/O操做完成的时间.指针
平均周转时间:
\[T = \frac{\sum_{i=1}^n T_i}{n}\]
带权周转时间: 做业的周转时间与为它提供服务的时间之比
\[W_i = \frac{T_i}{T_s}\]
平均带权周转时间:
\[W = \frac{\sum_{i=1}^n \frac{T_i}{T_s}}{n}\]对象
进程调度和切换程序是操做系统内核程序。当请求调度的事件发生后,才可能会运行进程调度程序,当调度了新的就绪进程后,才会去进行进程间的切换。理论上这三件事情应该顺序执行,但在实际设计中,在操做系统内核程序运行时,若是某时发生了引发进程调度的因素,并不必定可以立刻进行调度与切换。队列
现代操做系统中,不能进行进程的调度与切换的状况有如下几种状况:进程
在处理中断的过程当中:中断处理过程复杂,在实现上很难作到进程切换,并且中断处理是系统工做的一部分,逻辑上不属于某一进程,不该被剥夺处理机资源。事件
进程在操做系统内核程序临界区中:进入临界区后,须要独占式地访问共享数据,理论上必须加锁,以防止其余并行程序进入,在解锁前不该切换到其余进程运行,以加快该共享数据的释放。
其余须要彻底屏蔽中断的原子操做过程当中:如加锁、解锁、中断现场保护、恢复等原子操做。在原子过程当中,连中断都要屏蔽,更不该该进行进程调度与切换。
若是在上述过程当中发生了引发调度的条件,并不能立刻进行调度和切换,应置系统的请求调度标志,直到上述过程结束后才进行相应的调度与切换。
应该进行进程调度与切换的状况有:
当发生引发调度条件,且当前进程没法继续运行下去时,能够立刻进行调度与切换。若是操做系统只在这种状况下进行进程调度,就是非剥夺调度。
当中断处理结束或自陷处理结束后,返回被中断进程的用户态程序执行现场前,若置上请求调度标志,便可立刻进行进程调度与切换。若是操做系统支持这种状况下的运行调度程序,就实现了剥夺方式的调度。
进程切换每每在调度完成后马上发生,它要求保存原进程当前切换点的现场信息,恢复被调度进程的现场信息。现场切换时,操做系统内核将原进程的现场信息推入到当前进程的内核堆栈来保存它们,并更新堆栈指针。内核完成重新进程的内核栈中装入新进程的现场信息、更新当前运行进程空间指针、重设PC寄存器等相关工做以后,开始运行新的进程。
即FCFS调度算法, 既可用于做业调度, 也可用于进程调度. 系统按照做业到达的前后次序(优先考虑在就绪队列中等待时间最长的做业)进行调度.
缺点:未考虑做业的紧迫程度, 只能顺序运行
为短做业而设立, 由于操做系统中大多为短做业.系统在做业运行时, 选出运行时间最短的做业将其调入内存.
缺点:
PSA算法基于做业的紧迫程度, 由外部赋予做业相应的优先级, 根据做业优先级进行调度.
HRRN算法即考虑了做业的等待时间, 又考虑了做业运行时间. 为没有做业引入一个动态优先级:
优先权 = (等待时间+要求服务时间) / 要求服务时间
可缩写为:
R = 响应时间 / 要求服务时间
特色:
原理: 系统根据FCFS策略将全部的就绪进程排成一个就绪队列, 并设置每隔一段时间产生依次中断, 激活系统中的进程调度程序, 完成依次调度, 将cpu分配给新的队首进程(或新到达的紧迫进程).
进程切换
注意:时间片选取太小, 则将频繁的执行进程调度和进程长下文切换, 增长系统开销; 时间片选取过长, 则RR算法退化为FCFS算法, 没法知足短做业和交互式用户需求. 时间片应选取略大于依次典型的交互所须要的时间, 是大多数进程在一个时间片内完成.
实时系统是指系统能及时响应外部事件的请求并及时处理这些请求.基于这一特性, 实时系统在工业(武器)控制, 多媒体等系统中常见.
实时系统中通分为存在一个截止时间, 硬实时任务(HRT)要求在开始截止时间前必须执行, 在结束截止时间前必须结束. 软实时任务同上, 但并不严格.
在实时系统中有两类算法值得注意:最先截止时间优先算法(Earliest Deadline First)和最低松弛度优先算法(Least Laxity First).两类算法均可用抢占式和非抢占式调度, 但后者经常使用于抢占式调度.
在m个周期性的实时调度中, 每一个实时任务的处理时间\(C_i\), 周期时间\(P_i\), 在但处理机的状况下, 需知足条件:$\sum_{i=1}^m\frac{C_i}{P_i} \(小于1; 多处理机条件下, 须知足条件\)\sum_{i=1}^m\frac{C_i}{P_i} $小于N, N为处理机数量.
该算法在实时系统中根据任务的截止时间肯定其优先级.
非抢占式
抢占式
在该法中根据任务的紧急程度(松弛程度)赋予其优先级, 越紧急的任务优先级越高.
任务的松弛程度 = 必须完成时间 - 其自己运行时间 - 当前时间
系统的任务按照松弛度排成一个就绪队列, 松弛度低的任务排在队列前面, 即调度程序优先执行.