大数跨境
0
0

用这个模拟器,他拯救了正在逝去的计算机历史

用这个模拟器,他拯救了正在逝去的计算机历史 学术头条
2016-11-24
2
导读:现在,SimH已经成了Github上的一个开源项目,世界各地的技术爱好者不断为它添砖加瓦,使得它能模拟更多老式计算机系统。

本文来自IEEE Annals History of Computing


撰文  鲍勃·苏普尼克


这都是拉里·斯图尔特(Larry Stewart)的错,真的


1993年初,我主管的一个项目结束了,完成了DEC的64位芯片Alpha和其系统程序的开发工作。而我也被“提升”为了公司负责工程战略的副总裁。我在Alpha开发时期做的那些充满乐趣的技术项目也都随之结束了,例如Raven微程序、筹划中的单片机ECL VAX、为复杂的VAX指令编写Alpha的仿真库、升级冒险与地下城(Adventure and Dungeon)的Fortran源代码等。在我的日常工作之外,我还需要找点别的事情做。


当时在DEC剑桥研究实验室工作的拉里知道我对仿真感兴趣。的确,我在刚进入计算机行业,还在应用数据研究(ADR)工作时就已经对仿真产生了兴趣,他建议我编写一个新的针对老式计算机的可移植仿真器,在PC机上运行,用来保留过去的那些软件,让老的系统和架构不至于不断流失。他还指出,搞一个仿真项目可以让我的编程技能与时俱进,因为我用得最熟练的那三种语言——microcode、VAX assembler和Fortran,看起来都没什么前途。


要让这个新的仿真器具备可移植性,就应该用一种被广泛运用的语言来小心编写它。在1993年,C语言无处不在,而C++仍处于诞生初期。所以,在学习了C语言后,我选择了它来开发这个新项目。我开始着手改写原来的MIMIC仿真系统(PDP-10 汇编语言,ADR 1969),使其适应现代的计算机。MIMIC已经把模拟控制台与模拟器本身分离开了,从而使得同样的控制台可以在多种不同的仿真器上使用。它还使用了一个规范机器模型,把处理器,内存和I/O控制器分离开了,这个模型是在艾伦·纽厄尔(Allen Newell)和C·戈登·贝尔(C. Gordon Bell)的处理器-内存-切换开关(PMS)模型的基础上建立起来的。事实证明MIMIC的设计很适合C语言,再一次证明C其实只是增加了花括号的汇编语言。我先编写了PDP-8,然后是PDP-11,来证明控制包是可重复使用的,然后在1994年发布了SimH(历史模拟器)的第一个版本。


在这十年剩下的时间中,我回顾了自己的程序员经历,模拟了自己在不同时期接触到的机器, 随着新世纪的到来,我把自己曾遇到的其他机器也加入了仿真器。


在这个过程中,SimH也逐渐从我个人的爱好项目变成了一个通过互联网相互联系的专业爱好者团队。互联网和Web正好出现在SimH之前,它们提供了全球合作所需的工具。通过互联网,我能够联系那些可以获取早已失传了的软件和文档的人,在调试操作系统和解开棘手问题时获取帮助,最终还可以招募合作者编写新的模拟器或接管现有的模拟器。 Altair、Altair Z80、SWTP 6800、Data General Eclipse、IBM S / 3和IBM1130模拟器都是其他人编写的,HP 2100的则由互联网团队成员接管并完全重写。到了几年前,很明显,SimH不再是一个单人项目,它变成了一个GitHub上的开源项目,由马克·皮佐拉托(Mark Pizzolato)负责编辑。


SimH沿着几个方向不断进化。首先,它可以仿真的系统变得越来越多,从20世纪50年代的商用计算机到70年代的个人爱好者使用的计算机,直到21世纪的超级计算机。第二,控制包变得越来越精密和复杂,可以提供信号调试功能、一般的断点系统、无关字节序的I/O,还为常用的外设,例如磁带和终端多路复用器提供了中心库。


最终,这个仿真器变得更精确了。随着越来越多的软件出现,对执行特性的依赖问题也反复出现,从而有必要根据这些问题来升级仿真器。下面是两个最近的例子。


