收藏 分享(赏)

动态优先级调度算法的特点和实现.doc

上传人:weiwoduzun 文档编号:2588741 上传时间:2018-09-22 格式:DOC 页数:7 大小:75KB
下载 相关 举报
动态优先级调度算法的特点和实现.doc_第1页
第1页 / 共7页
动态优先级调度算法的特点和实现.doc_第2页
第2页 / 共7页
动态优先级调度算法的特点和实现.doc_第3页
第3页 / 共7页
动态优先级调度算法的特点和实现.doc_第4页
第4页 / 共7页
动态优先级调度算法的特点和实现.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、1动态优先级调度算法的特点和实现摘要:本文从实时操作系统的调度功能入手,简单介绍了实时调度算法的分类和种类,并主要讨论动态优先级调度算法的特点和实现。接下来本文介绍了两类动态优先级调度算法:截止时间优先调度算法和最短空闲时间优先调度算法的定义及实现方式。然后将静态调度与动态调度进行比较,突出动态优先级调度的特点,同时指出其可能导致的优先级反转、死锁等不良后果。然后具体介绍了优先级反转的定义以及解决该问题的两种方案:采用优先级继承协议与采用优先级天花板协议。关键词:嵌入式系统 动态优先级 调度算法 优先级反转 在嵌入式的实时操作系统中,调度是一个非常重要的功能,用来确定多任务环境下任务执行的顺序

2、和在获得 CPU 资源后能够执行的时间长度。操作系统通过一个调度程序(Scheduler )来实现调度功能。调度程序以函数的形式存在,用来实现操作系统的调度算法。调度程序本身并不是一个任务,而是一个函数调用,可在内核的各个部分进行调用。调度程序是影响系统性能(如吞吐率、延迟时间等)的重要部分。在设计调度程序是、时,通常要综合考虑如下因素:CPU 的使用率(CUP utilization);输入/输出设备的吞吐率;响应时间(responsive time);公平性;截止时间。这些因素之间具有一定的冲突性。比如可通过让更多的任务处于就绪状态来提高 CPU的使用率,但这显然会降低系统的响应时间。因此

3、,调度程序的设计需要优先考虑最重要的需求,然后在各种因素之间进行折中处理。可以把一个调度算法(Scheduling Algorithms)描述为是在一个特定时刻用来确定将要运行的任务的一组规则。从 1973 年 Liu 和 Layland 开始关于实时调度算法的研究工作以来(1973 年,Liu 和 Layland 发表了 一篇名为“Scheduling Algorithms for Multiprogramming in a Hard Real-Time Environment”的论文),相继出现了许多调度算法和方法。对于大量的实时调度方法而言,存在着以下几类主要的划分方法:离线(off-l

4、ine)和在线(on-line)调度;抢占(preemptive )和非抢占( non-preemptive)调度;2静态(static )和动态(dynamic)调度;最佳(optimal)和试探性(heuristic)调度。以下主要讨论动态优先级调度算法的特点和实现。一、动态优先级调度算法的定义优先级驱动策略指按照任务的优先级的高低确定任务的执行顺序。根据任务优先级的确定时机,调度算法分为静态调度和动态调度两类。在静态调度算法中,所有任务的优先级在设计时就确定下来了,且在运行过程中不会发生变化(如 RMS)。在动态调度算法中,任务的优先级则在运行过程中确定,并可能不断地发生变化(如 EDF

5、)。静态调度算法适用于能够完全把握系统中所有任务及其时间约束(如截止时间、运行时间、优先顺序和运行过程中的到达时间)特性的情况。静态调度比较简单,但是缺乏灵活性,不利于系统扩展;动态调度有足够的灵活性来处理变化的系统情况,但是需要消耗更多的系统资源。在动态调度中,任务的优先级可根据需要进行改变,也可能随着时间按照一定的策略自动发生变化。二、动态优先级调度算法的分类1、截止时间优先调度算法RMS 调度算法(Rate-Monotonic Scheduling algorithm,比率单调调度算法)的 CPU 使用率比较低,在任务比较多的情况下,可调度上限为 68%。Liu 和 Layland 又提

