处理机调度的层次和调度算法的目标

处理机调度的层次

  1. 高级调度(High Level Schenduling)
    • 调度对象:作业
    • 主要功能:将外存的作业调度到内存中,并放到就绪队列中
    • 适用于:多道批处理系统
  2. 低级调度(Low Level Schenduling)
    • 调度对象:进程(或内核级线程)
    • 主要功能:将就绪队列的分派给处理机
    • 适用于:多道批处理系统,实时系统,分时系统
  3. 中级调度(Intermediate Schenduling)
    • 调度对象:进程
    • 主要功能:将内存中的进程调度到外存,将外存中的进程调度到内存中
    • 适用于:存储器管理

处理机调度算法的目标

  1. 共同目标

    • 资源利用率

    • 公平性

    • 平衡性

    • 策略强制执行

  2. 批处理系统的目标

    • 平均周转时间短

      • 周转时间:从作业被提交给系统开始,到作业完成为止的这段时间间隔称为作业周转时间

      • 周转时间包括:①作业在外存后备队列上等待调度的时间。②进程在就绪队列上等待进程调度的时间。③进程在CPU上执行的时间。④继承等待I/O操作完成的时间

      • 平均周转时间:周转时间的平均值

      • 平均带权周转时间:周转时间除以CPU运行的时间的值的平均值

    • 系统吞吐量高

      • 吞吐量:指单位时间内系统所完成的作业数。于批处理作业的长度有关
    • 处理及利用率高

  3. 分时系统的目标

    • 响应时间快
      • 响应时间:从用户通过键盘提交一个请求开始,直到屏幕上显示出处理结果为止的一段时间
      • 响应时间包括:①请求信息从键盘输入开始,知道将其传从到处理机的时间。②处理及对请求信息进行处理的时间。③将所形成的响应信息回送到终端显示器的时间
    • 均衡性
      • 均衡性:指系统响应时间的快慢应与用户所请求服务的复杂性相适应
  4. 实时系统的目标

    • 截止时间的保证
      • 截止时间:指某任务必须开始执行的最迟时间,或必须完成的最迟时间
    • 可预测性

作业与作业调度

  1. 批处理系统中的作业

    • 作业和作业步
      • 作业(Job):包含通常的程序和数据,还配有一份作业说明书,系统根据该说明书来对程序的运行进行控制。
      • 在批处理系统中,作业是从外存调入内存的基本单位
      • 作业步(Job Step):在作业运行期间,每个作业需要经过若干个加工步骤才能得到结果。我们把这些相对独立的又互相关联的加工步骤称为作业步。
    • 作业控制块(Job Control Block , JCB)
      • 作业控制快:是作业在系统中存在的标志,保存了系统对作业进行管理和调度所需的全部信息
      • 包含的内容:作业标识,用户名称,用户账号,作业类型,作业状态,调度信息,资源需求,资源使用情况等
      • 其中:作业类型:CPU繁忙型,I/O繁忙型,批量型,终端型。调度信息:优先级,作业运行时间。资源需求:预计运行时间,要求内存大小等
    • 作业运行的三个阶段和三种状态
      • 收容阶段:操作员把作业输入到硬盘中,再为该作业创建JCB,并放入作业后备队列中。此时作业的状态为”后备状态”
      • 运行阶段:作业被作业调度选中后,便为它分配必要的资源和建立进程,并将它放进就绪队列。作业到第一次进入就绪队列直到运行结束前,在此期间都被处于“运行状态”
      • 完成阶段:当作业运行完成,或发生异常情况而提前结束时,作业便进入完成阶段。此时作业处于“完成状态”
  2. 作业调度的主要任务

    • 主要任务:根据JCB中的信息, 检查系统中的资源能否满足作业对资源的需求,以及按照一定的调度算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。然后再将新创建的进程排在就绪队列上等待调度。
    • 作业调度称为接纳调度(Admission Scheduling)
    • 在每次执行作业调度时,都需做出以下两个决定。
      • 接纳多少个作业:取决于多道程序度,即运行多少个作业同时在内存中运行
      • 接纳哪些作业:取决于所采用的调度算法
  3. 先来先服务(FCFS)调度算法

    • FCFS:first-come first-served

    • 适用于:作业调度,进程调度

    • 定义:按照作业到达的先后顺序来进行调度作业,按就绪队列中选择最先进入该队列的进程

    • 缺点:不利于短作业以及I/O繁忙的作业

  4. 短作业优先(SJF)调度算法

    • SJF:short job first

    • 适用于作业调度,进程调度

    • 定义:按照作业或进程的运行时间的长短来调度,先调时间最短的那个

    • 缺点:①必须预知运行时间。②对长作业非常不利,忽视作业的等待时间,会出现饥饿现象。③人-机无法交互。④算法未考虑作业的紧急程度,不能保证作业被及时处理。

  5. 优先级调度(PSA)算法

    • PSA:priority-scheduling algorithm

    • 适用于:作业调度,进程调度

    • 定义:基于作业的紧迫程度,由外部赋予作业响应的优先级,调度算法再根据优先级进行调度。

  6. 高响应比优先调度(HRRN)算法

    • HRRN:highest response ratio next

    • 适用于:作业调度,进程调度

    • 定义:根据作业的响应比来进行调度。响应比为响应时间除以要求服务时间

    • 缺点:由于要进行响应比的计算,因此会增加系统开销

