Unix的诞生与Brian Kernighan

2020-11-22 21:41:42

当您在计算机上工作时,您会想到很多事情:操作系统,编程语言,它们都必须来自某个地方。

在1960年代末和1970年代末,那个地方是贝尔实验室,而他们正在建立的操作系统是UNIX。

他们不仅在构建操作系统。他们正在建立一种使用以前不存在的计算机的方法。

在今天的一集中,我与Brian Kernighan谈论了Unix的历史。

“如果您愿意的话,您可以坐在办公室里思考,思考或编写程序,或者用自己的黑板或其他东西写字,然后在需要时回到公共空间。” – Brian Kernighan

“当我试图找出自己的逻辑而不是找出无限的文档堆栈中所需的功能时,我发现编程变得更容易。因此,对我来说,编程更像是创建东西而不是查找东西,而当今太多的编程更像是查找东西。” –布赖恩·克尼根(Brian Kernighan)

“如果我发现挑战或困难,或者其他人发现困难或挑战,或者其他人发现的东西,那么,如果我做些可以改善自己的事情,那么我可能会同时提高自己的水平。” –布赖恩·克尼根(Brian Kernighan)

注意:此播客旨在收听。如果可以的话,我们强烈建议您收听音频,其中包括页面上没有显示的重点。这集的播客页面在这里

当您在计算机上工作时,您会想到很多事情:操作系统,编程语言,它们都必须来自某个地方。在1960年代,那个地方是贝尔实验室,而他们建立的操作系统是Unix。他们不仅在构建操作系统。他们正在建立一种使用以前不存在的计算机的方法。要了解更多信息,我联系了这个家伙。

我是Brian Kernighan,目前,我在普林斯顿大学教授计算机科学。

来自Unix的Brian硬币。他是K&R中的K,这是一本有关C的著名书籍,仍然是最受欢迎的书籍清单。他曾在贝尔实验室这个计算机科学研究小组工作了30年。他将分享有关Unix创作的故事,希望我能尝试弄清他们的一些秘密,以至于如此具有影响力。在此过程中,我们将不得不学习Unix哲学和印刷专利申请,但我们还将必须学习10公斤巧克力棒和CIA的假冒产品,当然还有英国讽刺小说杂志。

Unix的故事是关于贝尔实验室的故事,所以让我们从布莱恩(Brian)为研究生的那一刻开始,他就获得了暑假在那里工作的实习机会。

贝尔实验室是一栋非常大的建筑物,由一系列相连的建筑物组成,大约有3,000人在这些长长的多层建筑物上工作。我最清楚记得的是第一天的事情,我认为这是第一次实习的第一天,所以称它为1967年夏天,我有了一个办公室,如果我没记错的话,我有一个办公室可以我。因此,这在现代时代是闻所未闻的。

但是我自己有一个办公室,大概在11:00左右,或者在我的第一个早晨坐在那儿,我想知道:“我到底要做什么?我不知道发生了什么事。”这位年长的绅士走过我的办公室,他说:“嗨,我是迪克……我们去吃午饭。”我想:“好吧。”我和狄克(Dick)一起吃午餐,但我的名字没被发现。我们共进午餐,他只是个有趣的家伙,但是很有趣。午餐后,他去了其他地方。

我从我的办公室偷偷溜到同一条走廊上的他的办公室,看看他是谁,因为每个人的门上都有名字标签。原来是纠错码的发明者迪克·汉明(Dick Hamming)。

迪克·汉明(Dick Hamming)又名理查德·汉明(Richard Hamming)。他的维基百科页面很大。他在曼哈顿项目编程计算机上工作,以计算开发核武器所需的方程式。与布莱恩共进午餐后的一年,他将因其在纠错代码方面的工作而获得图灵奖,即所谓的诺贝尔计算机奖。海明(Hamming)也因他的演讲而闻名,他讲述了对您职业生涯产生影响的秘密。

这次演讲被称为“你和你的研究”,基本上是对他职业生涯的回顾,他在思考是否有一般课程可以以某种方式帮助其他人获得更好的职业。他非常非常有趣,我认为这是一个很好的榜样,他有很多才华横溢,但不是超级天才型人物,他会充分利用自己的才能。他以各种方式扩大了自己,使他对世界的影响更加复杂。另一件事可能适合今天,他曾经说过,他将保留星期五的下午来思考好主意。