6、出了一种采用动态调度的、具有更高 CPU 使用率的调度算法截止时间优先调度算法 EDF(Earliest Deadline First)。在 EDF 中,任务的优先级根据任务的截止时间来确定。任务的绝对截止时间越近,任务的优先级越高;任务的绝对截止时间越远,任务的优先级越低。当有新的任务处于就绪状态时,任务的优先级就有可能需要进行调整。同 RMS 一样,Liu 和 Layland对 EDF 算法的分析也是在一系列假设的基础上进行的。在 Liu 和 Layland 的分析中,EDF 不要求任务为周期任务,其他假设条件与 RMS 相同。例如在系统中有 3 个进程需要执行,分别为 P1、P2、P3,

7、其执行需花费的时间各为1、 2、1l,而执行周期为 3、 5、4,在时间单位 4 时,因为 P1 的执行时限为 6,P2 的执行时限为 10,P3 的执行时限为 8,所以 P1 的优先级最高,进程切换到 P1:在时间单位 6 时,因为 P1 的执行时限为 9,P2 的执行时限为 10,P3 的执行时限为 12,所以 P1 的优先级最高,进程又再次切换到 P1,而非 P2:在时间单位 7 时,因为 P1 的执行时限为 12,P2 的执行时限为 10,P3 的执行时限为 12,所以 P2 的优先级最高,进程切换到 P2。后续流程以此类推。3EDF 算法是最优的单处理器动态调度算法,其可调度上限为

8、100%。在 EDF 调度算法下,对于给定的一组任务,任务可调度的充分必要条件为对于给定的一组任务,如果 EDF 不能满足其调度性要求,则没有其他调度算法能够满足这组任务的调度性要求。同基于固定优先级的静态调度性比,采用基于动态优先级调度的 EDF 算法的显著优点在于 EDF 的可调度上限为 100%,使 CPU 的计算能力能够被充分利用起来。EDF 也存在不足之处,在实时系统中不容易实现,并且,同 RMS 相比, EDF 具有更大的调度开销,需要在系统运行的过程中动态地计算确定任务的优先级。另外,在系统出现临时过载的情况下,EDF 算法不能确定哪个任务的截止时间会得不到满足。为此,Liu 和

9、 Layland 提出了一种混合的调度算法,即大多数任务都采用 RMS 进行调度,只有少量任务采用 EDF 调度算法。尽管混合的调度算法不能达到 100%的 CUP 使用率,大确实综合了 EDF 和 RMS 调度算法的优点,使这个调度比较容易实现。2、最短空闲时间优先调度算法在最短空闲时间优先调度算法(least-laxity-first scheduling)中,任务的优先级根据任务的空闲时间进行动态分配。任务的空闲时间越短,任务的优先级越高;任务的空闲时间越长,任务的优先级越低。任务的空闲时间可通过下式来表示,即任务的空闲时间= 任务的绝对截止时间当前时间任务的剩余时间四、静态调度与动态调

10、度之间的比较动态调度的出现时为了确保低优先级任务也能被调度。这种公平性对于所有任务都同等重要的系统比较合适,对于需要绝对可预测性的系统一般不使用动态调度。这些系统中,在出现临时过载的情况下,要求调度算法能够选择最紧急的任务执行,而放弃那些不太紧急的任务。而动态调度的优先级只反映了任务的时间特性,没有把任务的紧急程度体现到优先级中去。动态调度的调度代价通常都比静态调度高,这主要是由于在每一个调度点都需要对任ni=1CiTi 14务的优先级进行重新计算,而静态调度中任务的优先级则始终保持不变,不需要进行计算。然而,要注意,动态优先级调度算法的滥用会导致优先级反转、死锁,甚至系统崩溃。五、优先级反转

