实时Ada应用的架构视角与Ravenscar任务模型解析
1. 实时系统任务处理挑战与应对策略
在实时系统中,将系统功能分解为任务是一项具有挑战性的工作。因为这种分解可能会导致任务需要在多个时间约束的事件到达时执行,这往往会引发广泛的优先级反转问题。即使在相对较低的利用率水平下,系统也可能会错过时间约束。
为了改善从具有不同时间约束的源接收消息的任务处理,可以采取以下策略:
-
多队列消息处理
:让这类任务的传入消息进入多个队列,每个队列对应一个时间约束。然后,任务按照时间约束递增的顺序(非抢占式截止时间单调顺序)检查每个队列,从而最大程度地减少优先级反转。
-
任务处理负载分配
:在具有不同时间约束的任务中仅进行最小限度的处理,将更广泛的处理负载推给处理具有单一时间约束(并具有适当优先级)活动的任务。
目前,管道方法被用于构建命令和控制系统、空中交通管制系统,偶尔也用于车辆模拟系统。此外,它还偶尔应用于卫星地面系统和潜艇作战控制系统等领域。
2. 客户端 - 服务器架构
客户端 - 服务器架构在使用Ada任务方面与管道架构类似,但消息传播涉及等待对每个发送消息的返回消息,从而利用远程过程调用。Ada 95在分布式系统附件中描述了这种处理方式,不过实现方面的支持并不迅速。
目前,采用客户端 - 服务器架构构建的系统正在使用可用于CORBA的Ada绑定,并有望在实时CORBA 1.0扩展可用时使用其提供的功能。客户端任务的定义与管道架构中的定义类似,而优先级向服务器任务的传播则使用CORBA机制处理。
虽然客户端 - 服务器架构尚未在Ada实时应用中广泛使用,但随着CORBA的发展,预计该架构模型将被许多以前使用管道方法实现的应用领域所采用,包括空中交通管制、命令和控制、工业自动化和监控系统等。
3. 架构选择对实时系统的影响
对于特定系统而言,架构家族的选择对实时系统的许多关键成功因素有着重大影响。
-
单处理器或联合处理器应用
:最有可能的选择是时间线或事件驱动架构。除了安全关键系统外,从应用内部复杂性、可维护性、可靠性和生命周期成本等方面考虑,精心设计的事件驱动方法是最佳选择。
-
分布式应用
:目前可能会选择管道方法,同时需要仔细关注消息优先级管理、通信延迟(通常仅随机有界)和处理器利用率。这是因为现有的实时客户端 - 服务器方法的基础设施不够成熟,缺乏资源管理支持。随着实时CORBA扩展的出现,CORBA将为许多分布式应用提供一个强大可行的客户端 - 服务器替代方案。
Ada 95提供了强大的同步替代方案(受保护对象)以及实时附件中描述的其他更改,使得Ada非常适合单处理器或分布式处理器对实时系统的支持。Ada的功能可以与这里介绍的任何架构选择一起使用,但并非Ada中的每个功能都应在实时系统中使用。
4. Ravenscar任务模型简介
传统上,高完整性系统通常不使用高级语言特性(如并发),尽管这类系统本质上是并发的。传统方法将并发视为系统问题,并开发了诸如循环执行器等替代方法来解决并发问题,但这导致了系统缺乏内聚性,难以分析,更难以进行正确性的形式证明。
Ada社区长期以来认为,Ada语言的静态属性、强类型功能以及相对较少的实现依赖和未指定行为,有可能开发出可证明正确的程序。Ada 95引入了一些新的与任务相关的功能,有助于改进并发行为的规范,并允许限制语言特性以提高性能、可预测性或正确性。
在第8届国际实时Ada研讨会上,开发了一种名为Ravenscar任务模型的并发模型,该模型有可能使Ada任务的验证成为现实。
5. Ravenscar配置文件
Ravenscar模型几乎消除了所有包含实现依赖和未指定行为的Ada任务构造。ISO/IEC - JTC1/SC22/WG9/HRG Ada安全和安全报告组指出,Ravenscar任务配置文件提高了应用程序并发方面验证的有效性,并克服了与定时和调度问题相关的大部分困难。
该模型的规范显著推进了并发程序的证明方式,因为可以证明任务运行时系统正确实现了该模型。目前,只有一个Ravenscar模型的实现(Raven),该实现可以与应用程序一起进行认证,但尚未对内核本身或使用该内核的应用程序进行形式分析。
之前有一些工作对不同的运行时系统进行了形式验证,例如在一个简单的实时操作系统中,为支持受限的Ada 95任务模型而对内核进行形式开发。该内核使用原型验证系统(PVS)的逻辑进行规范,系统的时间属性使用嵌入在PVS中的实时逻辑(RTL)表达,所使用的Ada子集与Ravenscar配置文件类似。
6. 受保护对象
Ravenscar模型为高完整性并发系统增加的一个主要功能是确定性的任务间通信和同步能力,这一能力由“受限”形式的受保护对象提供。Ravenscar配置文件对受保护对象进行了多方面的限制,同时也对其他任务特性进行了限制,从而极大地简化了受保护对象的行为:
-
单入口和单调用任务
:一个受保护对象只能有一个入口,并且只有一个任务可以调用该入口。
-
简单入口守卫
:入口守卫只能是一个简单的布尔值。
-
禁用异步控制转移
:禁止异步控制转移。
-
禁止重新排队
:不允许重新排队操作。
-
消除延迟和“else”选项
:在入口调用中消除延迟和“else”选项。
-
明确并发函数调用支持
:第9届国际实时Ada研讨会明确了Ravenscar模型,要求实现必须记录是否支持并发受保护函数调用。
-
任务嵌套限制
:任务不能嵌套在子程序、块或其他任务内部。
-
任务永不终止
:任务不会终止。
-
任务无入口
:任务没有入口。
-
无无检查的内存释放
:没有对任务或受保护对象的无检查内存释放。
-
无相对延迟语句
:不存在相对延迟语句。
-
强制使用实时包
:强制使用基于优先级调度的实时包。
这些限制几乎消除了Ada运行时中的所有非确定性行为。基于这些限制以及受保护对象的精确Ada规范,应该能够完全规范受保护对象模型的行为,进而规范一组任务的行为,每个任务具有唯一的优先级,并在单个CPU上执行,使用受保护对象实现简单的任务间通信和同步。
7. Mana项目
Mana项目的目标是使用形式开发方法学开发一个符合Ravenscar的Ada运行时环境(RTE)。该项目将对一个完整的运行时系统进行建模,所使用的工具是Uppaal。通过Uppaal,可以证明模型和内核的正确性,并对Ada/Ravenscar的任务使用进行推理。
在相关论文中,对受保护对象进行了描述和分析,包括异常行为。在分析中,对一些定时要求进行了建模,这些要求将来自应用程序软件,用于描述从最佳情况执行时间(BCET)到最坏情况执行时间(WCET)的定时行为。
8. 定时自动机和Uppaal
Uppaal是一个用于实时系统建模、仿真和验证的工具包,由乌普萨拉大学和奥尔堡大学联合开发。它基于约束求解和在线技术,适用于可以建模为具有有限控制结构和实值时钟的非确定性进程集合的系统,这些进程通过通道和(或)共享变量进行通信。
Uppaal由三部分组成:
-
描述语言
:一种具有数据类型的非确定性受保护命令语言,用于将系统行为描述为扩展了数据变量的定时自动机网络。
-
模拟器
:用于在早期建模或设计阶段检查系统可能的动态执行情况,从而在模型检查器进行验证之前提供一种低成本的故障检测方法。
-
模型检查器
:用于全面覆盖系统的动态行为,进行自动化分析。
之前有一些关于Ada和Uppaal的工作,给出了Ada任务模型与形式模型定时自动机之间的关系,并提供了将Ada任务构造转换为定时自动机以及反之转换的一些指导原则。
9. Uppaal模型
定时自动机(TA)是一种有限自动机,通过为每个自动机添加实值时钟并为每个转换添加作为启用条件的守卫来扩展时间。Uppaal中的系统模型由一组定时自动机组成,用于建模系统的有限控制结构,此外还使用了一组有限的时钟和整数变量。
以图1中的模型为例,该模型由ProcedureCall和Procedure两个组件组成,具有控制节点A、B、C等,使用了两个时钟TP1、TauP和十个通道Ps、Pe等。自动机的边可以有三种可选标签:
-
守卫
:表示时钟和整数变量的值必须满足的条件,例如Procedure.J和Procedure.F之间的边只有在变量ECount的值为零时才能被选择。
-
同步动作
:在边被选择时执行,例如两个进程可以通过通道Ps、Pe等进行通信,Ps!和Ps?表示在通道Ps上的发送和接收互补动作。
-
时钟重置和变量赋值
:例如,当从ProcedureCall.B到ProcedureCall.C的转换发生时,时钟TauP被重置为0;当在ProcedureCall.C和ProcedureCall.D之间的转换发生时,整数变量Barrier被设置为1、0或保持不变。
控制节点还可以有不变式,用于表示控制要停留在特定节点时对时钟值的约束。例如,在图1中,控制只有在TauP的值小于100时才能停留在ProcedureCall.C节点。
为了防止网络在两个组件已经可以同步的情况下延迟,通道可以被声明为紧急通道(如图2所示),即一旦可以执行就会立即执行。状态也可以被标记为紧急状态(用u: - 前缀表示),用于表示组件应该立即执行的情况。
以下是相关的代码:
// Variables
clock TauF, TauP, TauE, TP1;
int Lockp, Barrier, ECount;
chan Es, Ee, Ex, Ps, Pe, Px, Fs, Fe, Fx, Eg,
Ef, UEb, UEe, UEx, UPb, UPe, UPx,
UFb, UFe, UFx;
urgent chan Release, Seize;
// System
system Function, Procedure, Entry, Lock,
ProcedureCall, EntryCall, FunctionCall;
综上所述,实时Ada应用在架构选择和任务模型设计方面有多种考虑因素。管道方法和客户端 - 服务器架构各有特点和适用场景,而Ravenscar任务模型通过严格的限制提供了确定性的任务间通信和同步能力。Uppaal作为一种强大的建模和验证工具,为实时系统的开发和分析提供了有力支持。在实际应用中,开发者需要根据系统的具体需求和特点,选择合适的架构和方法,以确保系统的性能、可靠性和正确性。
实时Ada应用的架构视角与Ravenscar任务模型解析
10. Uppaal模型的详细分析
Uppaal模型在实时系统建模中具有重要作用,下面我们进一步深入分析其在实际应用中的特点和优势。
10.1 时钟与变量的作用
在Uppaal模型中,时钟和变量是非常关键的元素。时钟(如TP1、TauP等)用于记录时间信息,帮助我们描述系统的时间约束。例如,在上述模型中,通过时钟可以限制某些操作的执行时间,确保系统在规定的时间内完成任务。变量(如Lockp、Barrier、ECount等)则用于存储系统的状态信息,不同的变量值代表着系统处于不同的状态。这些变量和时钟相互配合,使得我们能够精确地描述系统的行为。
| 名称 | 类型 | 作用 |
|---|---|---|
| TP1、TauP | 时钟 | 记录时间信息,用于时间约束 |
| Lockp、Barrier、ECount | 整数变量 | 存储系统状态信息 |
10.2 通道的通信机制
通道(如Ps、Pe、Px等)是Uppaal模型中实现进程间通信的重要方式。通过通道,不同的进程可以进行数据的传递和同步。例如,当一个进程发送消息(如Ps!)时,另一个进程可以接收该消息(如Ps?),从而实现信息的交互。这种通信机制使得系统中的各个组件能够协同工作,完成复杂的任务。
graph LR
A[进程1] -- Ps! --> B(通道Ps)
B -- Ps? --> C[进程2]
10.3 紧急通道和紧急状态的意义
紧急通道(如Release、Seize)和紧急状态(用u: - 前缀表示)的引入,是为了确保系统在某些情况下能够及时响应。紧急通道一旦可以执行就会立即执行,避免了系统在可以同步的情况下出现延迟。紧急状态则用于标记那些需要立即处理的情况,保证系统的实时性。
11. 实时系统架构选择的决策流程
在选择实时系统的架构时,需要综合考虑多个因素。下面是一个决策流程,帮助开发者根据系统的特点选择合适的架构。
graph TD
A[系统类型] --> B{单处理器或联合处理器应用?}
B -- 是 --> C{安全关键系统?}
C -- 是 --> D[时间线或事件驱动架构]
C -- 否 --> E[精心设计的事件驱动方法]
B -- 否 --> F{分布式应用?}
F -- 是 --> G[管道方法]
F -- 否 --> H[其他考虑]
12. Ravenscar任务模型的优势与局限性
12.1 优势
- 确定性 :Ravenscar模型通过对受保护对象和任务特性的严格限制,几乎消除了Ada运行时中的所有非确定性行为,使得系统的行为更加可预测。
- 可验证性 :该模型的规范使得可以对任务运行时系统进行正确性证明,有助于提高系统的可靠性。
- 简化设计 :对任务和受保护对象的限制简化了系统的设计和分析过程,降低了开发难度。
12.2 局限性
- 功能受限 :由于对任务和受保护对象进行了大量限制,可能会导致一些复杂的功能无法实现,在某些情况下可能无法满足系统的需求。
- 实现难度 :虽然该模型提高了可验证性,但在实际实现过程中,可能需要对现有系统进行较大的改造,增加了实现的难度和成本。
13. Uppaal在实时系统开发中的应用步骤
Uppaal作为一种强大的实时系统建模和验证工具,在实际开发中可以按照以下步骤进行应用:
- 系统建模 :使用Uppaal的描述语言,将系统的行为描述为定时自动机网络。这需要明确系统的组件、状态、转换规则以及使用的时钟和变量。
- 参数设置 :设置时钟、变量和通道的初始值和相关参数,确保模型能够准确反映系统的实际情况。
- 仿真分析 :使用Uppaal的模拟器,在早期建模或设计阶段检查系统可能的动态执行情况,发现潜在的故障和问题。
- 模型验证 :使用Uppaal的模型检查器,对系统的模型进行全面的验证,确保系统满足设计要求和时间约束。
- 结果评估 :根据仿真和验证的结果,对系统的设计进行评估和优化,必要时对模型进行调整和修改。
14. 实时系统开发的未来趋势
随着技术的不断发展,实时系统开发也呈现出一些新的趋势。
14.1 智能化
实时系统将越来越多地融入人工智能技术,实现智能决策和自适应控制。例如,在工业自动化领域,实时系统可以根据传感器数据和机器学习算法,自动调整生产过程,提高生产效率和质量。
14.2 分布式与云计算
分布式系统和云计算的应用将越来越广泛,实时系统可以通过分布式架构实现资源的共享和协同工作,提高系统的性能和可靠性。同时,云计算可以提供强大的计算能力和存储资源,支持实时系统处理大量的数据。
14.3 安全性增强
随着实时系统在关键领域的应用越来越多,安全性将成为一个更加重要的问题。未来的实时系统将更加注重安全机制的设计和实现,确保系统的信息安全和可靠性。
15. 总结
实时Ada应用在架构选择和任务模型设计方面需要综合考虑多个因素。管道方法和客户端 - 服务器架构各有其适用场景,而Ravenscar任务模型通过严格的限制提供了确定性的任务间通信和同步能力。Uppaal作为一种强大的建模和验证工具,为实时系统的开发和分析提供了有力支持。
在实际开发中,开发者需要根据系统的具体需求和特点,选择合适的架构和方法。同时,要充分认识到各种架构和模型的优势和局限性,不断探索和应用新的技术和方法,以适应实时系统不断发展的需求。未来,实时系统将朝着智能化、分布式和安全性增强的方向发展,为各个领域的应用带来更多的机遇和挑战。
12

被折叠的 条评论
为什么被折叠?



