www.cccpism.com

[原创翻译]苏联计算机工程在军事实时控制系统中的发展史

无产阶级陈

[原创翻译]苏联计算机工程在军事实时控制系统中的发展史

  1.促进军事专用计算机发展的外部环境和内部因素

 

  在二十世纪五十年代苏联计算机工程发展的开端,科学家们最关心的是如何研制出能解决复杂数学难题的计算机。那时的计算机只能以静态的方式执行连续的指令或批处理命令,无法满足带有动态参数变化的各种实时要求。不过很快,随着技术的进步,计算机就能满足各行各业的需求了。
   到了五十年代后期,国防工业和国防部就对计算机处理和控制军事系统中的各项数据发生了兴趣。这一领域的特征显然有别于传统的科学计算。
   于是,计算机工程加快了在军事领域的发展步伐。在国防工业的许多分支部门和陆军、空军、海军与战略火箭军的许多军工企业里,几乎同时出现了计算机的身影。这些军事计算机随后被划分成室内固定机和移动机两种。这一划分导致了这两种军事计算机在架构和体系上朝着不同的方向发展。固定计算机的发展仅仅是在常见的计算机架构和核心技术上作某些扩展和修改。移动计算机则完全有别于其它计算设备,开始朝着更专业化的方向发展。本文就将对五十年代到八十年代苏联军事移动计算机在硬件和软件上的发展做一个历史性的回顾。
   当时,苏联专家们都在不同的军工部门和不同的军工企业开发着各自专用的移动计算机。任务的特殊性和需求的迥异性以及严重的跨部门壁垒极大地限制了这些专家间的信息交流。国外同类产品的技术特性更无法获取。这样,一座由数以百计的计算机架构和技术参数堆积起来的“巴别塔”形成了。独立研发这一系列计算机的成本相当高,但却使一些构思巧妙和高效的设计得以实现。正是这些设计,让苏联在军事工程领域与西方保持着相当长时间的同步发展。
   从五十年代到七十年代,苏联一直缺少专门生产计算机电子元器件的企业,电子元器件的生产和计算机架构与控制系统的设计经常是在同一家企业内完成的。这导致了计算机基础元件的落后和规格不一,人们迫切希望其质量和技术水平能有所提高。事实上,当时很多军工企业不得不自己完成整套生产流程——从电子元件到硬件和软件。这不仅造成重复劳动,还延长了工期、增加了系统成本、加大了不同型号的计算机生产难度,使日后维护和升级这些军事控制系统变得更复杂。
   军事系统工程的负责人大都把注意力集中在硬件开发,尤其是计算机辅助上。到了五十年代后期,一种全新的产品出现了,那就是软件。它集中了控制手段和控制过程的智慧精华,在很大程度上就是军事系统质量和效率的代表。不过,那些行政管理人员似乎一时还难以理解这一新观念。他们几乎毫不在意软件开发,不分配足够的人力和时间,也不投入足够的资金和资源在软件开发上。很多官员认为程序不可能满足特殊的需求,甚至认为程序可以由使用者自己来编制。这种态度常常会导致开发人员间的冲突,更有可能引发用户的不满,毕竟大部分用户并不懂编程。上述情况也拖延了工期。
   高成本的硬件开发总让人以为这就是主要任务,程序开发的费用微不足道。程序员的工作在当时看来是既简单又廉价的,几乎不需要任何技术设备。但是,当整个项目的开发研制过程接近尾声时,用户和行政管理人员都会惊讶地发现,高质量的程序几乎和硬件有着相同的成本。在六十年代,一套复杂的程序大概需要10万行代码,但当时的工作效率很低,一个程序员平均每天只能编写0.1到0.3行代码。这样,一年完成一个复杂项目就需要超过1000名程序员。而这些程序员又不懂精工细活,专业技能相对较弱,工资也不高,所以整个系统的劳动生产率很难得到提高,软件最终版本的品质也难以得到保证。
   在六、七十年代,军事计算机的应用面越来越广,用户对它的要求也越来越高。这一趋势意味着计算机程序将越来越复杂,其功能也会越来越多。为了解决过低的劳动效率,提高程序员的数量和质量势在必行。
   技术的进步和电子元件的发展远远跟不上人们对军事计算机日益增多的要求。计算机的控制功能也变得越来越复杂、越来越重要。这对实时控制系统的稳定性、可靠性和安全性提出了新的挑战。
   许多基于移动计算机的军事实时控制系统产量低,受众面窄。因此,程序员往往喜欢采用一些精妙独到的设计而忽略硬件和软件的统一化和标准化。用户也不关心计算机辅助是否应该采用统一的标准,他们只关心产品是否能满足自己特有的要求。如此一来,就像出现了一个“动物园”一样,不同的计算机和不同的软件往往解决着完全相同的问题,尤其是在空降系统和导弹系统中更是如此。

 

  2.实时控制任务的特点

 

  由于军事移动计算机的独特性,研发这类计算机往往需要对算法和程序进行深入剖析。在军事领域,每一种移动计算机都有着明确的任务,因此现有的基础元件足以让每一种计算机都节省下不少设备,拥有更大的内存和性能参数升级空间。这就是为什么在设计军事专用计算机时,确定它们各自不同的基本特点比较容易的原因。
   军事移动系统最重要的特点之一就是运行速度极快,其反应时间一般以分、秒,甚至毫秒计。这样,计算机处理数据和准备控制行为的频率也必须极高,从而适应环境的动态特性。硬件和软件应该在严格的实时框架内进行所有的计算工作,并以最短的时间差对新信息作出反应。尽管计算机的资源有限,但只有这样才能处理任何强度的信息流。
   从一开始,军事系统就具有任务多样性和创新性的特征。后来随着越来越多的任务作业被人们所重视,军事系统的任务种类也越来越多,差异化也越来越大。为了处理这些新出现的任务,以解决某一实际情况为目的的新算法和移动计算机的新资源被陆陆续续地开发出来。这些解决单个问题的算法被逐渐汇编成更多复杂的全功能算法模块,以便完成一个军事系统的主要任务。这个过程要求在一个集中式或分布式的实时计算平台上,为整合或协调不同的算法系统,而编制新的算法。
   普通计算机程序一开始会以整数或有理数算法来完成计算任务。但在军事专用控制计算机程序上,很快就出现了一个特有的新情况。那就是变量能被归入迥然不同的两类:描述对象参数坐标的“准”连续变量和判断对象及其行为的逻辑变量。逻辑函数比计算函数相对更多地用于军事计算机程序。
   计算机系统处理原始数据的过程基本相当于量化某一个连续的物理量,比如对象的坐标、速率,以及电压、压力等标量的读数。由于当时这些信息的精确度都不高,因此必须为它们分别确定一个最佳字长,以便于量化计算机所处理和存储的这些数据。用二进制“位”来计算最常用的物理量大大优化了字长结构和字的运算,同时也节约了不少设备空间。这样,基于12位、16位、18位、20位、24位等多种不同存储和操作基础字长的计算机诞生了。
   通常,计算机程序中的逻辑运算只占用很少的字,甚至只占用几位。为了提高性能,在固定的结构中优化中央处理器以便于方便快捷的处理变量,或者,在字的不同部分中进行尽可能多的逻辑运算,都是不得已的权宜之计。逻辑变量一般只需字的一部分(1到6位)即可。这一切都保证了在基础元件落后的情况下,移动计算机能充分利用内存资源,并发挥更好的性能。这就是为什么直到上世纪七十年代后期,许多计算机才开始使用早已普及的“字节”结构来处理数据。其实对这些军事应用程序来说,“字节”结构并不见得有多么高效。
   许多军事实时控制系统的主要任务就是处理随机数据流,因此其执行某一命令所要耗费的时间也具有随机性。命令执行期的长短几乎完全依赖于原始数据的类型或原始数据进入系统的时刻。由于没有必要搜集大量的信息并把它们存入系统,因此军事移动计算机的环境数据库显得相当小,且缺少专用的管理模块。只有一些在总部使用的军事固定计算机系统才拥有大规模数据库,但这些数据库往往缺少严格的日常维护,而且即使它们的响应速度变得很慢也无关紧要。
   军事移动系统的功能明确而有限,这使得实时控制变得更为容易。为军事移动计算机设计的操作系统没有常见的辅助性或技术性功能。这种简约型操作系统只能用来管理最主要的任务、与外部用户交换信息或控制运算过程。它们也配备了一些资源用来提高系统的可靠性,或者在系统出现错误、故障,甚至崩溃后能重新启动。

 

  3.计算机辅助在移动实时系统中的特点

 

  为数不多的功能、极其有限的体积和简单精细的结构极大地限制了军事计算机的内存和性能。冗余的缺失逼迫设计者和用户在功能性、算法复杂度和结果满意度之间寻求一个平衡。设计者不得不以最高效的手段来使用有限的计算机资源,尽可能地发挥计算机的架构和技术潜能,从而解决各类问题。
   单一的计算机种类无法满足严格多样的尺寸规格、不同环境和不同重力负荷下的差异化需求,以及对可靠性要求极高的标准。于是,专家们研发了各种各样基于不同架构和运算结构的军事计算机。到二十世纪七十年代后期,一系列(超过300种)军事移动计算机出现了。这些机器在架构、功能型指令结构和应用程序所涉及的领域等方面都有所不同。它们不配备任何与主要功能无关的外设。
   军事移动计算机的架构统一趋势直到八十年代初才出现。那是为了适应程序开发的加速化和自动化潮流,这一潮流对当时实时控制计算机的内存和性能都提出了更高的要求。基于“СМ”和“ЕС”多功能计算机型号的架构在苏联很流行。人们因此期望这一趋势能使得在普通计算机上设计和调试的程序不经任何改动就能移植到实时控制计算机上。但实时控制计算机的功能和普通计算机的截然不同,所以最终阶段的调试和测试工作还是不得不在实时控制计算机上完成。这一趋势的进展相当缓慢,因为有很多“继承下来的”程序依然在实时系统中运行。为了提高内存容量和工作性能,构筑在问题架构上的老式计算机现代化工作一直在进行着。在这个过程中,能继续使用的程序被保留了下来,无法继续使用的程序被新程序所替代,从而避免了重新开发整个程序模块或重新测试整个实时控制系统所带来的资源浪费。

 

  4.程序开发工具的特点

 

  在二十世纪六十年代早期,由于缺少足够的内存和性能资源,军事计算机程序的目标代码是在没有任何编程自动化的情况下直接写在实时控制计算机上的。当时程序员的工作效率很低,程序开发周期也相当长。
   在六十年代中期,为了实现自动化编程,各种基于不同资源、架构和技术的计算机出现了。它们的控制设备在设计上和指令结构上各有千秋。这些技术型计算机非但拥有多功能操作系统,而且或多或少拥有可以让用户开发程序的外设。
   早期的技术工具是相当原始的编译器和解释器,前者负责把实时控制计算机的汇编指令编译成目标代码,后者负责执行多功能计算机上的目标代码程序。这些基于普通计算机的程序开发工具被称为“交叉系统”。它们极大地加快和便利了开发过程、独立模块和小程序的调试过程,部分地实现了软件文档生成自动化。
   汇编语言的使用节省了军事计算机的资源,而且防止了在机器语言中出现垃圾代码。毕竟,在高级语言编译成机器语言的过程中,垃圾代码难免会出现。汇编语言的流行一直持续到八十年代后期;当时第三代计算机语言鲜有人使用。在美国的军事系统中,高级算法语言从六十年代后期就开始被广为应用。过多的军事计算机资源和过高的程序员劳动成本是高级语言在苏联军事系统中难以流行的两个主要原因。但事实上,用汇编语言编写的算法和程序也并未有效地利用现有的计算机资源。
   最初,交叉系统是为每台实时控制计算机研制的,但随着时间的推移,编程工具开始不仅限于此。到七十年代早期,在基于多功能计算机的交叉系统中,机器型的编译器和解释器已经变得相对较小了。所剩下的部分是不依赖于实时控制计算机特性的可视化编程工具。这些工具为用户、软件说明书、程序的测试与调试和程序结构精确性的静态分析等提供了便利。这样,开发具有可配置特性的编译器和解释器就显得十分重要。这些编译器和解释器以公式化的实时控制计算机架构和指令系统描述集为基础。指令系统的描述将被自动翻译成机器型的编译器和解释器模块,从而把开发交叉系统的费用降低了十倍。在七十年代中期,按照这些原则,一套复杂的多功能工具——“ЯУЗА-6”被开发了出来。以“БЕСМ-6”计算机为基础,这套工具被安装在了大约20种不同的军事实时控制计算机中。紧随其后的是基于“ЕС”的“РУЗА”交叉系统。
   到七十年代后期,大约有10万名程序员为军事系统开发了数以百计复杂的计算机程序。他们的劳动生产率提高了十倍,达到了平均每人每天编写1到3行代码的程度。程序设计错误问题和实时程序的可靠性问题变得日益紧迫起来。由于程序在调试过程中需要用到真实的军事设备,但这些设备又非常昂贵,万一丢失或损坏后果不堪设想,因此,工程师们在技术型计算机上开发了专用于模拟实时环境的试验台。
   交叉系统所起到的作用相当有限,它仅仅满足了小型程序最初阶段的开发和独立调试工作。大型程序复杂的实时调试工作无法在技术型计算机上完成,因为解释器会导致程序执行速度减慢几百倍。这就是为什么使用混合计算机系统的原因。在混合计算机系统中,军事系统的程序在实时控制计算机上运行的同时,又与技术型计算机发生信息交互,技术型计算机专用于模拟环境和测试结果。
   普通计算机上的专用模拟器负责产生合适的数据流,与外部对象的各种属性相一致。模拟器还负责调试实时环境下的各种程序反馈信息。这样就保证了军事计算机程序能在一个不使用任何现实设备的模拟环境下得到充分、高效的调试和测试。苏联第一架无人驾驶航天飞机“暴风雪号”就是依靠这一技术制造出来的。