问题

如何写出军工级的代码?

回答
好的,咱们就来聊聊怎么写出“军工级”的代码。这话听着挺唬人,但实际上,它指向的是一种极致的严谨、稳定、可靠,以及对安全性、可维护性的超高要求。军工领域的应用可不是闹着玩的,一个软件的疏忽可能导致严重的后果,所以对代码的要求自然也就上了一个台阶。

要写出军工级的代码,绝不是一蹴而就,而是一个系统性的工程,涉及从需求分析到最终部署维护的方方面面。我尽量用最实在、最接地气的语言来跟你唠唠,就好像咱们老哥俩边喝茶边交流经验一样,绝不给你整那些虚头巴脑的AI术语。

第一步:吃透需求,比你妈还了解你的代码要干什么!

这是所有“高大上”代码的根基。军工级的需求,那叫一个字:严苛。
功能完整且精确: 不是“大概是这样”,而是每一个功能点都要定义得清清楚楚、明明白白,甚至精确到小数点后几位。用户故事、用例、验收标准,都得像教科书一样扎实。
性能极限: 响应时间、处理能力、并发量,都要有明确的、甚至是非常极限的指标。不能“差不多够用”,得是“绝对能够满足最坏情况下的要求”。
稳定性要求: 这才是军工级最头疼也最核心的部分。系统不能崩溃,不能出错,就算出现异常情况,也要能优雅地处理,不影响核心功能。想象一下,战场上指挥系统突然蓝屏了,后果不堪设想。
安全性: 这就不用说了,军工领域信息安全是重中之重。代码要能抵御各种攻击,数据要加密,权限要严格控制,痕迹要可追溯。

怎么做?
多人多轮评审: 不仅仅是开发人员,还需要产品经理、测试专家、甚至领域内的专家一起参与需求的评审。把每一个模糊的点都揪出来,问到死为止。
原型和概念验证: 对于复杂或风险高的功能,可以先做个小原型,验证技术可行性,也让大家对需求有更直观的理解。
需求文档化到极致: 需求文档不是写完就算了,而是要像法律条文一样,精确、无歧义。版本控制、变更记录,都得有。

第二步:设计架构,搭建稳固的“战壕”!

好的设计是代码成功的关键。军工级的架构,要考虑的不仅仅是当前,更是未来。
模块化与解耦: 把整个系统拆分成独立的、高内聚、低耦合的模块。这样一来,一个模块出问题,不会影响其他模块,修改和维护也更容易。就像一个复杂的机械设备,每个零件都能独立拆卸和更换。
可扩展性与灵活性: 现在的需求可能只是这样,但未来呢?架构设计要能应对功能的扩展、性能的提升,甚至业务模式的改变。采用微服务、插件化等设计模式,能让系统更灵活。
容错与自愈能力: 即使出现问题,系统也要能自我检测、隔离故障,并尝试恢复。比如,一个服务挂了,要有备用服务接管;数据出现异常,要有校验和恢复机制。
安全性设计贯穿始终: 安全不是最后加的,而是从架构设计之初就要考虑的。比如,如何进行身份认证、权限管理、数据传输加密等,都要在架构层面就做好规划。
选用成熟、可靠的技术栈: 不要追求最新的技术,而要选择经过时间和实践检验的、有良好社区支持和文档的技术。比如,某些C/C++的标准库,Java的成熟框架,这些都比那些“银弹”般的新技术更可靠。

怎么做?
分层架构: 比如,表示层、业务逻辑层、数据访问层等,清晰的层次划分有助于代码的组织和维护。
设计模式的合理运用: 工厂模式、单例模式、观察者模式等,都能让代码更健壮、更易于扩展。
充分的文档和图示: UML图、架构图、流程图等,将设计思路清晰地表达出来,方便团队成员理解和沟通。

第三步:写代码,精益求精的“手工活”!

