Evolution of the UNIX Time Sharing System

根据 Dennis. M. Ritchie (原文)生成三个 verbosity 的文本。

idea.txt

本文记录了 Unix 操作系统自 1969 年起源的早期演变。文章追溯了 Unix 发展的技术与社会历史,聚焦于三个关键创新:文件系统(含 i-node 与目录)、进程控制(fork、exec、wait)和管道。叙述强调了 Unix 如何从 Multics 的失败中诞生,最初在 PDP-7 上实现,并通过贝尔实验室一个小团队推动的务实、渐进式改进而不断演进。

abstract.txt

Dennis Ritchie 的《Unix 分时系统的演变》提供了 Unix 从 1969 年诞生到早期成熟的第一手技术与社会历史记录。文章从贝尔实验室退出 Multics 项目后的背景开始,这一空白最终由 Unix 填补。详细描述了在借来的 PDP-7 上的初始实现,重点介绍了文件系统的设计,包括 i‑node、目录和特殊文件。随后叙述了进程控制的演变,从原始的双进程模型到现代的 fork/exec/wait 机制,指出小而渐进的改变如何催生出一个强大而通用的设施。另一节解释了 I/O 重定向的引入以及后来受 McIlroy 倡导的协程启发而发展的管道。文章还讨论了向 PDP‑11 的过渡、高级语言(B 和 C)的采用,以及最终用 C 重写内核的过程。通篇 Ritchie 强调了 Unix 发展的务实性、协作性和常常偶然的性质,突显了有限的硬件基础和一支小而专注的团队如何创造出对现代计算具有奠基意义的系统。

one-page.txt

丹尼斯·里奇于1984年发表的论文《Unix分时系统的演变》,作为 Unix 主要创造者之一,详尽记录了 Unix 早期发展的技术与社会历史。文章从 1968-1969 年讲起,当时贝尔实验室退出 Multics 项目,一小组成员(Thompson、Ritchie、McIlroy、Ossanna)希望延续交互式、共享式的计算环境,着手寻找新的方案。在多次提出采购新硬件未果后,最终他们选择使用了一台鲜有问津的 PDP-7。

在 PDP-7 上,Thompson 实现了一个文件系统,已包含现代 Unix 一些核心思想:i-list(描述文件的 i-node 数组)、将目录视为特殊文件,以及设备的特殊文件。不过,这一早期版本还不支持路径名,只能通过链接和如 “dd” 目录这样的约定实现导航,显得笨拙。进程控制也很原始,每个终端仅允许一个进程,因此系统总共只有两个进程,shell 在每次命令后会自我重启。受 Multics 影响,I/O 重定向在这个阶段已经出现。

Thompson 用仅 27 行汇编语言实现了 fork,带来了进程控制机制的巨大变化。结合 shell 已有的加载程序能力,标准的 fork/exec 模型由此诞生。这一变化实现了后台进程、shell 脚本和 shell 递归调用,但也带来了一些新的细节问题(如 chdir 必须成为 shell 内建命令)。论文指出,fork 与 exec 的分离部分是出于交换机制实现上的便利。

> 和 < 用于 I/O 重定向较早进入系统,而管道这一 Unix 核心创新则是在 1972 年,经 McIlroy 多次提议后终于实现。最初还采用过 > 和 < 作为中缀运算符,但很快被竖线 | 取代。Ritchie 指出,Unix 管道的巧妙之处,在于它能复用已经可以独立工作的命令。

1970 年,PDP-11 到来,Unix 得以快速移植。新版本引入了完整路径名、现代 exec/wait 机制和终端行编辑功能。Unix 首次应用于“生产环境”是在 1971 年,用于贝尔实验室专利申请文本处理,仅需一台 24KB 内存、512KB 磁盘的机器。这次实践验证了 Unix 在有限资源下的实用性。

编程语言方面也跟着 Unix 发展:先有 B(一种简化版 BCPL),继而为了 PDP-11 更适合字节寻址而有了 C 语言。到 1973 年,内核已经完全用 C 重写,并加入了多道程序设计。Ritchie 认为,Unix 的成功很大程度归因于用高级语言实现带来的可读性、可维护性和可移植性。

贯穿全篇,Ritchie 强调 Unix 设计上的渐进与务实。改进往往是小规模、因地制宜的变化,却可以很好地推广通用。在社会环境上,一个小而紧密的小组同时主导系统和 shell,让创意能被迅速实现。最终,Unix 系统的影响远远超出了最初的卑微起点。