微核
软件实时系统的核心是一个微核,它的中断处理和任务调度是完全可编程的。微核由两个相互作用的虚拟机E(嵌入)机和S(程序调度)机构成。运行在微核上的系统代码分别进入E和S代码。E代码管理系统和物理环境的相互作用。E代码的执行由环境中断触发,它发送例如,信息或传感器值的到来等外部事件的信号,和应用任务给S机,S代码管理处理器和系统的相互作用,S代码的执行由硬件中断触发。它发送内部事件例如任务的执行过程和时间片的信号,并发送应用任务到CPU,有可能优先一个正在运行的任务,系统的这种划分使得实时执行过程的两个主要部分毫不相关,E代码依赖于环境时间,由此定义以独立硬件和独立调度程序方式的系统反应性。S代码依赖于CPU时间和定义一个系统调度程序,如果两者的时间线路是一致的话,那么这个代码就称为时间安全,时间安全的违背通过运行时间的异常由可编程的方式重新被处理。
E机由环境事件,例如通道信息的到来或传感器新值的到来,造成的外部中断所触发,一旦触发,E机跟随E代码指令做三件事:第一、运行一些处理传感器的驱动器,调节器,网络和其他设备;第二、释放一些用于执行的应用软件任务;第三、更新触发顺序,其中包括多对form(e,a),表明了未来环境事件e将导致一个中断,它将触发具有可编程计数器的E机到E代码地址a,然后,E机返回到休眠状态并将CPU控制权让步于S机。
S机由E机或处理器事件,例如应用任务的完成或时间片的完成,造成的内部中断唤醒,一旦被触发,S机跟随S代码指令做三件事情:第一、监视处理器和存储管理,例如,上下文转换;第二、发送一个单一任务CPU,可能是一个应用软件任务和一个特别闲散任务;第三、规定多对form(i,a)表明未来处理程序事件i 将导致一个中断,这个中断触发具有编程计数器装置的S机到S代码地址a。总之,E机和S机构成了一个执行硬实时任务的可编程的微核。
E机是一台虚拟机,它实时地调节软件过程和物理过程之间的相互作用。它把嵌入程序的编辑分为两个阶段,第一,在独立于平台的编译程序阶段生成E代码(由E机执行的代码);第二,依赖于平台的编译程序阶段检测E代码的时间安全。
E代码的非控制流指令E代码主要有三个非控制流指令,在E机实际运行中E代码也有控制流指令,例如条件或绝对突变。
(1)call(d)指令:初始化驱动器d,因为驱动器程序是同步系统级代码,在处理卜一指令前嵌入程序模式一直等待,直到驱动器d完成。
(2) schedule(t)指令:释放一个任务t进就绪队列,与其它释放任务并列,“调度”指令按照某种调度策略,从队列中选择任务执行。
(3) future(g, a)指令:在某一未来时间进行判断,激活触发器(g,a,s),若判断为真,触发执行地址a标记的嵌入代码模块;否则,处理下一条“嵌入”指令。
call( d)指令将激发驱动器d的二进制代码。E机等待直到d执行结束,接h来执行h一个指令。Schedule(t)指令通过将其插入到任务集的方式记录任务t的二进制代码。接着E机马上移向h一条指令。Future(g,a)指令记录在地址a的E代码用于将来当触发器g计算出来的下一个值为真时(可能)的执行。从操作上讲,E机将触发器(g,a,s)绑定到触发器序列中,其中s是当前程序的状态,然后接下来处理下一条指令。如果没有下一条指令,E机就会解除对CPU的控制并随着激活每一个事件来评估所有在触发器序列中的触发器。如果触发(g,a,s)绑定是有效的,就从触发器队列中移出,在地址a处的E代码被执行。其中的触发器g代表中断,在地址a的E代码代表中断处理器。
E代码的特征E代码是可预测的,可移植的硬实时代码,E代码是硬实时的,因为它和环境(物理)时间相关,而不是和平台(CPU)时间相关。E代码是可预测的,因为程序的计时和行为依赖于外部的输入,没有内在的竞争条件。E代码是可移植的,因为它独立于平台之外,特别是。这些特征结合在一起使得时间安全成为可能。
实例这是一个具有周期任务的实例,设一个装有导航装置的汽车,考虑汽车在自动模式m下,有两个任务,可能由Matlab/Simulink模型自动生成控制任务t1和行驶任务t2。行驶任务过程GPS每隔10ms输入并提供过程数据给控制任务。控制任务读取附加的传感器数据,计算控制法则,写结果到调节器。控制任务每20ms执行一次,数据通信需要三个驱动器:传感驱动器ds,它给行驶任务提供GPS数据,连接驱动器di,它把行驶任务的结果提供给控制任务;调节驱动器da,装载控制任务的结果到调节器中。只要驱动器的Wcet可以忽略,就可以用简单的方式处理数据。有两个环境端口即时钟端口Pc和GPS传感器Ps,两个任务端口,一个用于每个任务的结果,三个驱动器端口(三个驱动器的目的地)包括调节器Pa。
图1显示了程序的拓扑结构,其中,球形表示端口,用长方形表示任务,菱形表示驱动器,圆圈表示触发器。下面程序时间控制的E代码:
a1:call(da) a2: call(ds)
call(ds) schedule(t2)
call(di) future(g,a1)
schedule(t1)
schedule(t2)
future(g,a2)
E代码包含两块,在地址a1处的块在开始阶段即0ms处执行,它调用三个驱动器,为任务和调节器提供数据,然后传递两个任务到最终激活地址a:处的触发器。当这块完成后,E机的触发序列包含地址a2处的触发器,包含两个任务t1和t2。现在E机放弃了控制权,只是唤醒致使触发器g评定为真的下一次输入事件。与此同时,根据一些调度安排接管和分配CPU时间给在等待序列中的仟务。当仟务完成,把它从序列中移除。1