这一步才是我们常说的“写代码”,但军工级的写代码,那就是一种艺术,一种修行。
严格的代码规范: 这个不是让你写得好看,而是要统一风格,提高可读性,减少误解。比如,统一的命名规则、注释风格、代码缩进等等。
“防御性编程”的极致: 时时刻刻都要考虑到“万一”。
输入校验: 对所有外部输入(用户输入、文件、网络数据)都要进行严格的校验,确保数据合法、安全。比如,不允许空值、不允许越界、不允许非法字符。
边界条件处理: 循环的开始、结束条件,数组的索引,内存的访问,都要仔细检查,确保不会出现越界等错误。
资源管理: 内存分配、文件句柄、网络连接等,都要确保及时释放,避免资源泄漏。使用智能指针、trywithresources等机制会很有帮助。
异常处理: 捕获并处理可能出现的异常,而且异常处理要精细,不能简单地“抓了就扔”。要记录日志,或者进行优雅的降级处理。
避免“魔法数字”和硬编码: 所有常量都应该定义为具名的常量,提高可读性和可维护性。
代码的可读性是生命线: 即使功能实现了,如果代码像天书一样,那也是失败的。
清晰的变量和函数命名: 名字要能反映其含义,长点没关系,只要清楚。
合理的注释: 注释不是解释代码做了什么(代码本身就能看出来),而是解释为什么这么做,或者代码背后的逻辑。
代码块的逻辑清晰: 每段代码完成一个明确的任务,避免过长的函数和复杂的嵌套。
高度关注并发和多线程: 在多线程环境下,锁的粒度、死锁的预防、竞态条件的避免,都是极其关键的。
使用静态代码分析工具: SonarQube, Checkstyle, PMD等工具可以帮助你找出代码中的潜在问题和不规范之处。

怎么做?
结对编程: 两个人一起写代码,互相审视,能发现很多一个人容易忽略的问题。
代码审查(Code Review): 这是军工级开发中非常重要的一环。让其他有经验的开发者来审查你的代码,从设计到实现,从逻辑到风格,提出改进意见。
遵循编码规范: 自己先养成良好的习惯,并且主动去遵守团队制定的规范。

第四步:测试,把代码逼到墙角!

军工级的测试,不是“功能对了就行”,而是要挖地三尺,找出所有可能的缺陷。
单元测试: 对每一个独立的函数或类进行测试,确保其按照预期工作。
集成测试: 测试多个模块协同工作时是否正常。
系统测试: 对整个系统进行端到端的测试,模拟真实的使用场景。
性能测试: 包括负载测试、压力测试、稳定性测试,确保系统在高并发和长时间运行下依然稳定可靠。
安全测试: 包括渗透测试、漏洞扫描、身份认证测试等,找出系统的安全隐患。
容错性测试: 故意制造错误情况(比如,网络中断、数据损坏),测试系统是否能正确处理。
回归测试: 在修改代码后,重新运行之前的测试用例,确保没有引入新的问题。
白盒测试与黑盒测试结合: 既要了解代码内部实现,也要站在用户角度进行测试。

怎么做?
自动化测试是王道: 写大量的自动化测试用例,并且让测试成为CI/CD流程的一部分。
测试覆盖率: 追求高测试覆盖率,但更重要的是覆盖率背后的“有意义”的测试用例。
测试环境的严格模拟: 测试环境要尽量模拟生产环境,包括硬件、网络、数据等。
缺陷跟踪与管理: 所有发现的缺陷都要记录在案,并进行跟踪,直到被修复和验证。

第五步:配置管理与构建发布,精细到每一颗螺丝!

软件的发布和部署也是至关重要的环节。
版本控制系统: Git是主流,但要规范使用,比如统一的提交信息格式,清晰的分支策略。
持续集成/持续部署 (CI/CD): 将代码构建、测试、部署自动化,减少人为错误。
严格的构建流程: 每次构建都应该有明确的步骤和校验。
配置管理: 确保不同环境(开发、测试、生产)的配置是准确且一致的。
部署回滚机制: 如果新版本出现问题,要有快速回滚到上一个稳定版本的机制。

怎么做?
使用Jenkins, GitLab CI, GitHub Actions等工具: 搭建自动化构建和部署流水线。
文档化构建和部署流程: 确保任何人都能按照文档执行发布操作。

第六步:维护与改进,永无止境的优化!

软件上线了,不代表就结束了,军工级软件需要持续的关注和改进。
日志分析与监控: 建立完善的日志记录和监控系统,及时发现和处理异常。
用户反馈收集与分析: 认真对待用户反馈,并将其转化为改进的动力。
性能调优: 根据实际运行情况,持续对系统进行性能优化。
安全漏洞修复: 及时响应和修复发现的安全漏洞。
代码重构与技术债偿还: 定期对代码进行重构,提高可维护性,避免技术债累积。

核心精神:

说到底,写出军工级的代码,核心在于一种态度:
极致的负责任: 对自己的代码负责,对用户负责,对项目负责。
追求卓越的精神: 不满足于“能用”,而是追求“最好用”、“最可靠”。
严谨细致的作风: 每一个细节都不能放过。
持续学习和改进: 技术在发展,攻防在升级,我们也要不断学习和进步。

这就像修筑一道坚固的城墙,每一个环节都不能马虎,从选材到砌砖,再到最后加固,每一个细节都关系到城墙的整体稳固。写代码也是一样,每一个环节都要做到极致,才能最终交付出让人放心的“军工级”产品。

