zoukankan      html  css  js  c++  java
  • 第十章 多处理器和实时调度

    一、多处理器调度

    1、多处理器系统分类

    松耦合、分布式多处理器、集群
    由一系列相对自治的系统组成,每个处理器有自己的内存和I/O通道。

    专门功能的处理器
    有一个通用的主处理器,专用处理器受主处理器的控制,并给主处理器提供服务。

    紧耦合多处理
    由一系列共享同一个内存并在操作系统完全控制下的处理器组成。

    2、粒度(同步粒度和进程)

    这里写图片描述

    3、设计问题

    把进程分配到处理器

    静态分配、动态分配
    主从式、对等式

    在单个处理器上使用多道程序设计

    传统多处理器处理粗粒度或无约束同步粒度,单处理器使用多道程序设计。

    运行在多处理器系统中的中等粒度应用程序,更加关注如何能为应用提供更好的平均性能,单个处理器是否多道并不重要。

    一个进程的实际分派
    使用简单的调度方法会更有效,降低开销

    4、进程调度

    这里写图片描述

    这里写图片描述

    结论:
    多处理器情况下,调度原则的选择没有在单处理器中显得重要。
    多处理系统中一般使用简单的FCFS或者在静态优先级方案中使用FCFS。

    5、线程调度

    负载分配
    系统维护一个就绪线程的全局队列,每个处理器只要空闲就从队列中选择一个线程。

    组调度
    一组相关的线程基于一对一的原则,同时调度到一组处理器上运行。

    专用处理器调度
    组调度的一种极端形式,在一个应用程序执行期间,把一组处理器专门分配给这个应用程序。

    动态调度
    某些应用程序允许动态地改变进程中线程数目,需要动态调度。操作系统负责分配处理器给作业,作业自行调度。

    二、实时调度

    1、背景

    实时计算
    系统的正确性不仅取决于计算的逻辑结果,还依赖于产生结果的时间。

    实时任务
    硬实时任务、软实时任务
    周期性任务、非周期性任务

    实时系统应用的例子
    目前:实验控制、过程控制、机器人、空中交通管制、电信、军事指挥与控制系统。
    下一代:自动驾驶汽车、具有弹性关节的机器人控制器、智能化生产中的系统查找、空间站和海底勘探。

    2、实时操作系统的要求

    可确定性
    按照固定的、预先确定的时间或时间间隔执行操作。
    可响应性
    为中断提供服务的时间。
    用户控制
    允许用户细粒度地控制任务优先级,指定一些特性等。
    可靠性
    性能的损失或降低可能产生灾难性的后果。
    故障弱化操作
    系统在故障时尽可能多地保存其性能和数据的能力。

    3、实时操作系统的特点

    @ 快速的进程或线程切换。
    @ 体积小(只具备最小限度的功能)。
    @ 迅速响应外部中断的能力。
    @ 通过诸如信号量、信号和时间之类的进程间通信工具,实现多任务处理。
    @ 使用特殊的顺序文件,可以快速存储数据。
    @ 基于优先级的抢占式调度。
    @ 最小化禁止中断的时间间隔。
    @ 用于使任务延迟一段固定的时间或暂停/恢复任务的原语。
    @ 特别的警报和超时设定。

    4、实时调度算法

    静态表法
    执行关于可行调度的静态分析。分析的结果是一个调度,它用于确定在运行时一个任务何时必须开始执行。

    静态优先级抢占法
    执行一个静态分析,但是没有制定调度,通过给任务制定优先级,使用传统的基于优先级的抢占式调度。

    基于动态规划调度法
    在运行时动态地确定可行性,可行性分析的结果是一个调度或规划,可用于确定何时分派这个任务。

    动态尽力调度法
    不执行可行性分析。系统试图满足所有的最后期限,并终止任何已经开始运行但错过最后期限的进程。

    5、限期调度

    实时应用程序通常并不关注绝对速度,它关注的是在最有价值的时间完成(或启动)任务。

    限期调度:最早最后期限优先。

    最后期限
    启动最后期限:任务必须开始的时间。
    完成最后期限:任务必须完成的时间。

    例1:具有完成最后期限的周期性任务调度

    这里写图片描述

    这里写图片描述

    例2:具有启动最后期限的非周期性任务调度

    这里写图片描述

    这里写图片描述

    6、速度单调调度RMS

    适应于周期性任务调度,最短周期的任务具有最高优先级,次短周期的任务具有次高的优先级,以此类推。

    当同时有多个任务可以被执行时,最短周期的任务被优先执行。

    操作系统的调度方法有很多种,这里主要介绍主流的调度算法,像EDF这种调度算法就不表述了。目前几乎所有的商业实时操作系统的调度理论都基于RMS理论.

    以下是基于RMS的一些假设理论:

    1 各个任务之间没有资源共享,没有忙等,没有mutex, 也没有semaphore.

    2 每个任务的最后期限是周期性的。

    3 基于优先级抢占的,即高优先级任务一旦就绪的话,会立马抢占低优先级任务。

    4 任务优先级的分配原则是,周期越短的任务,优先级越高。

    5 任务切换以及纯内核任务的消耗忽略不计对于这个理论模型。

    衡量周期调度算法有效性的标准:
    是否能够保证满足所有硬最后期限,对于RMS,须满足:

    这里写图片描述

    U 代表了系统的cpu 使用率,C 是任务的运行具体时间,T 是周期性的任务最后期限,n是有多少个任务,等式右边是理论上的可实时调度率,可以看到可调度率只和任务的个数有关,任务越多,可实时调度率越少。

    可以看到等式右边:

    这里写图片描述

    可以看到当任务接近无穷大的时候,可调度率是69%了。从这个公式可以近似任务系统中69%的任务是可以实时调度的,即能在最后的期限中完成运行。还有大概31%的任务是非实时的。这样的理论模型在实际应用中是完全可行的。

    例3:

    这里写图片描述

    假设有3个任务P1, P2, P3,运行的时间以及周期如上图。

    根据公式可以算出系统的cpu 使用率。

    这里写图片描述

    理论上的可实时调度率为

    这里写图片描述

    可以看到0.725 <= 0.77976, 所以这3个任务都是可以实时调度的。

    RMS理论主要是基于任务优先级的,对于指导分配任务的优先级有很大的实战价值,其核心是根据任务的最后期限(deadline)和周期的时间来分配任务优先级。周期越短的任务优先级越高,这在优先级分配上是一个有趣的开始。

    例4:

    任务P1:C1=20;T1=100;U1=0.2
    任务P2:C2=40;T2=150;U2=0.267
    任务P3:C3=100;T3=350;U3=0.286

    三个任务的总利用率为0.2+0.267+0.286=0.753

    使用RMS,三个任务的可调度性上界根据公式计算为0.779,0.753<0.779

    故所有的任务可以成功得到调度。

    7、优先级反转

    (1)什么是优先级反转?

    优先级反转是指一个低优先级的任务持有一个被高优先级任务所需要的共享资源。

    高优先任务由于因资源缺乏而处于受阻状态,一直等到低优先级任务释放资源为止。而低优先级获得的CPU时间少,如果此时有优先级处于两者之间的任务,并且不需要那个共享资源,则该中优先级的任务反而超过这两个任务而获得CPU时间。

    如果高优先级等待资源时不是阻塞等待,而是忙循环,则可能永远无法获得资源,因为此时低优先级进程无法与高优先级进程争夺CPU时间,从而无法执行,进而无法释放资源,造成的后果就是高优先级任务无法获得资源而继续推进。

    (2)解决方案:

    a. 设置优先级上限,给临界区一个高优先级,进入临界区的进程都将获得这个高优先级,如果其他试图进入临界区的进程的优先级都低于这个高优先级,那么优先级反转就不会发生。

    b. 优先级继承,当一个高优先级进程等待一个低优先级进程持有的资源时,低优先级进程将暂时获得高优先级进程的优先级别,在释放共享资源后,低优先级进程回到原来的优先级别。嵌入式系统VxWorks就是采用这种策略。

    {
    这里还有一个八卦,1997年的美国的火星探测器(使用的就是vxworks)就遇到一个优先级反转问题引起的故障。简单说下,火星探测器有一个信息总线,有一个高优先级的总线任务负责总线数据的存取,访问总线都需要通过一个互斥锁(共享资源出现了);还有一个低优先级的,运行不是很频繁的气象搜集任务,它需要对总线写数据,也就同样需要访问互斥锁;最后还有一个中优先级的通信任务,它的运行时间比较长。平常这个系统运行毫无问题,但是有一天,在气象任务获得互斥锁往总线写数据的时候,一个中断发生导致通信任务被调度就绪,通信任务抢占了低优先级的气象任务,而无巧不成书的是,此时高优先级的总线任务正在等待气象任务写完数据归还互斥锁,但是由于通信任务抢占了CPU并且运行时间比较长,导致气象任务得不到CPU时间也无法释放互斥锁,本来是高优先级的总线任务也无法执行,总线任务无法及时执行的后果被探路者认为是一个严重错误,最后就是整个系统被重启。Vxworks允许优先级继承,然而遗憾的工程师们将这个选项关闭了。
    }
    c. 第三种方法就是使用中断禁止,通过禁止中断来保护临界区,采用此种策略的系统只有两种优先级:可抢占优先级和中断禁止优先级。前者为一般进程运行时的优先级,后者为运行于临界区的优先级。

    火星探路者正是由于在临界区中运行的气象任务被中断发生的通信任务所抢占才导致故障,如果有临界区的禁止中断保护,此一问题也不会发生。

    简单从字面上来说,就是低优先级的任务先于高优先级的任务执行了,优先级搞反了。那在什么情况下会生这种情况呢?

    例5:

    假设三个任务准备执行,A,B,C,优先级依次是A>B>C;

    首先:C处于运行状态,获得CPU正在执行,同时占有了某种资源;

    其次:A进入就绪状态,因为优先级比C高,所以获得CPU,A转为运行状态;C进入就绪状态;

    第三:执行过程中需要使用资源,而这个资源又被等待中的C占有的,于是A进入阻塞状态,C回到运行状态;

    第四:此时B进入就绪状态,因为优先级比C高,B获得CPU,进入运行状态;C又回到就绪状态;

    第五:如果这时又出现B2,B3等任务,他们的优先级比C高,但比A低,那么就会出现高优先级任务的A不能执行,反而低优先级的B,B2,B3等任务可以执行的奇怪现象,而这就是优先反转。

    解决方案:

    高优先级任务A不能执行的原因是C霸占了资源,而C如果不能获得CPU,不释放资源,那A也只好一直等在那,所以解决优先级反转的原则肯定就是让C尽快执行,尽早把资源释放了。基于这个原则产生了两个方法:

    • 优先级继承

      当发现高优先级的任务因为低优先级任务占用资源而阻塞时,就将低优先级任务的优先级提升到等待它所占有的资源的最高优先级任务的优先级。

    • 优先级天花板

      优先级天花板是指将申请某资源的任务的优先级提升到可能访问该资源的所有任务中最高优先级任务的优先级.(这个优先级称为该资源的优先级天花板)

    两者的区别

    优先级继承:只有一个任务访问资源时一切照旧,没有区别,只有当高优先级任务因为资源被低优先级占有而被阻塞时,才会提高占有资源任务的优先级;而优先级天花板,不论是否发生阻塞,都提升,即谁先拿到资源,就将这个任务提升到该资源的天花板优先级。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    中美贸易战再次开启,世界两极化进程正在加快形成!..... Copyright: 1688澳洲新闻网 Read more at: https://www.1688.com.au/world/international/2018/06/17/369368/
    缠师的博客中关于舒伯特中的回帖,细思极恐
    南怀瑾,脱了国学大师的外衣,只剩下江湖和名利
    你可能修了一个假的“不净观”
    陈大惠老师:什么叫道德?
    C#-正则,常用几种数据解析-端午快乐
    html5+go+websocket简单实例代码
    Task三个列子的分享
    golang-web框架revel一个表单提交的总结
    百度流行音乐-资源数据整合
  • 原文地址:https://www.cnblogs.com/yangquanhui/p/4937483.html
Copyright © 2011-2022 走看看