1700435560
UNIX传奇:历史与回忆 2.2 CTSS和Multics
1700435561
1700435562
当时最有创造性的操作系统是麻省理工学院于1964年推出的CTSS(兼容分时系统)。在那个时代,大多数操作系统都采用“批处理”技术。程序员将程序打到穿孔卡上(那是很久以前的事了!),交给操作员,然后苦等几小时甚至几天,等待结果出来。
1700435563
1700435564
穿孔卡用高品质硬纸制成,每张卡片能保存最多80个字符,容纳一行程序的内容。6行C语言程序得用6张卡片,如果要修改代码,就得替换卡片。图2-1展示了一张80列标准卡片。
1700435565
1700435566
1700435567
1700435568
1700435569
图2-1 穿孔卡,187.325 mm×82.55 mm
1700435570
1700435571
与此不同,CTSS程序员使用类似打字机的设备(如下一章图3-1所示的Model 33 Teletypes“终端机”),设备直接连接或通过电话线连接到一台大型计算机,如拥有两倍于通常型号32K(32 768)个字长内存的IBM 7094。操作系统看顾每位登录用户,在用户之间快速切换,令每位用户误以为整台计算机都为我所用。这种技术叫作“分时”,(以我个人体验而言)它比批处理更为令人愉悦和有生产力。多数情况下,真的让人感觉不到有其他用户存在。
1700435572
1700435573
见到CTSS编程环境如此高效,麻省理工学院的研究员们决定做一个更好的版本。他们想做一套信息处理工具,向大众提供计算服务。1965年,他们开始设计Multics系统。Multics意思是多路复用信息和计算服务(Multiplexed Information and Computing Service)。
1700435574
1700435575
Multics是个大项目,意图制造出强悍的新软件和比IBM 7094功能更丰富的新硬件,所以麻省理工学院邀请了两家公司来帮忙。计算机制造商通用电气(General Electric,GE)公司负责设计和生产拥有全新硬件特性、能更好地支持分时和多用户体系的新计算机。由于贝尔实验室在20世纪50年代初就打造了自己的操作系统,拥有极丰富的经验,因此在这个项目中帮忙做操作系统。
1700435576
1700435577
Multics本该前途无量,但其很快就陷入困境。回头看来,它算是第二系统效应(second system effect)的受害者。所谓第二系统效应,意思是在首个系统(如CTSS)创建成功后,打算创建一个新系统,修正旧系统的遗留问题,还要添加每个人期望的新特性,结果常常是塞了太多不同东西进去,最终得到过于复杂的系统。这就是Multics遇到的情况。在多份有关Multics的文件中都出现了“过度设计”(over-engineered)一词,用萨姆·摩根的话来说就是“同时爬好多棵树”。而且,项目参与方是一所高校和两家全无共性的公司,分布在美国的3个地方,即使对组织机构无甚研究的人也能料到会出问题。
1700435578
1700435579
1966年至1969年,有六七个贝尔实验室研究员从事Multics相关工作,其中有道格·麦基尔罗伊、丹尼斯·里奇、肯·汤普森和彼得·诺伊曼。维克·维索斯基搬去贝尔实验室的另一处驻地后,彼得接替了他的职位。道格致力于在Multics上实现PL/I[2]。还在哈佛大学读书时,丹尼斯就在为Multics编写文档,加入贝尔实验室后,又参加开发设备I/O(输入/输出)子系统。肯全力做I/O子系统,这段经历在他后来开发Unix时派上了用场。在2019年的一次采访中,他形容自己为Multics做的事是“巨轮上的一道凹槽,它搞出来的东西连我自己都不想用”。
1700435580
1700435581
到了1968年,尽管对能用上它的少数人而言,Multics算是一个优秀的计算环境,但在贝尔实验室看来,作为一套信息处理工具,它已无法实现以合理的代价为实验室提供计算服务的目标,并且它太贵了。1969年4月,贝尔实验室退出Multics项目,留下麻省理工学院和GE继续苦战。
1700435582
1700435583
Multics最终还是完成了,起码是宣称成功了。直至2000年,它虽然没被广泛接受,但仍然持续得到支持和使用。很多好点子滥觞于Multics,但它最持久的贡献却完全没人预料到:它影响了一个叫Unix的小操作系统,这个小系统诞生的部分原因是想摈弃Multics的复杂架构。
1700435584
1700435585
1700435586
1700435587
1700435589
UNIX传奇:历史与回忆 2.3 Unix起源
1700435590
1700435591
贝尔实验室退出Multics项目后,项目组成员得找其他事来做。肯·汤普森(图2-2)还是想做操作系统,但实验室管理层被Multics伤透了心,不肯给操作系统项目买硬件。肯和其他人只能纸上谈兵,设计操作系统的各种组件,无法开展具体的实现工作。
1700435592
1700435593
1700435594
1700435595
1700435596
图2-2 肯·汤普森,约1981年 (杰勒德·霍尔兹曼供图)
1700435597
1700435598
恰在此时,肯找到一台没怎么用过的DEC PDP-7计算机。这种计算机的主要功能是做电路设计的输入设备。
1700435599
1700435600
PDP-7于1964年推出,但计算机领域演进太快,到了1969年,它已经过时。这台机器本身不算很强大,只有8K(8192)个18位字长的内存(16 KB),但其图形显示非常漂亮,所以肯就为它写了个太空旅行游戏。在这个游戏里,玩家可以漫游太阳系、探访各个行星。这个游戏有点让人上瘾,我玩了好几个小时。
1700435601
1700435602
PDP-7还有一个好玩的外设——磁盘驱动器高耸,直直架着一块磁盘。据传,万一盘片飞出来,站在它前面的人就有可能遇险。磁盘运转速度远高于计算机读写速度。为了解决这个古怪的问题,肯写了个磁盘调度算法来提升磁盘的总吞吐量。这个算法在任意磁盘上都可用,但主要是为PDP-7的这块磁盘设计的。
1700435603
1700435604
如何测试这个算法呢?这需要往磁盘上装载数据,肯认为他需要一个批量写数据的程序。
1700435605
1700435606
“在某一时刻,我发现离实现一个操作系统仅有3周之遥了。”他需要写三个程序,每周写一个:用来创建代码的编辑器;将代码转换为PDP-7能运行的机器语言的汇编器;再加上“内核的外层——操作系统齐活了”。
1700435607
1700435608
正在那时,肯的太太休了3周假,带着一岁大的儿子去加利福尼亚探望公婆,这样肯就有了3周不受打扰的工作时间。正如他在2019年一次采访中所说,“一周,一周,再一周,我们就有了Unix。”无论以何种方式来度量,这都体现了真正的软件生产力。
[
上一页 ]
[ :1.700435559e+09 ]
[
下一页 ]