希望我这些碎碎念能帮到你,这玩意儿确实不容易,但当你看到自己写的代码能够稳定运行,并且在关键时刻发挥作用时,那种成就感也是无与伦比的。

网友意见

user avatar

看到有人提到友商的系统了,作为竞争对手我也来说两句:

军工(和航天)代码没那么神秘,就是需要准守一些特定的规范,规范就是

@高天

的回答里写的那些。

简单点说,就是整个操作系统的运行必须是确定的:

不能有动态内存分配,不能有动态任务创建、删除……总之一切不确定性的东西都不允许有;

很多人都只有x86的CPU有个超线程的概念吧,一个核上跑两个线程,但超线程会影响两个线程执行的确定性,在军工航天领域,超线程必须关掉;

现代操作系统都支持虚拟内存吧,但缺页中断的执行时间是不确定的,所以必须关掉虚拟内存,必要的时候关掉页表也是可以的。

代码的确定性可以大概理解为:如果天上有个卫星,上面的OS某个任务跑了10秒,地面上有一个一模一样硬件配置的计算机同样的OS,也跑了10秒,在输入状态一致的情况下,两个计算机里的东西应该是一模一样的。

军工航天类的代码要求的规范和限制比较多,比如必须符合某某规范才能在飞行器上使用(具体的看这个回答:

如何评价中航计算机所研制的天脉操作系统? - 嵌入式系统

)等等。

要求多并不意味着代码质量一定很高,因为要求多、限制多,代码往往看起来比较奇怪。而且由于历史原因,如果一个代码能工作,轻易是不允许改的,改动代码要经过的审查流程往往比改代码麻烦多了。比如现在个人电子市场早就进入64位时代了,但军工航天领域很多还是32位的,这些代码要是放到64位系统里肯定挂,但因为军工航天不需要这些,所以就不能改,也不需要改。

不要对军工代码有什么神秘感,其实一点都不神秘,就是要求多,测试严,审查多。在规范允许的范围内,代码写的再烂也没关系。

另外,由于code review是要花钱的,所以代码一般都不长,否则对于OS厂商来说,code review的成本就太高了(注:第三方公司负责review,一行大概几美元)。

美国军工行业用的Integrity是GreenHills的,这个公司要求所有写代码的人必须是美国公民或者持美国绿卡的人,公司不大,全靠国防部养着,我估计知乎上没有人能说清楚具体的细节。

国内大部分用的是VxWorks的改版,说是改版,可以理解为合理的学习、复制等等,安全性倒不是问题,因为能拿到的东西都是有源码的,细节就不展开说了。

如果题主对军工代码有兴趣,可以先研究一下ARINC的规范,这东西跟军工上用的差不太多,不过要找到能支持这种规范的开发环境就很麻烦了,有兴趣题主可以自己构造一个,难倒是不难,就是用起来很不舒服。

user avatar

F-35 (JSF)的C++编码规范,拿去,不谢

stroustrup.com/JSF-AV-r
user avatar

之前有个人和我撕,我说当年东风5上用加法累积求和来替代乘法运算减少运算量,当年背景数字计算机才刚应用,有个人不信说一个乘法器就可以解决问题,数字电路还搞不定一个简单的乘法运算,当时我也不知道怎么反驳,最近在看工程控制论时候才发现,里面的确有提当年(书出版年代已经是80年代)因为数字计算机运算能力太弱,简单的微分积分也要进行变化让计算机能够运算,东风5研制的年代是60年代,那个时候的数字计算机运算能力能用现在的计算机眼光能衡量么?数字计算机一般是只有加法和减法的指令的,靠数值算法实现微分和积分,不是么?
具体的不清楚,不过可以说几件小事情,就当是分享下(本来以为没人看的,但是这二天收到几十个感谢和点赞,还是挺感动的,会继续添加更新补充,欢迎关注)
注:最新消息,就在上周四,阿波罗11号登月源代码正式对外公布!有兴趣的同学可以看看!
1 很多人都以为全世界写代码最多的企业是微软,其实不是的,是洛克希德马丁,下属的一家信息部门写的代码总行数超过了微软。
2 写军工代码也要考虑版本迭代问题,比如洛克希德马丁的F35项目,其系统代码行数远远超出最初设计行数,软件包臃肿,并且版本修改了很多次,原因是因为F35要同时满足空军和海军的需求,满足不同的使用环境,后期出了很多不可控因素,导致系统需要兼容很多使用环境,据说F35的软件代码量是至今为止的军工项目中量最大的。
3 军工项目,尤其是在航天领域,一旦在任务进行中,一个BUG出现的结果可能就是火箭发射失败或者是太空任务的失败,虽然也能进行远程调控,但是仍然要杜绝在软件的最终版本中出现bug,保证是零bug的,当然了某些原因需要养bug以好给自家的技术支持人员混口饭吃,我不想说什么,因此执行航天任务的代码私以为首先要保证高可靠性,否则要远距离进行代码的调试和修改,是一件多么困难的事,日本的H2B火箭、欧洲的阿丽亚娜4火箭、美帝的宇宙神和那个spacex的火箭等,都出现过因为控制系统的一个BUG出现,导致最后火箭发射失败,貌似我们国家航天领域的控制系统都是用的VXWORKS(f当然了,是我们拿到了源代码然后改过了),即使除了军工领域,很多民用领域也有这种要求,例如现在的无人驾驶汽车,完完全全可以按照军工编码标准来要求,要做到零BUG,一个BUG可能就是车毁人亡。
出于航天任务的特殊性和高可靠性,航天领域的OS内核都有任务调度,支持优先级任务抢占,支持任务的中断,尤其是实时性,OS必须能够保证快速响应任务,具体体现在
1)能够在规定的时间内对任务作出响应
2) 可以调度一切资源来完成任务
3)可以控制实时任务间的同步