进程调度

  1. 进程调度的任务,机制和方式

    • 进程调度的任务

      • 保存处理机的现场信息
      • 按某种算法选取进程
      • 把处理机分配给进程
    • 进程调度机制

      • 排队器:将就绪进程插入到相应的就绪队列
      • 分派器:将就绪队列中的进程按照调度算法送至上下文切换器中
      • 上下文切换器:切换新的进程和老进程。在切换时会执行两次上下文切换:①将当前进程的信息保存到对应的进程控制块中,并装入分派进程的上下文。②移出分派的上下文,装入新进程
    • 进程调度方式

      • 非抢占方式(Nonpreemptive Mode)
        • 定义:当处理机分配给某进程后,除非进程运行完成或发生阻塞,否则处理机不会分配给其他进程
        • 采用非抢占式时可引起进程调度的情况:①正在执行的进程运行完成或无法继续运行。②执行的进程提出I/O操作而暂停执行。③在进程同步或进程通信时,执行力某种原语操作,比如Block原语。
        • 优点:实现简单,系统开销小,适用于大多数批处理系统
        • 缺点:不适用于分时系统和大多数实时系统
      • 抢占方式(Preemptive Mode)
        • 定义:调度程序根据某种原则,暂停只在执行的进程,把处理机分配给另一个进程
        • 原则:①优先权原则:高优先级进程可以抢占低优先级进程。②短进程优先原则:短进程可以抢占长进程。③时间片原则:按时间片轮转运行时,一个进程的时间片用完后,可以将处理机分配给其他进程
        • 优点:适用于批处理系统,实时系统,分时系统
        • 缺点:抢占方式比较复杂,会付出很大的系统开销
  2. 轮转调度(RR)算法

    • RR:round robin

    • 定义:将进程按照FCFS策略排成一队,对CPU设置一定时间间隔,当当前CPU执行完一个时间间隔不到一个时间间隔当前进程就执行完了,然后将处理机分配给队首进程。

    • 进程切换时机:①当一个时间片未用完,进程已经完成时。②时间片用完时

    • 时间片大小的确定:时间片的大小应略大于一次典型的交互所需要的时间,使大多数进程能在一个时间片内完成

  3. 优先级调度(PSA)算法

    • 优先级调度算法的类型
      • 非抢占式优先级调度算法
      • 抢占式优先级调度算法:按优先级的原则决定是否抢占
    • 优先级的类型
      • 静态优先级
        • 静态优先级是在进程创建时确定的,在进程的整个运行时间保持不变
        • 确定优先级大小的三个依据:①进程类型:系统进程高于用户进程。②进程对资源的需求:资源要求少的优先级高。③用户要求:根据进程的紧迫程度及用户所付费用的多少确定优先级。
      • 动态优先级
        • 动态优先级是指在创建进程之初,先赋予其一个优先级,然后其值随进程的推进或等待时间的增加而改变
  4. 多队列调度算法

    • 将系统中的进程就绪队列从一个拆分为若干个,将不同类型或性质的进程固定分配在不同的就绪队列,不同的就绪队列采用不同的调度算法,一个就绪队列中的进程可以设置不同的优先级,不同的就绪队列本身也可以设置不同的优先级。
  5. 多级反馈队列调度(MFQ)算法

    • 调度机制
      • 设置多个就绪队列。
        • 赋予队列优先级,第一个队列优先级最高,往后逐个降低
        • 赋予队列时间片,第一个队列时间片最短,往后逐个增加,增加幅度大概为前一个时间片的一倍
      • 每个队列都采用FCFS算法
        • 新进程首先排在第一队列的队尾,
        • 当进程在一个时间片内未完成时,调度程序将其转入第二队列的队尾。若完成则撤出系统
        • 当进程被降到最后一个队列时,采取RR方法运行
      • 按队列优先级调度
        • 当第1~(i-1)队列都为空时,才调度第i队列的进程
        • 当有新进程进来时,把当前运行的进程暂停并放回这个进程的队列的末尾,然后运行优先级更高的新进程
    • 调度机制的不确定性:在一个进程的时间片未完成便被暂停时,当再次运行这个进程时,是开启一个新的时间片,还是接着上一个时间片。这里有两种不同的算法
  6. 基于公平原则的调度算法

    • 保证调度算法
      • 定义:能够明确的保证性能,可以做到调度的公平性
      • 举例:处理机分配的公平性,有n个相同类型的进程同时运行,保证每个进程的处理机时间为1/n。步骤如下
        • 跟踪计算每个进程自创建以来已经执行的处理时间
        • 计算每个进程应获得的处理机时间,即自创建以来的时间除以n
        • 计算进程获得处理机时间的比率,即进程实际执行的处理时间和应获得的处理机时间之比。
        • 比较各进程获得处理机时间的比率。如进程A的比率最低,为0.5,而进程B的比率为0.8,进程C的比率为1.2等。
        • 调度程序应选择比率最小的进程将处理机分配给它,并让该进程一直运行,直到超过最接近它的进程比率为止
    • 公平分享调度算法
      • 调度的公平性主要是针对用户而言,是所有的用户能获得相同的处理机时间,或所要求的时间比例。