11、优先级反转是指由于资源竞争,低优先级的任务在执行,而高优先级的任务在等待的现象。当具有不同优先级的任务中存在相互依赖关系时,就可能发生优先级反转。例如当系统内低优先级的任务 C 占用着高优先级任务 A 要使用的资源时,任务 A 只好等待任务 C 执行完毕,并释放该资源后才能被调度执行。这时,如果有中优先级任务 B 进入就绪,剥夺了任务 C 的 CPU 使用权,使得系统只有先让 B 运行完毕,且任务 C 重新运行结束并释放资源后,任务 A 才能运行。这样,任务 A 和 B 的优先级发生了颠倒。在这种情况下,高优先级的任务的优先级实际上已经降到了低优先级的水平,从而发生优先级反转现象,中优先级的任

12、务抢占低优先级的任务,时间可能不确定,因此称为无界优先级反转。类似地,当一个较高优先级的任务请求一个较低优先级任务占有的资源时,较低优先级的任务却锁住了该资源,即使较高优先级的任务就绪,它也必须等待低优先级的任务释放资源后才能继续运行。在这种情况下,低优先级的任务占用资源的时间是已知的,因此称为有界优先级反转。有界优先级反转实例当优先级发生反转时,某些任务的执行时间减少,同时其他任务的执行时间延长,导致任务错失时限,进而引起时序反常。优先级反转是由不同优先级任务间的资源同步引起的,在实际应用中是不可避免的,但可以使用资源控制协议将其降到最低限度。解决优先级反转问题的常用方法主要有两种:采用优先

13、级继承协议与采用优先级天花板协议。1优先级继承协议为防止发生优先级的反转,多任务内核应允许动态地改变任务的优先级。如果一个任务占有被高优先级任务所请求的资源,那么,该任务的优先级会暂时提升到与被该任务阻塞的所有任务中优先级最高的任务同样的优先级水平,当该任务退出临界区时,再恢复到最初的优先级,这种方法称为优先级继承。目前,很多商业内核都具有优先级继承的功能。优先级继承协议规则如下表所示。优先级继承协议规则协议规则号 描述1 如果资源 R 在使用,则任务 T 被阻塞;如果资源 R 是空闲的,则资源 R 被分配给任务 T2 当较高优先级的任务 T,请求资源 R 时,任务 T 的优先级被提升到 T的

14、优5先级等级3 当任务 T 释放资源 R 后,返回到先前的优先级优先级继承的例子如下:任务 A 是高优先级的,任务 C 是低优先级的。任务 C 首先获得共享资源 S,而任务 A 也请求该资源,优先级继承协议要求任务 C 以任务 A 的优先级执行临界区,这样,任务 C 在执行临界区时,其优先级比它本身的优先级高,这时,中优先级的任务 B 不能抢占任务 C 了,当任务 C 退出临界区时,又恢复到原来的优先级,使任务A 仍为最高优先级的任务,这样,任务 A 便不会被中优先级的任务无限期阻塞了。在优先级继承协议中,任务 T 进入临界区而阻塞了更高优先级的任务,则任务 T 将继承被阻塞任务的优先级,直到

15、任务 T 退出临界区。优先级继承协议是动态的,一个不相关的较高优先级任务仍可进行任务抢占,这是基于优先级可抢占调度模式的本性,并且任务优先级在反转期间,被提升优先级的任务的优先级可以继续被提升,即优先级继承具有传递性。虽然在优先级继承协议中,任务的阻塞时问是有界的,但可能出现阻塞链,从而会加长阻塞时间,甚至造成死锁。2天花板优先级协议优先级继承协议具有死锁和阻塞链问题,而天花板优先级(CeilingPriority)协议可以解决这些问题。如果每个任务的优先级是已知的,对于给定资源( 或控制该资源访问的信号量) ,其优先级天花板是所有可能需要该资源的任务中最高的优先级。例如,资源 R 被三个任务

