火星上发生了什么

火星上发生了什么
2004-02-21 16:29 
    在勇气号和机遇号登陆火星并重新卷起一股火星热的时候,我找到这篇去年自己翻译的文章,看看当年的小插曲。

From: Mike Jones [email protected]
Sunday, December 07, 1997 6:47 PM

翻译:zhou, 2002

自从1997年7月4日抵达火星表面后,火星探路者(The Mars Pathfinder)一直被大肆宣称为“完美的”。它确实包含了很多成功之处,从它那非传统的着陆方式――被巨大的气囊包裹着蹦蹦跳跳着陆,然后释放出火星探路者――开始,直到它收集并向地球发回的大量火星第一手数据,比如后来流传到Web上并让人叹为观止的各种火星表面全景图。但是在着陆后的第10天,也就是开始采集气象资料后不久,探路者开始犯傻――开始无规律地重启,每次重启都造成了数据丢失,在每天的记者招待会上这都是记者们不会放过的最热门的话题。NASA(美国国家航空航天局)的公共关系部门只是用一些术语比如“software glitches”来解释,他们告知外界,原因是计算机试图同时完成太多的事情所以造成了故障。
    在上周的IEEE实时系统会议上,WindRiver CTO David Wilner给出了一个很有意思的新说法。当然,众所周知,该公司的实时嵌入式内核VxWorks,就用在火星探路者上。在该会议上,他详细解释了哪些真正的软件问题导致了探路者整个系统的重启,以及他们是如何诊断并解决该问题的,让我们分享一下这个故事。
    先了解一些基本情况。
    VxWorks提供基于优先级的可强占调度方式。探路者上的任务均被赋予优先级,采用的是常规方式――按任务的紧急程度――划分优先级。

探路者有一个“information bus”,可以看作是一块共享存储区,该区域用于在探路者的不同组件之间传递信息。当然,随之就有一个总线管理任务,该任务以高优先级运行,负责在总线上放入或者取出各种数据。它被设计为最重要的任务,并且要保证能够每隔一定的时间就可以操作总线。对总线的异步访问是通过互斥锁(mutexes)来保证的。

另有一个气象数据搜集任务,它的运行频度不高,也只有低优先级,它只向总线写数据。写的过程是,申请/获得总线互斥量,进行写操作,完成后释放互斥量。在互斥量被占有的情况下,如果总线管理任务被激活了,试图获得该互斥量,那么总线管理任务会被挂起,最终结果是或者一直等到气象任务释放该互斥量,或者总线任务等待超时。最后,探路者上还有一个以中等优先级运行的通信任务,通信任务和总线是没有什么瓜葛的。

开始的大多数时间,系统工作的很好,然而,还是发生了这样的情况:气象任务(低优先级)获得互斥量并写总线的时候,一个中断的发生导致了通信任务(中优先级)被调度并就绪,调度的时机正好是总线管理任务(高优先级)等待在总线访问互斥量上的时候。这种情况下,因为通信任务比气象任务优先级高,所以会抢占气象任务,当然,这也就更让总线管理任务失去了运行的机会。通信任务运行时间稍长,总线管理任务就会等待互斥量超时,返回错误,提示总线任务没有能够在一定的时间内完成总线操作,在探路者中,这种情况被当作严重错误处理,作为错误处理的结果就是――整个系统被重启。

如何调试出这个问题的?

VxWorks可以配置为在一种tracing模式下运行,即记录所有感兴趣的系统事件,例如,上下文切换,同步对象的使用,发生的中断。探路者上出现了错误之后,JPL(美国国家航空航天局喷气推进实验室)的工程师们花了相当多的时间在实验室里的一台一摸一样的探路者上运行打开了tracing的系统,希望能够再现引起重启的情况。几天过去了,一个清晨,几乎所有的工程师都走了,只剩下最后一位Mr. So-So的时候,火星上那台探路者兄弟身上发生的重启情况终于被再现了。经过对trace数据的分析,得出了原因,大名鼎鼎的――或者臭名昭著的?――优先级翻转。

如何纠正这个问题的?

什么是优先级翻转呢?以探路者的例子做一个一般性的描述就是:低优先级的任务(气象任务)占有互斥量,这时有高优先级的任务(总线任务)申请信号量,因为不能满足而被挂起了,即低优先级任务阻塞了高优先级任务的运行――这还不是最糟的――这时插进了一个中优先级任务(通信任务),它又把低优先级任务抢占了,高优先级任务能执行的机会就更少了,成了解不开的死结。在VxWorks里,当创建互斥量的时候,有一个bool参数,决定对该互斥量是不是采用优先级继承来防止发生优先级翻转。探路者的程序中创建的总线互斥量正好把这个参数off了。如果这个参数on的话,探路者的行为就是另一个样子了:首先,气象任务(优先级最低)获得互斥量,做写操作,在还没有完成写操作的时候,总线管理任务(优先级最高)申请信号量,所以互斥量的所有者,气象任务,将继承总线任务的高优先级,那么当中优先级的通信任务被调度的时候,是不可能影响无辜的已经具有高优先级的气象任务的。这样优先级翻转就被避免了。