实时调度

  1. 实现实时调度的基本条件

    • 提供必要的信息
      • 就绪时间:指某任务成为就绪状态的起始时间,在周期任务下是可以事先预知的
      • 开始截止时间和完成截止时间
      • 处理时间:一个任务从开始执行,直至完成时所需的时间
      • 资源要求:任务执行时所需id一组资源
      • 优先级:当错过任务的开始截止时间后会引起故障时,应赋予“绝对”优先级。当错过任务的开始截止时间后无重大影响,应赋予“相对”优先级。
    • 系统处理能力强
      • 提高相同处理能力的途径有二:①采用单处理机系统,但须增强处理能力。②采用多处理机系统
    • 采用抢占式调度机制
    • 具有快速切换机制
      • 具有对终端的快速响应能力
      • 具有快速的任务分派能力
  2. 实时调度算法的分类

    • 按实时任务性质分为:硬实时调度算法,软实时调度算法

    • 按调度方式分为:非抢占式调度算法,抢占式调度算法

    • 非抢占式调度算法

      • 非抢占式轮转算法
        • 将实时任务排成一个轮转队列。适用于要求不太严格的实时控制系统
      • 非抢占式优先调度算法
        • 将实时任务按优先级排队。适用于有一定要求的实时控制系统
    • 抢占式调度算法

      • 基于时钟中断的抢占式优先级算法
        • 到新任务到达时,如果它的优先级比现有进程高,不立即抢占,而是等到时钟中断后才开始抢占
      • 立即抢占的优先级调度算法
        • 一旦发生外部中断,只要当前任务未处于临界区,便能立即剥夺当前任务的执行,把处理机分配给请求中断的急迫任务
  3. 最早截止时间有限(EDF)算法

    • 定义:根据任务的截至时间确定任务的优先级,任务的截至时间越早,其优先级越高,具有最早截止时间的任务排在队列的队首。

    • 非抢占式最早截止时间调度算法用于非周期实时任务

    • 抢占式最早截止时间调度算法用于周期实时任务

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

    • 定义:确定任务的优先级时根据当是任务的紧急(或松弛)程度。任务紧急程度越高,赋予任务的优先级就越高。任务的松弛度越低,任务越紧急,它的优先级越高。
    • 松弛度计算:必须完成的时间-其本身运行的时间-当前时间(初始时间为0)
  5. 优先级倒置(priority inversion problem)

    • 优先级倒置的形成:三个完全独立的线程,P1和P3共享一个资源,P2不占用这个资源,优先级P3>P2>P1。
      • 第一步:P1占有CPU。此时资源已被锁。
      • 第二步:P2优先级比P1高,因此P1被抢且资源未被释放,P2占有CPU。
      • 第三步:P3优先级比P2高,P3抢占了CPU,但是由于资源被P1占有,P3进入阻塞状态
      • 第三步:P3被阻塞后,P2会占有CPU运行。
      • 第四步:当P2运行完后,由于P3被阻塞,因此P1会占有CPU。
      • 第五步:当P1运行完后,资源被释放,P3才得以运行
      • 上述情况中,P2,P1的优先级都比P3高,但却比P3先运行。因此发生了优先级倒置的情况
    • 优先级倒置的解决办法
      • 第一种方法:不抢占,即P2优先级比P1高,但不抢占,这时P1就会先运行,
      • 第二种方法:建立在动态优先级继承基础上,即当高优先级进程来时,如果有占有同一资源的低优先级进程正在使用此资源,则这个低优先级进程就继承高优先级进程的优先级。这样,P1就会继承P3的优先级,执行顺序就是P1,P3,P2

