【操做系统】处理机调度简述

处理机的调度

标签(空格分隔): 进程调度 调度算法 操做系统算法


基本概念

定义
: 操做系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,由于资源的有限性,必须按照必定的原则选择进程(请求)来占用资源, 咱们称之为调度。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}\]对象

调度时机、切换与过程

进程调度和切换程序是操做系统内核程序。当请求调度的事件发生后,才可能会运行进程调度程序,当调度了新的就绪进程后,才会去进行进程间的切换。理论上这三件事情应该顺序执行,但在实际设计中,在操做系统内核程序运行时,若是某时发生了引发进程调度的因素,并不必定可以立刻进行调度与切换。队列

现代操做系统中,不能进行进程的调度与切换的状况有如下几种状况:进程

  1. 在处理中断的过程当中:中断处理过程复杂,在实现上很难作到进程切换,并且中断处理是系统工做的一部分,逻辑上不属于某一进程,不该被剥夺处理机资源。事件

  2. 进程在操做系统内核程序临界区中:进入临界区后,须要独占式地访问共享数据,理论上必须加锁,以防止其余并行程序进入,在解锁前不该切换到其余进程运行,以加快该共享数据的释放。

  3. 其余须要彻底屏蔽中断的原子操做过程当中:如加锁、解锁、中断现场保护、恢复等原子操做。在原子过程当中,连中断都要屏蔽,更不该该进行进程调度与切换。

若是在上述过程当中发生了引发调度的条件,并不能立刻进行调度和切换,应置系统的请求调度标志,直到上述过程结束后才进行相应的调度与切换。

应该进行进程调度与切换的状况有:

  1. 当发生引发调度条件,且当前进程没法继续运行下去时,能够立刻进行调度与切换。若是操做系统只在这种状况下进行进程调度,就是非剥夺调度。

  2. 当中断处理结束或自陷处理结束后,返回被中断进程的用户态程序执行现场前,若置上请求调度标志,便可立刻进行进程调度与切换。若是操做系统支持这种状况下的运行调度程序,就实现了剥夺方式的调度。

进程切换每每在调度完成后马上发生,它要求保存原进程当前切换点的现场信息,恢复被调度进程的现场信息。现场切换时,操做系统内核将原进程的现场信息推入到当前进程的内核堆栈来保存它们,并更新堆栈指针。内核完成重新进程的内核栈中装入新进程的现场信息、更新当前运行进程空间指针、重设PC寄存器等相关工做以后,开始运行新的进程。

调度的方式

  • 非抢占方式
    一旦处理机分配给某进程后, 就一直让它运行下去, 决不会由于时钟中断或任何其余缘由取抢占当前正在运行进程的处理机, 直至该进程完成, 或发生某事件而被阻塞时, 才把处理机分配给其余进程.
  • 抢占方式
    系统容许调度程序根据某种原则, 取暂停某个正在执行的进程, 将已分配个该进程的处理机从新分配给另外一进程.
    "抢占"时应遵循必定的原则:
    • 优先权原则
    • 短进程优先原则
    • 时间片原则

典型的调度算法

先来先服务调度算法(first-come first-served):

即FCFS调度算法, 既可用于做业调度, 也可用于进程调度. 系统按照做业到达的前后次序(优先考虑在就绪队列中等待时间最长的做业)进行调度.
缺点:未考虑做业的紧迫程度, 只能顺序运行

短做业(进程)优先的调度算法(short job first):

为短做业而设立, 由于操做系统中大多为短做业.系统在做业运行时, 选出运行时间最短的做业将其调入内存.

  1. SJF(不可抢占):算法以做业的长短(做业须要运行的时间)来计算优先级, 做业越短, 其优先级越高.
  2. SPF(可抢占):同上, 可是当有做业优先级较高时, 即可以抢占资源优先执行.

缺点:

  • 必须预知做业的运行时间
  • 对做业程不利
  • 没法实现人机交互
  • 没有考虑到做业的紧迫程度

优先级调度算法(priority-scheduling algorithm):

PSA算法基于做业的紧迫程度, 由外部赋予做业相应的优先级, 根据做业优先级进行调度.

高响应闭优先调度算法(highest request ratio next):

HRRN算法即考虑了做业的等待时间, 又考虑了做业运行时间. 为没有做业引入一个动态优先级:

优先权 = (等待时间+要求服务时间) / 要求服务时间

可缩写为:

R = 响应时间 / 要求服务时间

特色:

  1. 做业等待时间相同, 则要求服务时间越短, 优先权越高越, 相似于SJF算法, 有利于短做业
  2. 做业要求服务时间相同时, 则做业等待时间约长, 优先权越高, 相似于FCFS算法, 有利于长做业
  3. 对于长做业(要求服务时间长), 随着等待的时间足够长, 也可得到较高的优先级. 不会一直等下去.

时间片轮转调度算法(RR)

原理: 系统根据FCFS策略将全部的就绪进程排成一个就绪队列, 并设置每隔一段时间产生依次中断, 激活系统中的进程调度程序, 完成依次调度, 将cpu分配给新的队首进程(或新到达的紧迫进程).

进程切换

  1. 若一个时间片还没有用完, 正在运行的进程便已完成, 则当即激活调度程序, 将其从执行队列中删除, 在调度就绪队列的队首进程运行, 并启动一个新的时间片.
  2. 在一个时间片用完时, 计时中断处理程序被激活, 若是进程还没有运行完毕, 则调度程序将它送往就绪队列末尾, 并调度就绪队列的队首进程运行, 并启动新时间片.

注意:时间片选取太小, 则将频繁的执行进程调度和进程长下文切换, 增长系统开销; 时间片选取过长, 则RR算法退化为FCFS算法, 没法知足短做业和交互式用户需求. 时间片应选取略大于依次典型的交互所须要的时间, 是大多数进程在一个时间片内完成.

多级反馈队列调度算法(multileved feedback queue):

  1. 设置多个就绪队列, 并为每一个队列赋予不一样的优先级, 优先级越高的队列其时间片越小.优先级最高的队列最早进入待调度的队列
  2. 队列之间采用FCFS调度算法.只有高优先级队列中的所有进程完成时才调度下一队列
  3. 队列内的进程按照轮转算法调度.新进程进入内存后首先进入优先级最高的队列
  4. 在低优先级队列运行时, 如有新进程到达, 那么在运行完这个时间片后,CPU立刻分配给新到达的做业(抢占式)。

实时系统中的进程调度算法

实时系统是指系统能及时响应外部事件的请求并及时处理这些请求.基于这一特性, 实时系统在工业(武器)控制, 多媒体等系统中常见.
实时系统中通分为存在一个截止时间, 硬实时任务(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为处理机数量.

最先截止时间优先算法(EDF)

该算法在实时系统中根据任务的截止时间肯定其优先级.

  1. 非抢占式

  2. 抢占式

最低松弛度优先算法(LLF)

在该法中根据任务的紧急程度(松弛程度)赋予其优先级, 越紧急的任务优先级越高.

任务的松弛程度 = 必须完成时间 - 其自己运行时间 - 当前时间

系统的任务按照松弛度排成一个就绪队列, 松弛度低的任务排在队列前面, 即调度程序优先执行.

相关文章
相关标签/搜索