2.3数据资源模型
除了通信定时信号触发和运行指令信号触发控制模块的运行和等待外,数据资源约束是控制模块运行的最有效手段。各模块运行的最主要目的是进行数据的获取、处理、传输和存储等操作。并且各模块处理所需的数据在时序上具有前后逻辑关系,这就保证了采用数据约束触发模块的运行和等待是最有效的方式。并且当模块由于数据资源约束而无法操作时,马上释放对CPU的控制,与各步骤都采用精确定时相比,其在时间消耗上也是比较经济的策略。只是系统调度的消耗占用了部分时间。模块功能不同,所涉及的数据操作不同,我们认为导致数据改变的情况主要有3种:①在实时运行过程中,产生新的过程数据;②被不同的模块异步改变;⑨被实时模块和非实时模块改变。各模块取得或者修改数据需要根据既定的规则进行,否则整个实时加工的过程变得不可预测。下面给出数据管理和调度的规则和约束。
任何模块可以向数据服务申请开辟数据区,申请数据结构的可以是数组、链表和树。但是节点必须是数据服务中既定的数据类型,也可以是既定数据类型的子类。一旦新开辟的数据区建立,其类型不可修改,同时开辟的还有与之相对应的规则对象。规则对象适用于所有共享该数据区的模块,需要操作该数据区的模块必须先在对象规则中注册自己的position,该position唯一的标识了与该模块相关的对同一数据区操作的其他模块所注册的position之间的约束关系。约束关系根据数据区的数据结构决定,如采用链表的数据结构时,position的约束为前后约束关系。一个模块在单一数据区中只注册唯一的position。确定position的目的是能够保证在调度过程中数据的完备性和有效性。同时position的约束限制也是调度的触发判定依据或条件之一。
2.4任务服务模型与系统实时运行
任务服务是系统模块配置和实时运行的核心,接受模块调度申请、并根据当前的参数和数据资源约束状况返回申请的结果,所申请模块根据反馈信息实现模块内部的动作。每~注册模块在任务服务中都有对应的标志,该标志包括模块运行状态,可调度约束等内容。
在系统运行过程中,各模块之间的切换关系是时变的。并且可能存在几个模块同时运行的状况,此时各模块的实际运行根据模块设定的优先级竞争决定。在模块受到数据资源约束处于等待状态时,所请求的触发运行模块也是根据数据资源状况的不同而请求触发不同模块,所以在运行过程中只能设定模块的运行、等待、调度请求和结束等动作的规定。具体调度服务算法步骤如下所述。
(1)当注册模块的运行状态标志为结束时,该模块为挂起模块,任何模块申请调度该模块的请求无效。
(2)模块正常运行,并设置运行优先级,当模块运行阻塞,启动该模块的调度申请,并根据该模块当前运行参数决定调度申请对象,模块处于等待状态,等待申请返回信号。
(3)当任务服务收到请求信号时进行任务分配检查,询问模块状态管理,如果所申请模块为任务挂起,则返回任务申请失败;如果为任务运行状态则返回任务申请成功转(2);如果为等待状态,则查询该模块的运行条件是否满足,如果满足,运行该模块,并设置该模块标志为运行状态,返回申请成功;否则返回申请失败。
(4)信号(如通信触发信号和运行指令信号)可以向任务服务申请调度,而任务服务的响应与(3)相同,只是信号无需返回申请结果信息。
(5)当前各实时运行模块抢占CPU的能力根据各自的运行优先级决定,在申请等待过程中,需要设置自身模块为等待状态,释放CPU。
(6)当所有实时模块均为挂起状态,并且通信触发标志为假时,任务服务认为实时运行过程结束,设置服务结束参数。