他将坐在办公室里,将脚放在桌子上,并且他会想出好主意,无论可能是什么。通常是对自己进行自我反省,或者是对领域的去向,或者将来会发生什么?您可以采取什么措施来利用它或以某种方式处理它?今天是我们谈话的星期五早上,我不是很经常在星期五的下午得到这种奢侈,但这是一种思考的有用方法。您说:“我要停下来并定期进行以总结正在发生的事情,然后再想一想,'我能以某种方式做到这一点会更好,那对于我还是我的家人或世界还是其他?””

他非常虔诚地做到了这一点,您星期五在午餐后进去了,您会发现他坐在办公室里思考着很棒的想法。所以他很有趣。

我喜欢这个建议,它的前提是,如果我只有星期五有空,并且在日历上写出了很棒的想法,我会提升想法。我的意思是,也许是这样,我会尝试一下。不过,汉明(Hamming)最有名的是一个概念,那就是如何选择工作方式。

他告诉我以及可能还有很多其他人的方式是,他曾经和化学家这样的一群人一起吃饭,我想具体的事情是,他会在午餐时间在大型自助餐厅用餐。他将与化学家坐下并与他们交谈,然后问他们正在从事的工作,以及他们正在进行的工作是否有可能获得诺贝尔奖。答案通常不是,不是机会,这就是他说的意思:“那么,您为什么要努力呢?因为如果它至少不能潜在地获得诺贝尔奖,那么它就不重要了。您为什么要浪费时间在不重要的事情上?”

无论有意还是无意,Brian都遵循了这一建议。当他回到普林斯顿从事论文工作时,他正在从事图分区,在某种意义上我们现在知道这等同于旅行推销员问题。您必须找到推销员从一个城市到另一个城市旅行的最佳路线,以最小化旅行距离。为了完成他的论文,布莱恩当时必须在普林斯顿大学的计算机上工作。今天的计算机与1967年和普林斯顿的68年相比有很大不同。当时,计算机都是关于Fortran和打孔卡的。

Fortran绝对是在卡环境中设计的,我认为这些卡早于Fortran,但在我看来,它们之间的联系非常紧密。因此,是的,基本上每行只有一条声明,因此是一张物理卡。因此,当您编写程序时,必须将其打孔在这些打孔卡上,然后确保按顺序进行打孔和类似操作,然后将其交给操作大型,昂贵机器的人员。过了一会儿,返回到您的结果,通常是某个地方出现语法错误,然后您必须找到错误的卡,用正确的新卡替换它们,然后重复该过程,但时延非常长,通常需要数小时甚至几天的时间。

这不完全像即时编译。而且Fortran本身也是一种笨拙的语言,部分地反映了计算的早期情况,部分地反映了我们对此了解不多,并且计算机本身并不特别复杂的事实。最后,Fortran旨在用于科学计算。举例来说,它并非旨在用于通用系统编程或类似的程序。所有这些都意味着该程序虽然很有趣,但与五年或十年后的发展并不相同,并且还在不断发展。

我不得不看一些YouTube视频,以了解打孔卡世界。打孔卡就像索引卡一样,但是宽度更大,因为它有80列。这些列中的每一个都对应一个字符。您在该列上打孔以指示应该在其中输入哪些字母,因此每个打孔卡代表一行Fortran代码。人们以这种方式构建程序,将这些卡打孔,然后将它们放入大盒子中以便随身携带,然后您将其放到某个地方,交给计算机操作员,由他们将其交给可以读取所有内容并运行的计算机该程序。

因此,如果您有1,000行的程序,那么您将有1,000张卡。没有屏幕,没有交互输出。您将卡交给了计算机操作员,并等待程序输出结果。计算机既昂贵又庞大,因此他们想最大化吞吐量。您的程序可能正在执行昂贵的数学计算,但您也可能仅在执行字处理。一张卡片可能会说“以粗体显示我的论文”,而下一张卡片会说“ Brian Kernighan印刷,”,依此类推。这就像是使用打字机的冗长方式,不同之处在于您可以随意更换卡片并重新打印。