鲍勃·阿姆斯特朗(Bob Armstrong)使用H316仿真器,配合一些他添加的新设备,来重现当初的Arpanet IMP代码。在调试过程中,他发现处理半双工电传打印机时的不精确,会导致出现伪中断。我不得不重写了电传打印机模拟器,修复每处bug,使其与硬件兼容


马特·伯克(Matt Burke)发现,VAX Ultrix在I/O空间中对一个未对齐的地址使用了BLBC指令。尽管架构手册中严禁这种方式,但它很明显是有效果的。要修复这个问题就需要把未对齐的I/O访问程序彻底剥离出来并重写。


尽管有了这么多变化,SimH一直保持着相对较高的可移植性。在2010年前,这个项目是不允许有针对特别操作系统的代码的。最近,由于设备仿真器缺乏统一的行业标准解决方案,例如图形设备,这个要求需要放宽一点。仿真器需要支持的操作系统也只剩下了Windows、Linux和Mac OS。同样,SimH一直保持着单线程,对异步任务进行自身的伪调度,以免在按照执行指令计量时,遗失“时间”。这并不适用于现在的多核系统,但这使得模拟器是完全可预测的——对于调试老软件中的竞争条件和时序问题非常有帮助。


SimH的非商业性质一直非常明确,但这并不是意味着它没有商用价值。一个有趣的例子是,一个VAX开发者想利用SimH替换他老旧的MicroVAX3900,我试图向他推荐一个商业VAX仿真器,但他坚称非SimH不可。于是,我帮助他从真实硬件上把VMS5.5的镜像下载下来,然后载入到VAX仿真器里。尽管我没有测试过这个版本的VMS(我测试过7.2和7.3),但效果很好。那个开发者说,他的编辑-编译-连接周期从135分钟缩短到了15分钟,当时这事就这样过去了。


后来我才听到这个故事的后续部分。那个开发者考虑的这个系统其实是地狱火导弹地面发射站的开发环境。商业VAX仿真器不行,是因为它们都是俄罗斯开发的,而且不开源。用SimH仿真VAX虽然速度上跟商业仿真器差得远,但源代码可以审查,这是最关键的因素。


有些展示活动会用SimH来形象地表现计算机的高速发展过程。在超级计算2007大会上,SiCortex团队在12个不同核(整个机器有5832个核)上运行了12个SimH 仿真器,用其系统0.2%的计算能力演示了50年的计算发展史,从IBM 1401直到SC1本身。另一方面,有爱好者在两个通过以太网连接的树莓派(Raspberry PI)上运行了VA集群,用100美元重现了在20世纪80年代需要50000美元的计算设备,并把占地面积从半个房间缩小到了一个桌面。


SimH也成了处理老式硬件时的参考工具。2011年,我利用SimH解码了H316操作指令的行为,并且证明有关这一问题的参考文件实际上并不是很准确。就在今年,我在澳大利亚的朋友马克斯·伯内特(Max Burnet)用SimH编写和调试了小型诊断程序,用来为经典PDP-8桌面电脑的复原机器排除故障。当然,反过来也一样。计算机历史博物馆中的复原IBM 1401是理解1401行为细节的唯一可靠权威。


尽管我已经从SimH的“无畏领袖”这个位置上退了下来,但关于它我还有许多事情要做。IBM 7094的仿真器运行的是IBSYS,是标准的IBM操作系统,但不是CTSS——MIT在20世纪60年代早期开发的先进时间共享型系统。(其他7094仿真器运行的是CTSS,所以不用急。)还没人为PDP-15找到一份MUMPS,即第一个商用的M语言。Sigma 32b家庭版仍然不完整,没有经过测试。还有,如果我们能找到机器可读的MIMIC源代码,形成一个闭环,那不是很好吗!如果在SimH模拟的PDP-10上运行MIMIC,那它就能运行一个模拟的PDP-7,反过来又能模拟一个PDP-8……


【声明】内容源于网络
0
0
学术头条
致力于学术传播和科学普及,重点关注大模型、AI4Science 等前沿科学进展。
内容 1019
粉丝 0
学术头条 致力于学术传播和科学普及,重点关注大模型、AI4Science 等前沿科学进展。
总阅读0
粉丝0
内容1.0k