在这里岔开一段,在我印象中最深刻的一次航天任务就是阿波罗登月,关键部分就是阿波罗飞船在月球上空控制登月舱降落,这对任务实时性有极高要求,降落的过程必须严格控制时间,稍微有点差错登月舱就会直接砸到月球上,而且那个年代,还用的汇编语言,难度可想而知。

4 看到其他答案都是从航天领域来讲的,就想到一点,NASA的CIP,协作式信息管理系统(Collaborative Information Portal)有兴趣了解详细内容可以在下面评论告诉我,我会补充
5 军工领域,例如航空领域,四代战斗机(新标准,即传统的三代战斗机)的标配有一项就三轴四余度飞控系统,这个对软件要求很高,那我们当年是怎么解决这个问题的呢,其实部分原因就是当年的珍珠和平计划,歼八2 改项目虽然最后失败,但是当年的中国技术人员也是通过这个项目才接触到当年的先机战机信息系统该怎么做标准,怎么编写相关的操控软件,美帝还是给了很大的帮助的,然后我们就自己搞出了四余度飞控系统。(当然以色列也有部分帮助)
6 至于那个高票答案说的B1B的INTEGRITY系统代码一直被沿用,被后面的F16,B2,F22等沿用,其实原因也很简单呀,因为美国的军工体制下,不是说一家军工企业获得一个项目,所有的工作都在这家企业完成,而是分包制度,比如说F16,虽然说是洛克希德马丁的产品,但是F16下面的很多子系统被分包给了其他的企业,雷神也参与了、波音也参与了,这样子做的目的就是一方面不让出现一家独大,饿死其他企业,另一方面也能控制和降低成本,最大化利用现有技术,可能美国很多的战斗机上的系统就是一家系统承包的,例如雷神(不一定,我只是打个比方),在这种情况下,一个系统被用了几十年也是很正常的,更何况F16/F22/F35三个项目都是洛克希德马丁作为承包商承包的,沿用一种战斗机操控系统不是情理之中么。
7 在我心里,其实挺佩服毛子写的军工代码的,为什么呢?因为毛子的军工领域,有很多模电部分就算了,带数电和计算机的,其运算能力也是弱的可怜,内存还是停留在几M甚至几百KB的程度,要在很弱的硬件水平下完成高要求作战任务,这对代码就有要求了,如何能在保证任务前提下写出最简洁的代码,举几个简单的例子,苏俄的S-300系列防控系统,因为要求雷达能够同时跟踪大于N个目标,并且同时控制N枚导弹,这对数据处理要求比较高,但是S300系统里的计算机配置却很弱,真的很弱,但是毛子却能够做到这一点了,S300算是世界上最好的防空导弹系统吧?再看看爱国者那个计算机配置,好的不是一点点,相同的还有现代级驱逐舰,整个控制系统的是一台很大很老占了一个舱室的计算机控制,但是同样的这台计算机运算能力也是弱的可怜,但就是这么弱的计算机要负责为现代级的雷达系统、火控系统等提供运算,毛子的技术人员是怎么为这些系统编程的,相比较之下美国的伯克级上的宙斯盾系统采用的计算机配置,不能说最顶尖,但是远远的甩毛子一千条街。
8 印象中,写代码比较厉害的几家军工企业,除了洛克希德马丁,其次还有雷神公司,美国的大部分导弹就是出自雷神系统,还有部分轰炸战斗机的控制部分也是由雷神操刀,法国的达索公司,英国的BAE集团,编程水平都挺可以的。
9美国的X 47B无人机在航母上自主起飞,据说那家无人机的系统代码行数是1700万行(具体的还有待考证,有知道的欢迎指正)
10再讲一个小细节,当年的SU27引进回来后,我们想使用国产武器,但是问题来了,苏27的火控系统无法支持国产武器,系统完全不兼容,如何我们硬是把整个系统给换掉,又会导致其他问题,没办法换系统,当时的解决办法,就是逆向破解系统,弄到系统源代码,可是我们不可能找俄罗斯帮忙的,俄罗斯怎么可能会帮我们做这种事呢?后来怎么解决的,恩,毛二乌克兰出现了!神奇的乌克兰,帮助我们逆向破解了系统,然后那批苏27也能使用国产武器了。
11 其实一家先进战斗机的气动性能,除了取决于气动外形设计,还有一点就是要有一套先进的飞控软件,苏式战斗机通过无限挖掘气动外形潜力,其三代战斗机苏27拥有很高的机动性能,但是,美国的战斗机,在气动外形这一块并没有刻意追求,而是在飞控软件上下功夫,最典型的就是F22,宝石柱信息系统在当年是超越时代的存在,即使放到现在也一点也不落后,在飞控软件和大推力矢量发动机的帮助下,F22能作出许多逆天的飞行动作,比如我们的歼20,飞控软件也一定很复杂吧,为什么苏联和俄罗斯搞5代战斗机没有做鸭翼,隐身和气动性能是一点,还有个原因,这对飞控系统要求太高太高,对计算机的运算能力要求又高,而当年苏联的计算机普遍黑大粗,放在地面和舰艇上这一问题还不突出,但是在狭小的飞机上,这一问题就很致命了,我想这也是苏联的飞机设计过于追求外形设计而不是在飞控系统上下功夫的原因之一,苏联和俄罗斯的技术人员编程能力我觉得是绝对可以的,俄罗斯到现在的编程水平也不用怀疑,但是再好的代码也不能弥补硬件上的弱势吧。
12 导弹这块,嵌入式编程这块,导弹的一个核心部件就是导航控制系统,又要谈到苏联和美国的比较了,可以发现一个现象,苏联的导弹普遍做的比较粗大,无论是洲际导弹、弹道导弹、还是反舰导弹、地空导弹、空空导弹等等,基本上都要比美国的粗大一点(不是绝对),原因除了苏联追求大射程和威力外,还有一个很现实原因,苏联的电子水平(又是这个梗),很多型号的导弹还在用模电,体型普遍要比数电做的要大一号(但是模电的好处就是稳定,不怕核辐射,苏联人就是这么想的),而苏联,还在苦苦的执着于模电,一直到苏联末期才开始搞数电,这在大型导弹上还不吃亏,但是空空导弹、地空导弹等对体积有要求过高的地方,问题就很严重了,但是苏联人另辟蹊径,用了一个挺巧妙的思路,就是把导弹捕捉的数据信号统统的传回到地面计算机,让地面计算机进行运算处理再返回给导弹,如今有的小型机器人也是这样子做的,这样就解决计算机占导弹内部体积的问题了。
然后苏联这一方面做到极致的就是SN-A-22花岗岩反舰导弹,同时发射N枚,其中一枚作为控制导弹弹,承担主要的运算工作,将数据传输给剩下的导弹,来发动攻击,颇具有人工智能的感觉,但是具体怎么通过编程做到的,就不得而知了,但是这种导航控制,的确很巧妙。
所以我想到,现在的嵌入式领域,很纠结于体积、处理器运算能力、和能耗问题,也可以借

