欢迎随时咨询,QQ一直隐身在线的哦
24小时IT服务热线:170-9082-5499

“好奇号”火星车上的软件吧曝光

【字体: 打印文章
 

   我十分好奇,忍不住想推测一下“好奇号”火星车上的软件究竟是个什么样的构造。我们已经知道,好奇号上的软件大部分都是用C语言写成的,这些代码加起来大概有250万行。有人可能会感到诧异,这样复杂的系统怎么能写出来而且能让它好用?下面是来自Erlang程序员的观点。

“好奇号”火星车上的软件吧曝光

   首先来些基础的。“好奇号”火星车使用的是核动力,它能持续的受控的方式提供给火星车能量。这个能量源同时还要负责平时对火星车进行加热——这是在火星表面极端天气环境下对火星车的必要保障。

   “好奇号”基本上是自主控制的。它发送一条信息可能要用几分钟到几小时的时间,你只能在火星上一天里的有限时间段内给它发送信息。“好奇号”自己可 以和地球通话,但这条线路速度很慢。它也可以通过围绕火星飞行的人造卫星进行通信,把卫星作为上行线路中继,这样更快。这种情况表明:火星车必须要能自主 行动。我们不能让一个人坐在地球上的某个椅子里拿着操纵杆来指导它。

   “好奇号”火星车上安装有两个完全一样的计算机。我们注意到美国宇航局正是按照Joe Armstrong(Erlang编程语言的创造人)的话做的:“要想获得一个可信赖的系统,你需要两台计算机”。一个一直处于休眠状态,一旦另一个由于 异常情况死机,它可以随时受命接管系统。这样的做法在Erlang语言系统里、在OpenBSD PF防火墙等其它软件里都是很典型的接管方案。“好奇号”上使用的计算机是BAE systems RAD750。处理器是PowerPC ISA,速度非常的快。200百万赫兹, 150或250纳米 的制造工艺,它工作时对能允许的温度范围的表现非常优秀。它是经过抗辐射加固的,能经受相当强的辐射侵袭。内存也是抗辐射的。“好奇号”上的计算机里的每 个硬件都不是随随便便一个东西能胜任的。

   “好奇号”的操作系统使用的是VxWorks。它属于标准的的微内核系统。保守的估计,它的内核代码应该少于1万行,而且经过了严格的测试。也就是说,这个内核接近零bug。它的一个主要特征就是隔离。火星车上的各个模块都是相互隔离的。有些子系统对火星车的生命起着至关重要的作用,而另外一些只是用于科学观察的设备。所以,我们可以肯定这样一个事实,“好奇号”上的250万行代码中,只有一部分代码是深度测试杜绝了bug的。车上的有些程序并不是生命必须的。

   美国宇航局使用了各种办法来确保代码质量。例如,递归调用是要求避免的,这是这因为C语言编译器不能保证递归堆栈不被撑破。循环要确保有终止点,这 通过一个静态分析器来发现这些问题。所有的内存使用都几乎是静态分配的,这样避免了突然的内存收集产生的混乱和不可预知的性能问题。我们还可以发现讯息传递(Message Passing)作为子系统间的消息传递方式在火星车是被当作了首选。不存在互斥,不存在软件事务性内存。同样,隔离概念也是编码指导原则上的一部分。通过对内存进行保护和数据的单一归属关系,子系统之间就很难影响对方。Erlang程序员都很习惯这样的做法。

“好奇号”火星车上的软件吧曝光

“探路者”号火星车

   当年的“探路者”号火星车的架构设计事实上也跟Erlang语言系统的理念相似。它有用于传递消息的“组件”。组件只在接收消息时才等待,发送消息的都是无返回值的函数。它们接受消息采用的是单事件循环,这跟Erlang语言中的 gen_server 工作方式很相似。不同的模块间通过某种协议传递消息进行通信,你可以访问其它模块使用的内存,但按照JPL编码指导原则,这种做法是要避免的。这跟 Erlang语言有所不同,Erlang语言完全禁止这样操作。火星探测漫游者(勇气号和机遇号)拥有更多的组件,但软件基础上相同的。“好奇号”也不例 外。它本质上是在老的软件上改造出来的。系统中的线程数有大几百个,这完美的和一个类似的如此规模的Erlang语言系统中的线程数相匹配。

24小时服务IT服务热线:170-9082-5499     地址:北京市朝阳区798艺术区    电子邮箱:AganSoft@AganSoft.com
阿甘软件 版权所有 京ICP备15007242号-1