Ada是否实时需要底层操作系统?

时间:2016-01-11 12:39:50

标签: real-time ada

通过阅读文档我已经理解,Ada实时模块与操作系统完全隔离。没有底层操作系统和资源管理器就可以实现并发。 Ada处理任务调度,时间管理,任务状态转换,列表管理,任务优先级,锁定策略,调度策略,ISR,任务间通信等。

如果是这样,那么Ada实时模块是一种实时操作系统?

1 个答案:

答案 0 :(得分:11)

是和否。

Ada程序需要的是它自己的RTS(运行时系统) - 相当大的代码块(在另一个最近的问题中)将“Hello World”膨胀到几百千字节。这根本不反映Ada的“效率”或其他方面,无论程序的大小如何,它都是一次性成本,对于任何重要的程序 - 例如涉及并发性 - 它与您必须为其他解决方案添加的库竞争。

问题是 - 运行时系统是如何实现的?如果您在标准模式下使用标准的现成Ada编译器(Gnat),您将得到一个RTS,它将Ada并发工具分层放在“pthreads”(Posix线程)包之上,以处理低级细节。这显然是在操作系统之上。 Here's a detailed description.

但是还有其他解决方案可以提供相同的设施,可以使用RTOS,也可以使用Ada RTS本身在裸机CPU上,甚至根本不提供(如果你没有并发)重新定位具有1K内存的嵌入式微控制器。

您可以通过在构建命令(gnatmake或其他)中添加--RTS=path/to/my/rts选项来为另一个RTS构建任何Ada程序。

对于工业用途,Adacore自己提供commercial support for VXWorks

RTS for embedded ARM CPUs的示例,分层在FreeRTOS或其他RT操作系统上。 (这里很好supporting blog)。这些可能无法提供完整的Ada任务设施,但可能无法提供选定的子集,例如RAVENSCAR配置文件,它适用于小型系统实现(例如12K左右的ARM Thumb代码)和formal proof of correctness(RAVENSPARK)。

由于这些部分是open source community effort,因此工作分散,并且可能无法提供您在评论中提到的所有通信协议,但是Ada与C库的简单接口使得为缺少的组件添加Ada包装器相对容易。我怀疑社区会欢迎额外的帮助来覆盖其余的基地!

有些协议可供使用,但由于人们很少听到Ada的赞美,所以他们没有广泛宣传,可能需要一些挖掘才能找到。例如,这是一个与某些工业工具使用的MBUS protocol接口的库。 same author还提供了libusb binding的初步版本。

如果您对使用最小RTS运行Ada的机制感兴趣并且下面没有操作系统,那么OSDev Wiki上的"Ada Bare Bones"页面可能会很有趣。这适用于i386,但AVRMSP430微控制器存在类似的“裸骨”RTS。

This book看起来像另一个有用的资源,附带its own website上的教程资料。

对于更理论化的治疗,John McCormick's book "Building parallel, real time and embedded applications in Ada"很有价值。

还有一个链接:当你提到GUI时,我建议你看一下用Ada编写的the Gnoga framework,你的应用程序提供可在任何浏览器上查看的网页。