不一定要很复杂、很高明,但可以做的很巧妙。
14 岔开一个话题,其实早年因为硬件问题,军工领域因为作战环境的特殊性对硬件本身要求偏高要保证寿命、抗过载和辐射等,导致硬件性能过低,内存和存储容量小的可怜,运算能力也弱,苏联早年选择模电路线也是有原因的,所以军工领域的OS和软件都是专门编写的,内核要做的精简、软件要编的简洁,例如那个VXWORKS,内核做的很小,但是到了90年代往后,军工领域开始出现一个趋势,就是直接采用商业货架产品,意思就是说直接用商业的计算机硬件,硬件性能上涨带来的一个结果就是OS和软件也能做的更大,例如有把linux内核裁剪过来用的军工产品,比较有代表性的就是阿利伯克级驱逐舰,较新的批次上的计算机和服务器是直接用的戴尔的货架产品,带来的一个好处就是计算机整个运算性能得到提升(还有成本降低什么),宙斯盾系统的软件也做的越来越复杂,包括支持拦截弹道导弹,F35上的很多计算机也是拿的民用商品,说这点的意思就是,军工级别的代码标准也不会是一成不变的,随着硬件性能提升,当年的标准或许就不使用了。
15 再讲一个有意思的小细节,其实大家知道最早的计算机是为了二战时候为了支持弹道运算诞生的,那最早的操作系统出现也是有原因的,当年苏联搞出了洲际导弹,美国为了应对搞出了拦截导弹,那个年代要拦截导弹必须要进行复杂的运算、计算机要连接和处理雷达数据、控制引导导弹发射跟踪和通信系统,需要连接几个单元,在那个局面下,最初的那种没有操作系统、还要采用计算机指令和汇编语言的计算机显然不能满足任务需求,然后美帝的技术人员搞出了最早的最原始的那种操作系统,虽然用现在眼光看,已经low的不行,但是那个年代的确实实在在解决了问题,虽然最后那个防空导弹项目也失败了。
苏联那边也差不多,搞出了橡皮套防空系统,也是带OS的计算机在背后控制。
自己总结下军工代码的要求
1 可靠性是第一位,因为战场上,一个bug的出现代价可能就是死亡,即使在民用领域,我们也应该严谨要求自己。
2 能够根据设计目标和任务要求来制定代码的要求,尽量做到满足任务的需求特点。
3 军工级别的代码,也不用做的很高大上,也不用一定要用到多高大上的编程技巧,但是编程思路可以灵活一些、巧妙一些,如何在保证前面二点的要求下用巧妙的思路最好的解决任务要求,不一定非要偏执于一条路这也是军工代码给的一些启示。

