返回

文章详情

学习《Unix时间共享系统》

Hacker News2026年8月22日 16:11

大家好 - 本月通讯的主题是《Unix时间共享系统》,作者是Dennis Ritchie和Ken Thompson。这个通讯的目的是揭示Unix早期历史的真实细节;为了让大家对使用这些工具更加自信,我提供一对一的Linux、基础设施工具、脚本编写、设计等方面的教学。有关更多信息,请查看指导计划。背景 Linux的设计源于一位伟大的头脑,而那位伟大的头脑并不是我,我是说,你必须把Linux的设计归功于Kernighan、Ritchie和Thompson。Linus Torvalds,2011年非正式采访 第一个版本是在我们中的一位(Thompson)对现有的计算机设施不满意时写的,他发现了一台很少使用的PDP-7,并着手创建一个更加友好的环境。这个(本质上是个人的)努力足够成功,以吸引了另一位作者和几位同事的兴趣。Dennis Ritchie,《Unix时间共享系统》 Unix最初是由Ken Thompson编写的。他的雇主AT&T退出了一个名为Multics的操作系统项目。对于我们大多数人来说,当雇主退出一个项目时,他们会给我们一个新的任务:贝尔实验室的运作却不同。它主要是一个自我导向研究的智囊团;研究人员被置于独立状态,以追随他们自己的兴趣。 Ken在此时感到一无所措,他决定他知道自己感兴趣的事情:他可以使用一台为Multics工作而购置的GE-645计算机,但此时处于闲置状态。它配有鼓式磁盘,他想优化磁盘吞吐量。之前没有人解决过这个问题。用他自己的话说:“那些外设真不错……它配有一组比我能想象的任何东西都要快的磁盘,我想编写鼓寻道算法,我想提高鼓的吞吐量,因为我在计算机中心或Multics中所知道的一切都无法很好地处理鼓……基本上,他们只会说‘读取’,然后等待读取结果,但你想要的是同时重叠的读取。基本上,这很有趣,但这就是我的生活,这就是我的全部。 Ken Thompson,图灵奖采访 在他准备开始使用新的磁盘布局和访问方案进行交互式终端会话时,他失去了对这台机器的访问。为了替代它,他找到了那台“很少使用的PDP-7”,并利用它继续他的磁盘布局研究。他意识到他几乎完成了一个完整的操作系统,还需要大约3周的时间来完成。在他自己的话中:“它有一个文件系统。它有一个磁盘驱动程序。它有输入/输出外设。它有,嗯,它有一切,只是没有维护自身的能力。所以我需要一个编译器、编辑器、汇编器、加载程序和用户保护,来运行多个用户。” Ken的妻子恰好和他们的孩子一起度假3周,因此Ken完成了剩余的一小部分。为了确保你知道你在和谁打交道,是的,Ken Thompson在3周内用汇编语言写了编译器、编辑器、汇编器、加载程序和用户保护。 文件打开革命 这篇论文中有大约一万个值得评论的小历史细节,但我想讨论一个非常奇怪的细节,除非你知道你在看什么,否则它不会引起你的注意。你看,Multics有一个被称为单级存储的系统。这里是引述:一个open或create系统调用的目的是根据用户给出的路径名,通过搜索显式或隐式命名的目录将其转换为一个i号。一旦一个文件被打开,其设备、i号和读写指针存储在一个由open或create返回的文件描述符索引的系统表中。因此,在后续的读取或写入文件的调用中,描述符可以很容易地与访问文件所需的信息相关联。Dennis Ritchie & Ken Thompson,《Unix时间共享系统》 我们生活在一个这样的平凡世界中。Open……打开一个文件。当时的背景是什么呢?幸运的是,Ken Thompson告诉我们:Multics是一个具有页面错误的虚拟内存系统,它并不区分数据和程序。你会跳转到一个段,而它在被调入的时候可能是作为数据或指令被调入的。没有文件可以读取或写入——没有任何可以远程操作的东西——我认为这是个坏主意。这个巨大的虚拟内存空间是Multics的统一概念,它必须在当时人人都在寻找编程的伟大统一理论的时代尝试,但我认为这是个大错误。我想区分数据和程序,因为数据和指令是非常不同的。当你在读取文件时,你几乎始终可以确定数据是按顺序读取的,当你错误的读取a并读取a + 1时,你不会感到惊讶。此外,从高速缓存中分离指令比分离数据要困难得多。因此,我添加了exec系统调用,它表示“以程序的身份调用这个东西”,而在Multics中,你将指令调入并跳转到它。 Ken Thompson,《Unix及其后》,1999年 Ken偶然发现了一些东西

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