16、A, B 和 C 所需要,任务 A 具有优先级 5,任务 B 具有优先级 7,任务 C 具有优先级 10,那么资源 R 的优先级天花板为 10。当一个任务 T 请求资源 R 时,其遵循的天花板优先级协议如下表所示。天花板优先级协议规则协议规则号 描述1 如果资源 R 在使用,则任务 T 被阻塞2 如果资源 R 是空闲的,则资源 R 被分配给任务 T。如果资源 R 的优先级天花板比任务 T 的优先级高,则任务 T 的优先级被提升到资源 R 的优先级天花板等级。在任意给定时间,任务 T 的执行优先级等于所有它占有的资源中最高优先级天花板3 当具有最高优先级天花板的资源被释放时,将任务 T 所占有资

17、源的最高优先级天花板分配给它4 当具有最高优先级天花板的资源被释放时,将任务 T 所占有资源的最高优先级天花板分配给它使用天花板优先级协议时,一旦某任务获得该资源或暂无其他较高优先级的任务竞争同样资源时,则此任务便继承该资源的优先级天花板,即使没有其他较高优先级的任务竞争同样的资源,也要继承该资源的优先级天花板。这意味着访问某临界资源的所有任务的临界区具有同样的天花板等级。63优先级天花板协议优先级天花板是指控制访问临界资源的信号量的优先级天花板(简单的说,就是某个临界资源的优先级天花板),信号量的优先级天花板是所有使用该信号量的任务中具有最高优先级的任务的优先级。在任意时刻,一个运行系统的当

18、前优先级天花板(priority ceiling)是此时所有正在使用的资源中具有最高优先级的优先级天花板。例如,系统中有 3 个资源正在使用,资源 R1 的优先级天花板为 4,资源 R2 的优先级天花板为 6,资源 R3 的优先级天花板为 9,则系统当前的优先级天花板为 9。在优先级天花板协议下,一个请求任务只可以被一个任务阻塞,不会发生传递阻塞(即产生阻塞链),也不会发生死锁。当一个任务 T 请求资源 R 时,其访问控制协议规则如下表所示。优先级天花板协议规则协议规则号 描述1 如果资源 R 在使用,任务 T 不能获得所申请的资源 R,则任务 T 被阻塞2 如果资源 R 空闲且任务 T 的优

19、先级比当前优先级天花板的高,即任务 T 的优先级高于所有当前被其他任务所获取的资源的优先级天花板,则资源 R分配给任务 T;当任务 T 的优先级低于当前优先级天花板时,即使请求的资源 R 空闲时,任务 T 仍会被阻塞,即优先级天花板阻塞3 如果当前天花板属于任务 T 当前保持的资源之一,则空闲资源 R 分配给任务 T;反之,任务 T 被阻塞4 任务 T 将按被分配的优先级执行,除非该任务在临界区执行过程中阻塞了其他高优先级的任务。如果任务 T 阻塞了高优先级的任务,则任务 T 将继承被它阻塞的具有最高优先级任务的优先级,并且按此优先级继续执行,直到它释放每个优先级天花板高于或等于任务 T 的优

20、先级的资源,然后,恢复到原来的优先级结论:在动态优先级调度算法中,会根据任务的资源需求来动态的分配任务的优先级,虽然在任务创立是赋予了优先级,但是任务的优先级可以用内核提供的调用进行改动。动态改变任务的优先级使得嵌入式应用更加适应于外部事件的灵活性,建立真正的实时响应系统。然而,在使用这种功能时,要注意不要滥用,以免导致优先级反转、死锁,甚至系统崩溃。参考文献:1张友生主编。系统分析师教程。清华大学出版社,2010 年 2 月。72探矽工作室,胡继阳,李维仁,柯力群,张志龙著。嵌入式系统导论。中国铁道出版社,2005 年 06 月第 1 版。3朱珍民,隋雪青,段斌编著。嵌入式实时操作系统及其应用开发。北京邮电大学出版社,2006 年 12 月第一版。4罗蕾主编。嵌入式实时操作系统及应用开发。北京航空航天大学出版社,2005 年 1月第 1 版。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报