GNAT Pro在关键任务航天应用中的运行机制与优势
1. 编译流程与中间表示
编译器会对源代码进行处理,生成简化代码,这是一种低级的Ada伪代码(与目标无关),它将复杂的结构扩展为一系列更简单的数据和代码(包括运行时调用)。随后,该代码会被编译成汇编代码,最终转换为目标代码。这些中间表示的存在有助于目标代码的认证,因为它缩小了不同表示之间的语义差距。此外,还可以访问已声明类型和对象的表示信息。
同时,提供了完整的安全与安保附件支持,包括通过编译器警告和运行时错误(使用 pragma Normalize_Scalars 以及用户可选择的一些额外有效性检查级别)来检测未初始化变量的功能。
2. 受限的Ravenscar运行时
2.1 运行时系统架构
运行时系统由多个库组成,这些库实现了编译器无法直接生成的功能。运行时的复杂性主要取决于所支持的特性。
为充分利用Ravenscar配置文件的限制,设计了一个紧凑高效的运行时,它与无此限制时使用的运行时有很大不同。Ravenscar运行时为任务和同步操作提供了简化、更高效的版本。
其采用分层架构来隔离目标依赖。有一个与目标无关的层,即GNU Ada运行时库(GNARL),它提供了编译器已知的接口。依赖于特定机器和操作系统的运行时部分称为GNU低级库(GNULL),它提供了一个与目标无关的接口。GNULL是一些粘合代码,将通用接口转换为对操作系统接口的调用,从而便于移植。在裸机目标(如ERC32)上,GNULL是该接口的完整实现。
将运行时重新定位到不同的操作系统,只需将GNULL接口(大约十几个用于创建
超级会员免费看
订阅专栏 解锁全文
22

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