死锁概述

  1. 资源问题
    • 可重用性资源:是一种可供用户重复使用多次的资源。
      • 性质如下
        1. 每一个可重用性资源终端单元只能分配给一个进程使用。
        2. 进程在使用可重用性资源时,需按照这样的顺序:①请求资源。②使用资源。③释放资源。
        3. 系统中每一类可重用性资源的单元数目是相对固定的,进程在运行期间既不能创建也不能删除它。
      • 设备,文件,互斥访问的资源都属于可重用性资源
    • 可消耗性资源:是进程运行期间,由进程动态的创建和消耗的。
      • 性质如下
        1. 每一类可消耗性资源的单元数目在进程运行期间是可以不断变化的。
        2. 进程在运行期间,可以不断的创造可消耗性资源的单元
        3. 进程在运行期间,可以请求若干个可消耗性资源单元,用于进程自己的消耗,不再将它们返回给该资源类中。
      • 进程间通信的消息属于可消耗性资源
    • 可抢占性资源:指进程在获得这类资源后,该资源可以在被其他进程或系统抢占。
      • CPU和内存都属于可抢占性资源
    • 不可抢占性资源:指一旦系统把某资源分配给该进程后,就不能将他强行收回,只能在进程用完后自动释放。
      • 光盘,磁带机,打印机等属于不可抢占式资源
  2. 计算机系统中的死锁
    • 竞争不可抢占性资源引起的死锁
      • 举例:进程P1和P2都准备写两个文件F1和F2。P1先打开F1后打开F2。P2先打开F2后打开F1。会出现P1打开了F1,P2打开了F2,然后P1打开F2失败,P2打开F1失败,因此出现了死锁。
    • 竞争可消耗性资源引起死锁
      • 举例:在进程通信中,对于三个进程P1,P2,P3。如果P1先接受P3发送的消息M3,然后发送消息M1给P2。然后P2先接受P1发送的消息M1,然后发送消息M2给P3。然后P3先接受P2发送的消息M2,然后发送消息M3给P1。此时会导致三个进程永远接收不到消息,因此发生死锁。
    • 进程推进顺序不当引起死锁
  3. 死锁的定义,必要条件和处理方法
    • 死锁的定义(Deadlock)
      • 如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。
    • 产生死锁的必要条件:下列四个条件只要有一个不成立,死锁就不会发生
      • 互斥条件:资源只能被一个进程占用。
      • 请求和保持条件:在占有一个资源时,请求另一个被其他进程占有的资源会失败,而且对自己占有的资源不释放。
      • 不可抢占条件:资源在未被使用完前不会被抢占。
      • 循环等待条件:P1等待P2占有的资源,P2等待P3占有的资源~~Pn等待P1占有的资源。
    • 处理死锁的方法
      • 预防死锁:通过设置某些限制去破坏产生死锁的一个或几个条件来预防死锁。
      • 避免死锁:在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免死锁。
      • 检测死锁:通过检测机构检测出死锁,然后采取适当的措施,将进程从死锁中解脱出来。
      • 解除死锁:常用方法为撤销一些进程,释放它们的资源

预防死锁

  1. 破坏“请求和保持”条件
    • 第一种协议:AND信号量机制。当请求资源时,同时请求全部所需的资源
      • 优点:简单,易行且安全
      • 缺点:资源被严重浪费,使进程经常发生饥饿现象
    • 第二种协议:允许一个进程只获得运行初期所需的资源后,便开始运行。运行过程中在逐步释放已分配给自己的且已用完的资源,然后再请求新的所需资源。
  2. 破坏“不可抢占”条件
    • 协议:当一个已经保持了某些不可被抢占资源的进程,提出新的进程而不能得到满足时,它必须释放已经持有的所有资源
      • 缺点:实现较为复杂,且需要付出很大的代价。还会加大系统开销
  3. 破坏“循环等待“条件
    • 协议:对所有资源类型进行线性编号,进程请求资源时,按编号递增的顺序请求资源,当无法请求时需释放已请求的资源

避免死锁

  1. 系统安全状态
  2. 利用银行家算法避免死锁

死锁的检测与解除

  1. 死锁的检测
  2. 死锁的解除

版权声明:本文为mzchuan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/mzchuan/p/13872334.html