那时,人们对文本格式非常感兴趣。在66年代上麻省理工学院时,我使用了一个名为RUNOFF的程序,该程序由Jerry Saltzer编写。我只是最近才知道,杰里实际上是为了写博士学位而写的。论文,很整洁,但是我没有,所以我不得不将论文打印成论文。我决定,这到底是什么?所以我写了一个非常非常俗气的小格式化程序,大约有1000行的Fortran做了简单的事情,例如确保行长都一样,甚至证明右边距是正确的,回想起来,我认为这很愚蠢。

另一件事是……不幸的是,打孔卡只是大写的。我的意思是,您只要五指致敬,您就能做到,但会没人用。所以它是大写的。因此,这是我的小格式的一部分,或者仅仅是自动大写的东西。因此它将找到句子的开头,并确保该句子是大写的,将其他所有内容都转换为小写,依此类推。我可以用这种方式打印看起来像论文的东西。

当然,您需要使用转义字符来在不合适的地方击败自动大写字母。 Fortran根本无法很好地处理字符,因此有很多伪造的东西可以使该部分正常工作,但这很好。因此,论文基本上是三盒纸牌,每盒6,000张纸牌,大概重10磅,12磅,5公斤。因此,您将采用这三个盒子,即1,000张卡片,其中第一个盒子的前半部分是程序,然后剩下的5,000张卡片是论文。然后,您将把这三个盒子拿给操作员。一两个小时或三个小时后,论文将再次印刷出来。然后,您只需不断迭代,直到效果足够好为止。

我认为这是一种预兆。论文的一部分是编写程序来做论文。因此,您论文的卡片的前半部分是一种小语言的实现,可让您格式化论文,然后再撰写论文。

是的,完全正确。这完全是偶然的,但从某种意义上讲,是的。它是构建工具,可让您执行操作,而这些工具通常是某种专门语言。

布赖恩(Brian)从事论文研究时,肯·汤普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)回到贝尔实验室(Ben Labs)时,正在研究一个将更多交互式计算带到世界的项目。该项目称为Multics。 Multics是一个分时操作系统。时间的洞察力是,如果您可以将许多人连接到计算机,尽管一个人无法有效地消耗计算机的时钟时间,但也许他们可以。您可以通过分时进行此操作,基本上是给每个人每一秒的时间,以使他们感觉好像他们可以完全访问计算机,而实际上计算机正在他们之间切换。

如果在您的时间段内可以完全访问计算机,则不需要打孔卡系统,则可以使用电传打字机终端。我认为电传打字机终端看起来像是与打印机和电话线结合在一起的大型打字机,它们最初用于发送电报。您可以键入命令,然后使用电话线将其直接发送到计算机,然后立即在您上方直接打印出结果。有了分时度假系统,您可以将许多此类设备连接到一台计算机上,并在它们之间分配时间。

电传打字机终端通过telnet进行通信,至今仍在使用该协议,尽管我猜想SSH已在很大程度上取代了它。文本文档的ASCII格式是为这些电传打字机创建的,这就是为什么它具有怪异的控制字符(如传输结束)的原因。这真是一个有趣的时刻。这些交互式计算机的诞生。无论如何,回到Multics项目

Multics系统是MIT和Bell Labs的合资企业,实际上是制造电气的通用电气的合资企业。因此,从事该软件工作的人员分别在麻省理工学院和贝尔实验室工作,这使人们习惯了非常好的计算环境,而不是带有卡的批处理环境,而是如今的交互式环境。

Multics没有成功。贝尔实验室退出了该项目,贝尔实验室不再进行任何操作系统工作。浪费时间成为了管理的感觉。 Ken特别认为该系统太复杂了,但是它是交互式的,并且比批处理打孔卡世界还遥遥领先。

这样一来,人们,尤其是Ken,还有Dennis Ritchie和其他一些人,都对真正好的计算机环境有所兴趣,但没有一个。因此,他们做了很多事情。他们游说管理层购买一台高端计算机,以便他们可以构建自己的操作系统,但是那无济于事。他们花了很多时间思考设计问题,将它引入到分时系统中,就像Multics一样,但大概没有那么复杂,但肯定会从Multics中窃取好主意。 Multics有很多好主意。我的意思是,这就是并行的地方,我想Ken正在探索这种PDP-7环境。

