微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于系统实时事件驱动和时间驱动相结合的调度方法

基于系统实时事件驱动和时间驱动相结合的调度方法

时间:05-03 来源:百度文库 点击:

表2 Domain状态组合



表2表示了Domain状态组合。表示Domain调度器的调度情况,每个Domain可以处于Run或Ready两个状态,多个Domain的状态组合起来(本文采用2个Domain),就可以制作出Doamin的状态组合表。

表3调度查询表


表3是调度查询表。调度触发事件可以通过它查询到下一个需要被调度运行的GuestOS.它是一个二维的数组,其中列的维度由调度触发事件表示,优先级从高向低排列,另一个行的维度由GuestOS状态组合表示,包含表1的所有GuestOS状态组合。通过这两个维度的输入,可以查询到预期的需要被调度的GuestOS(Domain),作为调度器下一次调度决策的输入。

2.3.3事件置位与清除规则

2.2节图4中表示了调度事件置位和清除规则,说明了3种类型的调度触发事件是如何设置和清除的。

事件置位和清除规则时序如图5所示。图5表示了3种类型的调度触发事件的设置和清除时机,以及事件驱动策略和时间片驱动策略的切换时机,其中S_timer的关闭/打开分别表示开始事件驱动调度/开始时间片驱动调度。图中有5种事件置位/清除操作,其中虚线箭头表示的5种操作是在GuestOS中进行的,需要采用超级调用(hypercall)实现,其中的硬件中断事件置位操作(实线箭头)是在虚拟化操作系统特权空间中进行的,可以直接操作。

2.3.4事件优先级处理策略

当调度触发事件到来时,首先设置事件标识位,然后去检查各类事件组中的标识位。如果有更高优先级的事件存在,返回;如果没有,再检查自己是否是第一个触发事件。如果是,关闭时间片驱动调度策略,开始事件驱动调度策略(关闭S_timer),然后去查询事件驱动调度表,对比当前Domain判断是否需要产生调度。

当调度触发事件响应处理完成后,需要调用hypercall清除,清除该事件的标识位后,要先去检查一下是否有比自己优先级低的事件存在。如果有,就去处理它,查询事件驱动调度表,判断是否需要产生新的调度;如果没有比自己优先级低的事件的存在,表示事件组中没有其他事件存在了,启动事件片调度策略,结束事件驱动调度策略(打开S_timer)。


图5事件置位和清除规则时序图

3测试结果与分析

3.1测试结果

硬件测试环境:ARM926EJS、主频226 MHz、64 MB SDRAM、I/D Cache 16 KB/16 KB enable、MMU enable.软件平台:自研虚拟化操作系统(基于Xen)、Threadx、Linux(参考图1)。测试软件采用LMBench,以及根据实际应用场景设计的大量测试用例。

对本文提出的调度方法和常用的BVT调度算法进行对比测试,测试结果表明系统的实时性响应和系统的运行性能都有较大幅度的提升。根据对大量测试数据的统计,得到以下3个结果:

①GuestOS系统运行性能的平均加速比为:threadx 1.82,Linux 1.94.

②中断响应加速比为:单个GuestOS运行时为8474,两个GuestOS同时运行时为15.6015.且响应时间平稳,有良好的可预测性。

③GuestOS之间的数据通信速度加速比为12.51,且速率稳定。

3.2测试分析

经过实践应用表明,本文提出的方法有效地解决了虚拟化操作系统传统调度方法带来的CPU利用率低、中断响应缓慢、操作系统(GuestOS)之间数据通信速度慢等问题。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top