VxWorks带有一个C语言解释器,允许开发者在调试时输入C表达式或者函数并且可以随意执行。JPL的工程师们很走运的在探路者上使能了这个功能。按照他们的编码约定,该互斥量的初始化参数都存在全局变量中,全局变量的地址在符号表中,引导部分的软件包含了该符号表,并且可以被C语言解释器使用。所以,工程师们上载了一段程序到探路者上,这段程序被解释后,把互斥量的参数改变为TRUE。结果是,再也没发生重启了。

分析和教训 ANALYSIS AND LESSONS

    首先,也是最重要的,以黑盒方式调试这个问题几乎是不可能的,只有当造成系统错误的真实运行情况被trace下来分析识别后这个问题才得益解决。
    第二,在系统中保留调试功能会有用的,因为如果系统不能修改的话,问题是不可能得到解决的。
    最后,工程师们的分析――“总线任务的执行频率非常高并且是时间关键的,所以不应该为了优先级继承而花费额外的时间”――是极为错误的。显然,在这样时间关键但正确性也是十分重要的场合,即使付出额外的性能代价也是必须的。

HUMAN NATURE, DEADLINE PRESSURES

David告诉我们,JPL的工程师们后来承认,在飞行前测试阶段就发生过一两起这样的重启,但是相当不易重现所以也没有得到解释。工程师们――出于一种很自然的回避情绪――认为这个问题不重要,并且也找到了一个托词――可能是硬件上的小毛病引起的。
    另外工程师们的工作重点也是个问题。他们花费了极大的精力用于保证着陆软件部分的质量,使其几乎达到了完美的程度。因为如果着陆失败的话,整个火星探测计划就完全失败了,所以,完全可以理解工程师们为什么会对相比之下次重要的陆地巡航软件的小问题不那么在意,特别地,只是把简单的重启当作错误处理的方法也可以看出在这部分没有花费很多的注意力。

成熟的理论/算法的意义 THE IMPORTANCE OF GOOD THEORY/ALGORITHMS
    David最后提到,关于这种情况,早有前人做过研究,CMU(卡耐基。梅隆大学,反正不会是中国医科大学)的研究人员多年前发表的文章中第一次讨论了优先级翻转现象并给出了解决方法。David不太记得起文章的详细内容和作者了。不过实际上就有那么凑巧,该文章的三位作者正好就在那次讨论会上,讨论会的最后,在会议主席的鼓励下,他们三位终于现身,起立并与大家致意,他们是Lui Sha, John Lehoczky, and Raj Rajkumar(第一位老先生也与RMS有关)。说句实话,诸位何时看到过人们向为推进人类智慧作出了杰出贡献的真正的计算机科学理论工作者欢呼致意的情景??这真是不多见的。

终曲 POSTLUDE

上面提到的论文是:L. Sha, R. Rajkumar, and J. P. Lehoczky. Priority Inheritance Protocols: An Approach to Real-Time Synchronization. In IEEE Transactions on Computers, vol. 39, pp. 1175-1185, Sep. 1990.

时间: 2024-07-30 18:11:46

火星上发生了什么的相关文章

就像在火星上种土豆?看看人家怎么在大数据分析中使用Docker

三十年后,当马特·达蒙回忆起自己波澜壮阔的一生,最令他回味的,也许不是参加了诺曼底滩头的迷茫战斗<拯救大兵瑞恩>,不是在失忆的惊惶中流亡天涯<谍影重重>,也不是冰天雪地里30多年的春秋大梦<星际穿越>,而是红色星球上种土豆的日子<火星救援>. 据说,空间站宇航员已经食用过了太空生长的莴苣.NASA一位植物学家也称,人类可以在火星上栽种土豆,而且可种植的不止土豆一种.2014年,荷兰就有一群好奇的科学家,已经在模拟月球土和模拟火星土上,种植了西红柿.胡萝卜.小

火星上有中国的地盘吗?