PDP-7是1964年由Digital Equipment Corporation生产的微型计算机。对我来说,这听起来像是用词不当,因为当我使用Google时,它看起来像是一系列巨型柜子,上面装有小桌子以及一些具有计算机外观的零件。无论如何,这是贝尔实验室的PDP-7,它已经过时了,它是在60年代初期生产的,没有人使用它,但是它确实有图形显示,基本上是一台非常早期的计算机监视器。当时电脑显示器并不多。因此Brian获得了博士学位,他开始全职在Bell Labs工作。他对此图形显示有一些早期记忆。

然后,图形显示用于Ken所进行的某些游戏,而在Dennis Richie不久之后,诸如Space Travel之类的东西就在其中,您拥有完整,准确的太阳系模型,并且您可以绕着小火箭导航太阳系可以降落在各种物体上,因此您可以降落在木星的其中之一或类似的卫星上。还有一个太空战争游戏,是您和我互相射击,就像您有时看到的两人版小行星游戏一样。我为此浪费了很多时间。我认为该游戏可能来自麻省理工学院,并且刚刚被移植,但我实际上并不知道。很好玩。而且我对轨道动力学的了解很少,因为他学会了如何处理重力。

关于PDP-7的另一个有趣的事情是辅助存储。它基本上有这个巨大的磁盘驱动器,Ken对使用它的最佳方式感兴趣。

他一直在研究文件系统,在此PDP-7上试验文件系统内容,只是进行试验以查看如何在某些大型辅助存储设备上管理信息。他们身体上很庞大,但容量不是很大。因此,我认为,即使没有实际实现,您也会想到文件系统的基础知识。

因此Ken想到了更好,更简单的Multics的这些想法。碰巧的是,在这段时间里,他的妻子休假了,这给肯留下了比以往更多的业余时间。

邦妮带着他们的儿子去了加利福尼亚,当时我大概已经一岁了。在那里呆了三个星期。因此Ken认为他已经很亲密了,因此他在三周内就建立了一个可以正常运行的操作系统。我认为您可以从某种意义上说这是认真的足球生产力。

我认为,无论如何,这都是很高的生产力。这是Unix的第一个版本。他们有一台旧电脑,通常是一旁的房间,里面有一个电传打字终端。从那里,不再有打孔卡。事情开始加速。这个第一个操作系统是用PDP-7程序集编写的,但这是如今无处不在的类Unix操作系统的基础。我的意思是,那太疯狂了。也许这就是这个计算机科学研究小组的秘密,只有肯·汤普森。我的意思是,他对程序员有多好?

这些认识之一就是他可能在某个时候突然意识到我作为一名程序员的惊人程度。我们对文档准备软件,对我论文的文本格式等等感兴趣,等等,那里还有其他人。所以我们买了一个排字机,就是一台设备…认为它就像激光打印机一样,但是在激光打印机问世之前,它先打印在相纸上,然后才需要显影,但这是高质量的东西。印刷材料。我们从一家公司那里得到了它,结果证明机器本身带有软件,该软件是如此的容易出错,完全没有用。因此,问题是,我们可以找出对这台机器进行反向工程的方式,以便我们可以创建自己的软件来运行它。该设备除了用于处理摄影胶片或纸张的物理设备外,还具有一台微型计算机,即所谓的Computer Automation Naked Mini,类似的东西。基本上,这是这些弱小的16位计算机中的另一台。而且,我们所拥有的只是一本手册,而且我们知道排字机中包含其中之一的事实。因此,它是排字机中的控制器。

那你打算怎么办?嗯,您需要做的是从制造商那里获取一些代码,但是它是二进制的,您将如何处理?因此,我们在下午晚些时候坐在那里,想着:“好,要做点什么。”我们是肯·汤普森,乔·康登和我本人。

是的,那么,如果您只有一和零,就必须以某种方式像指令集一样,对吗?

是的好吧,您有手册,所以您通常知道他们是否

......