论文部分内容阅读
复杂实时应用系统的成功设计与实现依赖于底层操作系统调度、资源管理机制的支持以及满足关键实时任务资源充分可预知性的编程语言方面的支撑。对于调度问题,理论上,混合动态优先级调度、支持用户级的带宽预留等算法提供了混合调度的最好方法,但是,目前所有实时操作系统均没有提供和实现上述机制。对关键任务的资源充分可预知性实时要求,普通Java平台没有提供任何解决问题的技术手段。本文研究支持复杂实时应用系统设计实现的上述关键技术和实现方法。在操作系统层面上针对多种类型混合任务集调度提出调度策略并在开源嵌入式实时操作系统中设计和实现混合调度算法与资源管理协议,达到复杂实时应用系统硬实时周期任务满足截止期前提下,软实时非周期任务调度性能提升的整体优化调度目标。在编程语言层面,基于普通Java平台,设计实现实时Java中间件组件并给出控制垃圾回收器GC启动时机的方法,实现普通Java平台下线程的可预测运行目标。本文提出基于服务器方式的混合任务集集成调度策略,给出该策略分层调度的设计思想和混合集成调度框架。该策略底层以操作系统内核调度算法(EDF算法最优)调度应用服务器,各应用服务器分层支持多种单一类型的实时调度算法,整体上形成支持混合任务集调度的集成调度框架。在混合调度策略设计实现上,针对静态优先级抢占调度策略的开源操作系统μC/OS-Ⅱ,首先,以不修改内核的用户级调度服务器方式实现了动态优先级EDF算法,其次,提出基于截止期和关键性双参数混合优先级实现分层混合任务调度算法EDIF的设计思想,其中关键性参数作为区分硬实时和软实时任务的分层信息。文中定义了可接受调度概念,给出EDIF调度模型,理论分析了算法的可调度性条件。EDIF算法在μC/OS-Ⅱ中以扩展内核数据结构,修改内核调度器和相关内核函数的方式设计实现。针对开源操作系统RTLinux硬实时任务重载时软实时任务长期得不到响应性能急剧下降问题,本文实现了基于比例带宽服务器(PDBS)的混合任务调度算法。该算法将任务按类型分别存放于不同的队列,不同类型的任务由绑定了处理器比例带宽的应用服务器调度,各应用服务器按比例共享处理器带宽。PDBS实现方法是:扩展内核结构,将RTLinux单一任务队列改为硬实时任务和软实时双任务队列,任务队列间按本文提出的比例带宽服务器容量计算公式计算分配的处理器时间,内核调度器对硬实时任务队列和软实时任务队列进行比例时间片轮转调度。文中给出调度器核心函数和定时器中断处理函数和一些接口函数和相关处理函数的设计实现过程。另外,本文针对工业界广泛应用的开源嵌入式实时操作系统μC/OS-Ⅱ不支持同优先级任务调度和优先级继承协议的问题,修改μC/OS-Ⅱ内核结构,设计、实现了支持同优先级任务调度的优先级驱动/轮转混合任务集分层调度算法并在其中实现了所有抑制优先级反转的实时设计模式。在普通Java平台实时中间件设计方面,设计目标是确保关键实时线程的运行可预测性。针对等待访问共享资源的Java多线程的不确定性唤醒问题,开发了一个Java实时中间件组件,当共享资源就绪时,该组件可严格按优先级顺序唤醒等待访问共享资源的线程,确保线程按优先级顺序的可预测运行,实现的方法是设计以等比映射扩展了优先级数的可调度类,创建访问共享资源线程的同时为该线程创建一个线程代理,其中包含了所代理线程的唤醒用优先级信息,线程代理集合类负责管理等待访问共享资源的多线程,线程的唤醒按优先级高低顺序在代理集合类中实现,对低优先级Java线程出现的活锁问题,引入实时调度算法LRT动态调整线程优先级,给出了相应的设计和实现方案;针对GC不定期启动影响线程运行可预测性问题,提出周期性提升GC优先级,提前调度GC的解决方案。实现方法是将线程优先级按线程任务的重要程度分为两个等级:关键线程和非关键线程,以虚拟机内存达不到饱和的程度为依据,给出垃圾回收的周期上限TGC计算公式,在运行时间最长不超过TGC的时间内提升GC的优先级为非关键线程的最大值,从而使GC在不影响关键线程运行的情况下能提前回收内存中的垃圾,达到提高通用环境下Java关键线程执行可预测性和实时性能的目的。理论分析和实验结果表明:在新μC/OS-Ⅱ内核中,EDIF分层调度策略、算法设计实现正确、有效,系统超载时(所有任务总处理器利用率>100%),满足所有硬实时关键任务截止期,软实时非关键任务并不丢弃,而是延迟调度执行,软实时非关键任务完成率大幅度提升了24%,混合任务集整体调度性能优良;在新RTLinux内核中,PDBS算法解决了硬实时任务重载时混合实时任务集调度中软实时任务调度性能的有效提升问题;本文开发的实时Java组件中,优先级等比例映射扩展了普通Java线程优先级数,可明确按扩展优先级唤醒大量等待访问共享资源的线程,达到了Java高优先级关键线程优先访问临界资源、运行可预测的设计目标,通过设计实现优先级动态调整算法,可以有效解决按优先级唤醒的Java中间件活锁问题;周期性提升GC优先级至非关键线程优先级的上限,使GC在不影响关键线程的情况下能提前回收内存中的垃圾,消除了GC对关键线程的不可预测运行延迟。在特定开源操作系统中实现EDIF和PDBS算法验证了基于服务器方式的混合任务集集成调度策略和框架的可行性,为开源实时操作系统μC/OS-Ⅱ和RTLinux支持复杂实时应用系统的设计实现提供了有力的底层技术支撑,Java实时中间件的设计实现为基于网络的Java软实时应用奠定了技术基础。