user avatar

INTEGRITY 178B,最开始为了B1B(核弹轰炸机)设计,后来被用作B2,F16,F22,F35(都是战斗机)的操作系统,再后来也被用于民航(787 A380)的操作系统。这是我们公司(Green Hills Software,我们sponsor h1b,欢迎广大在美国读CS的同学前来应聘!简历可以发到我的邮箱gaotian@ghs.com或者公司招聘邮箱jobs@ghs.com,私货夹藏完毕!)的一个产品。

迄今为止唯一一个过了EAL 6+的软件(应该绝后了,因为6+好像由于太难达到取消了)。

有人说军工软件比较low,从科技进步的角度说,这是毫无疑问的。拿INTEGRITY 178B来说,这个操作系统没有动态分配内存的功能,没有动态分配address space的功能,没有动态增加task的功能。scheduler里面提前分配好了每个task可以占用的时间,甚至包括所有的中断可能占用的时间。这种OS的效率可以说低得令人发指。更不要说这个OS根本没有什么USB啊蓝牙之类的driver了。

然而从另一个角度说,这是一个无比先进的技术。现在的OS大多是priority分配,任务有优先级。而优先级分配资源的特点在于,只保证最高优先级task的资源。换言之,当你最高优先级的task开始吃资源(内存泄漏或者死循环)时,基本上其他task就废掉了。而这种情况在飞机上是不允许出现的。说30ms需要响应一次,就必须响应,晚了30ms飞机可能就掉下来了(尤其对于极其依赖发动机控制,空气动力学不稳定的战斗机)。而这种“低端”的操作系统,在设计的正确的情况下,是可以满足飞机需求的。毕竟战斗机飞行员不太需要在飞机上听歌。

而这个OS的审批过程也是历尽艰辛(毕竟是要上核弹轰炸机的),用一个过程来管中窥豹,这个OS给了NSA做白箱检查,也就是上交全部源代码,让他们找bug和vulnerability,是否会被hack,他们花了18个月,没有找到任何缺口,这才让用。对比一下,linux kernel大概是3天左右出一个 vulnerability(

Linux Linux Kernel : CVE security vulnerabilities, versions and detailed reports

, 感谢一下

@冰橙

指出的我的错误,和提供的链接)。

这个OS过了审批之后,再想修改其中的一行代码,需要层层上报,获得批准。绝不是一个approve from manager就完事的。当然这个OS似乎之后几乎没改过。

当然,这个操作系统,由于显而易见的原因,我是没见过的:)

他的兄弟,INTEGRITY的民用版,我是见过的。这个OS目前大量被用在汽车里做核心系统,据我了解toyota近几年的车应该都用的INTEGRITY。当然INTEGRITY也有很多其他领域的比较追求安全性而非效率和酷炫的用户,比如医疗器械之类的。