前段时间,在一场盛大隆重的讨论会议上,某卫星专家透露,中国准备在2020年发射火星探测器.次年登陆火星,随后新加坡<联合早报>披露了更多的相关细节:中国将在第一次火星任务中就实现进入火星大气.释放探测器以及巡视火星,"绕.落.巡"三大组合任务同时执行,显然有些难度,连美国.苏联.欧洲都没有这么干过  . 中国的计划总是非常宏大,常常超越了正常的科学逻辑,正如大跃进的时候,亩产万斤大炼钢的愚蠢行为,不仅沦为全世界的笑柄,而且严重影响了一代人的发展.现在,中国又提出一个登陆火星

洛谷 P1952 火星上的加法运算_NOI导刊2009提高(3)

P1952 火星上的加法运算_NOI导刊2009提高(3) 题目描述 最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限.她想向你求助,作为一位优秀的程序员,你当然不会拒绝. 输入输出格式 输入格式: 第一行先愉入一个运算的进制N(2<=N<=36),接下来两行为需要进行运算的字符,其中每个字符串的长度不超过200位,其为N进制的数.其中包括0-9及a-z(代表10-35). 输出格式: 在N进制下它们的和 输入输出样例 输入样例#1: 复制 20 1234567

惊人发现:火星上有水!会有生命吗? 未完

今日导读 从1969年人类首次登月成功到现在,已经过去了半个世纪,在浩渺宇宙中,从月球到火星,人类一步步地进行太空探索,近日一个里程碑式的发现表明,火星地下埋藏着一个液态咸水湖.这意味着什么?这个红色星球上会有生命迹象么? 带着问题听讲解 Q1: 什么是"火星快车"? Q2: "slam dunk" 的本意是什么? Q3: 如果火星掩埋湖真实存在,科研人员可能会干什么? 新闻正文 There's water on Mars! Signs of buried lake

使用spring.net 1.3.2框架部署在虚拟目录上发生错误

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

中国在历史上发生过尴尬的一件事情!华纳公司客服18895858035

这支奇兵***中国,因迷路回不去,都成了中国人,他们眼睛是蓝色 众所周知,中国在古代几千年的文明历史中,在世界上一直扮演者世界霸主的角色,中国综合实力一直让世界国家震撼.要不是后来清朝政府的不作为和腐败无能,中国人民也不会成为屑小之辈欺负的对象.当时的中国,不管是经济还是军事实力,在世界上都是顶尖的,因此很多周边的小国都想交好中国,于是经常性地跑到中国朝拜,贡献礼品,成为中国"朝贡体系"中的一环,这其中有的是诚心的投诚,而有的则是心怀鬼胎. 这支奇兵***中国,因迷路回不去,都成了中国

使用spring.net 1.3.2框架部署在虚拟目录上发生错误嘴琢纂坠自赘

今天有幸被召回母校给即将毕业的学弟学妹们讲我这两年的工作史,看了下母校没啥特别的变化,就是寝室都安了空调,学妹们都非常漂亮而已..好了不扯蛋了,说下今天的主题吧.这些天我在深度定制语法高亮功能的同时发现了博客园提供的一些有意思的函数,甚至有几个博客园都没用到,我也不知道怎么才能触发那些功能..打开这个js就可以看到很多好用的东西了,虽然写的不怎么样,但是至少有这些功能. ps: 推荐安装一个代码格式化的插件,否则一坨看着蛋疼.比如第一个就是 log,方便调试. http://passport.b

原创科幻短篇《火星房产》(上)

在刚刚过去的第67届国际宇航大会上,SpaceX的老板伊隆•马斯克(Elon Musk)提出“火星移民”计划,引起全世界围观,看起来科幻就要变为现实了,因缺斯听!不过众所周知,在火星上生存并非易事,首批涉足火星的人将不得不面对辐射.太阳耀斑.弱重力.极寒以及有毒土壤等恶劣环境的考验.那么谁会是第一批火星移民?是美国杀人犯,叙利亚难民,还是--中国购房者? 以下正文: 这是一片老小区,小区门口街道比较窄,时常有小贩聚集,还有一群五十来岁的马扎男,不上班也不看孙子,整曰讨论国际政治. 祝大平媳妇小雨

脑洞文之去火星搞IT!

前两天刚看了<火星救援>,为剧情称赞之余,突然脑洞大开,如果人类有一天登录火星啦,到那时候,怎样做好星际互联网的通信以及网络运维工作肯定是一个必须要考虑的问题,既然如此,那我们就先臆想下如何建设火星互联网 第一个要解决的问题就是星际通信,由于火星与地球的距离随着两颗星球环绕太阳的运行时间不同也不断的变化着,理论上来说,地球和火星最近点将发生于火星位于距离太阳最近点(近日点)而地球位于距离太阳最远点(远日点).这样两者之间的距离只有5460万千米.然而,这在整个历史中从未发生过.两者最近距离发生