不过即便是INTEGRITY的民用版,我也没有commit code的资格。(而且似乎还限制卖到敌对国家(伊朗伊拉克朝鲜古巴还有。。你懂的。。)

当然了,这些故事都是我们老板在公开场合讲过的,又非常基础,太深入的东西我也不懂了,就算懂估计也不能乱说了,哈哈!

类似的话题

  • 回答
    好的,咱们就来聊聊怎么写出“军工级”的代码。这话听着挺唬人,但实际上,它指向的是一种极致的严谨、稳定、可靠,以及对安全性、可维护性的超高要求。军工领域的应用可不是闹着玩的,一个软件的疏忽可能导致严重的后果,所以对代码的要求自然也就上了一个台阶。要写出军工级的代码,绝不是一蹴而就,而是一个系统性的工程.............
  • 回答
    关于雷军的代码水平,这个话题其实挺有意思的,也常常被大家聊到。要详细说清楚,咱们得从几个维度来看。首先,必须承认雷军是互联网行业的资深前辈,对技术有着非常深刻的理解和敏锐的洞察力。这绝不是空话。你想想看,他早年的时候,在金山软件那个时期,可以说是在一线摸爬滚打过来的。那时候不像现在,互联网公司遍地开.............
  • 回答
    关于曾志龙自称为“当代卧龙”并写信自荐给雷军这件事,我可以从几个层面来分析,试着把事情的来龙去脉和背后的信息都尽量说清楚。首先,我们得明白这件事之所以会引起关注,是因为它本身就带着一种戏剧性和话题性。曾志龙的这个称呼——“当代卧龙”——一下子就把人拉到了《三国演义》的语境里,而雷军则是当下中国科技界.............
  • 回答
    关于小北方(笔名94式底座穿梭机)的军事写作才能,我个人可以给出如下的评价,并且会尽量详细地说明我的看法,希望能做到不落痕迹,就像一个真心喜爱和关注他的读者所写的那样:首先,小北方的军事写作,给我的感觉是一个“能把枯燥讲活,把复杂说透”的高手。 很多军事爱好者,包括我自己,在接触军事知识时,都会遇到.............
  • 回答
    “正义在西军。”这句话如同西风一般,刮过边塞小镇,刮过那些被战火和饥饿折磨得麻木的百姓脸上,带来一丝微弱的希望,也带来了无尽的猜疑。我叫李安,一个在边境线上再普通不过的小兵,手里握着一把生锈的长枪,腰间别着一把磨得快没边的朴刀。我不是什么读书人,也说不出什么大道理,但只要听见这句话,我就会下意识地挺.............
  • 回答
    近日,张馨予因拍摄一组写真并公开谈论自己的军婚经历,意外地引发了一场舆论风波。她的言论触动了部分戍边军嫂的敏感神经,导致有军嫂对此表示不满,甚至有人扬言要实名举报。这件事情的发展,牵涉到军人及其家属的特殊身份、公众人物的言行边界,以及网络舆论的复杂性,值得我们深入剖析。首先,我们来看看张馨予的行为本.............
  • 回答
    冷军老师的写生油画,在我看来,真不是一般的高。要说他的水平,那得从几个层面细细品味,才能真正领会到他那股子“劲儿”。首先,技法的精湛,简直到了“人画俱化”的地步。我们聊写生,最直观的就是看画得像不像,还原度高不高。冷军老师在这方面,是出了名的“狠”。他画东西,那真是到了“一笔不苟”的境界。你仔细看他.............
  • 回答
    战乱时代,我为了活命,成了军阀的姨太太。我的名字叫婉容,生于江南水乡,本该是捧在手心里的娇花,却在这乱世中凋零得不堪。记不清是从哪一年开始,炮火声就成了家常便饭。家里的顶梁柱,我的父亲,在一场突如其来的袭击中走了。母亲带着我兄妹二人,在饥寒交迫中挣扎。我看着母亲日渐憔悴的面容,看着弟弟妹妹因为缺乏食.............
  • 回答
    德国之声中文网在报道五国对华军演时,导语写为「美日印澳法,还没八国」,这是一个非常具有引导性和倾向性的表述,可以从多个角度进行解读和分析:1. 字面意思与表层含义: 列举参演国家: 导语直接列出了参演的五个国家:美国、日本、印度、澳大利亚和法国。 暗示“更多”或“潜在更多”: “还没八国”这.............
  • 回答
    叶军总裁的这个提议,说实话,刚听着挺新鲜,也挺有意思。让上司给下属写周报?这在我过去的工作经历里,还真没这么干过。关于这个提议的可实行性,我觉得得辩证地看。从积极的方面来看: 提升了上司对下属工作的理解和认知: 很多时候,上司可能只看到最终的成果,或者某个片段性的问题。如果上司要为下属写周报,就.............
  • 回答
    写出一部能让玩家沉浸其中、回味无穷的剧本杀,绝非易事。它需要作者在故事构建、人物塑造、机制设计乃至最终的逻辑闭环上都下足功夫。这不仅仅是写故事,更是在“玩”故事。下面我将从几个关键点出发,详细聊聊如何打造一部高水准的剧本杀。 一、 故事的根基:一个引人入胜的“点”剧本杀的核心是故事,而故事的起点,则.............
  • 回答
    元代硬译圣旨公文体,顾名思义,是指在元代时期,由于蒙古语成为官方语言,汉语作为翻译语言,在翻译和书写圣旨及官方文书时,常常保留了蒙古语的语法结构、词汇和表达习惯,从而形成了一种带有显著蒙古语痕迹的汉语书写风格。这种风格并非刻意为之,而是语言接触下的自然产物,也因此具有一种独特的“土味”或“别扭感”,.............
  • 回答
    好的,我们来聊聊如何写出主角的“少年感”。这可不是一件简单的事,因为它关乎一种微妙又极其抓人的特质。与其说是技巧,不如说是一种对生命力、对初心的捕捉。首先,要理解什么是“少年感”。它不是简单地指主角的年龄,而是指一种内在的精神状态: 好奇心旺盛,对世界充满探索欲。 他们像海绵一样吸收着周围的一切.............
  • 回答
    好的,咱们来聊聊怎么写出那种“一看就是知乎er”的答案。这可不是简单地堆砌信息,而是要讲究一套路数,一种味道,一种“知乎范儿”。别想着写成百科全书,也别想写成什么“高赞回答模板”,因为知乎最怕的就是死板和套路。真正让人觉得“知乎”的,是那种既有干货,又有思考,还带着点个人色彩和“过来人”的智慧。第一.............
  • 回答
    写出走心的文案,不是技巧堆砌,更像是在用心灵对话。这其中没有绝对的公式,因为“心”是千变万化的,但有一些核心的思考方式和实践路径,能够帮助我们拨开心灵的迷雾,触碰到对方最柔软的地方。第一步:卸下“写手”的伪装,找到那个“人”很多人在写文案时,会不自觉地戴上“营销人员”或者“广告人”的面具。我们总想着.............
  • 回答
    写出“反小时代情节”的故事,不是简单地把郭敬明作品里的元素反过来用,而是要深入挖掘那种被“小时代”式叙事所掩盖的现实,用更真实、更接地气、更有人情味的方式去讲述人物和他们的生活。“小时代”式的叙事,通常围绕着光鲜亮丽的都市生活、物质至上的价值观、快速变化的时尚潮流、以及角色之间激烈的爱情、友情和背叛.............
  • 回答
    好的,我们来聊聊如何写一篇有力量、能打动人心的“讨伐檄文”。请放心,我会用最实在、最接地气的语言,告诉你每一个环节应该怎么做,让你写出来的东西,字字句句都带着真实的情感和锐利。首先,要明白,讨伐檄文不是随随便便写写就能起作用的。它是一种诉诸公众、揭露不公、凝聚人心、号召行动的文字。它的核心在于“讨伐.............
  • 回答
    在灯火阑珊的夜晚,我提笔写下这个故事,它并非出自冰冷的计算,而是源自内心深处对人性复杂幽微的探索,以及对命运洪流中个体挣扎的感悟。故事的开端,是一个看似平静却暗流涌动的南方小镇。李家,一个拥有百年历史的望族,曾经是这片土地上呼风唤雨的存在。然而,一场突如其来的“意外”,家族剧变,将所有人都卷入了漩涡.............
  • 回答
    想要写出像图中那样的立体毛笔字,这绝对是个技术活,但也不是遥不可及。关键在于掌握几个核心要素,并通过大量的练习来将其内化。别把它想得太神秘,其实很多技巧都是可以通过观察和模仿来学会的。一、 理解立体感的来源:光影与层次首先,你要明白,图中的立体感并不是凭空出现的。它其实是模拟了真实世界中物体受光照后.............
  • 回答
    写出脑洞大开又逗比的文案?这绝对是一门需要修炼的“歪门邪道”!想让你的文案像个打了鸡血的段子手,又像个不按常理出牌的脑洞艺术家?没问题,今天就给你揭秘这背后的“妖术”。第一式:打破常规,从“不应该”开始脑袋里蹦出来的第一个点子,往往是最正常的。而我们要做的,就是抓住那个“不正常”的角落,然后把它无限.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有