FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章与书籍
  • UNIX 四分之一世纪
  • Unix 痛恨者手册
  • 《Unix 四分之一世纪》翻译项目
  • 前言
  • 致谢
  • 简介
  • 序幕
    • 太空序曲
    • 1969 年夏到 1970 年秋
    • 机械计算和电子计算
    • 操作系统
    • MAC 项目:CTSS 和 Multics
  • 一款系统的诞生
    • PDP-11
    • 1971 年,第 1 版
    • 1971-1973,C 语言和管道
    • 1973,第一篇论文
    • 法律 第一幕
  • 是什么让 UNIX 成为 UNIX?
    • 用户 第一幕
    • 为什么是 Unix
    • 风格和工具
    • PWB 和 MERT
    • 实用工具
  • Unix 的传播与发展
    • 用户 第二幕
    • 伯克利 Unix 第一幕
    • 第 7 版
    • 伯克利 Unix 第二幕
    • 商业 Unix
    • DEC
    • 法律 第二幕
  • Unix 产业
    • /usr/group
    • Sun 和 JAW
    • 标准
  • 现状
    • 互相争斗的 Unix
    • 衍生版本
    • OSF 和 UI
    • VAX 后的伯克利 Unix
    • 法律 第三幕
  • 落幕
    • 结语:Unix 为什么能成功
    • 进一步阅读
    • 人物与术语表
    • 附图
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
在GitHub上编辑
导出为 PDF
  1. 一款系统的诞生

PDP-11

Dennis Ritchie、Ken Thompson 和 Joe Ossanna 多次试图说服贝尔电话实验室为研究小组购置一台计算机。但在 1969 年和 1970 年,绝大多数计算机价格都超过了 10 万美元。尽管他们在文件系统和工具方面做了很多工作,计算研究小组依然没有属于自己的计算机。他们尝试让贝尔电话实验室购买 PDP-10,或者采取部分租赁、部分购买的方式,但完全没有成功。Dennis Ritchie 告诉 Peter Collinson:

在 PDP-7 的 Unix 系统上,所有东西都是用汇编语言写的。Doug McIlroy 实现了 TMG,这是一种由 Bob McClure 最初开发的编译器编写系统。它是一个自顶向下的解析器……由于我们在 PDP-7 上用户程序只有 4K 字的内存,PL/I 明显不可能实现。因此 Doug 就为 PDP-7 实现了 TMG。那年 Ken Thompson 认为没有 FORTRAN 编译器就不可能有一个严肃的系统,于是我们开始用 TMG 编写一款 FORTRAN 编译器,但只坚持了一天。结果发生的是,B.B 本质上是 BCPL 的一个精简版本……

BCPL(Basic Combined Programming Language,基本组合编程语言)是 Martin Richards 在 1967 年开发的“用于编写编译器和系统编程的工具”。由于 B 语言是 BCPL 的“精简版本”,它的名字也是个缩写。

Ritchie 解释道:

1968 年我刚进实验室时,几乎做的第一件事就是和 Rudd Canaday 联系上了,他是把 BCPL 编译器移植到 GECOS 机器(通用电气,后来是 Honeywell 的 GE635)上的人。当时他正在把编译器移植到 Multics 上。所以我用 BCPL 编译器获得了对 Multics 的访问权限。这是 BCPL 的一个早期方言,Martin Richards 本人后来还继续对它进行了修改。

所以 BCPL 已经存在,我们也用它写了一些比较重要的程序。在首个 Unix 系统上,B 语言是一种基于 BCPL 的新语言,更简单。它是解释型语言,不生成机器码,而是生成中间代码。

B 语言最初是用 TMG 写的,后来实现了自举(bootstrapping)。实际上,这种语言的发展过程很有趣。编译器的大小总是接近机器的限制。Ken 每次往编译器里加功能时,都经历一段难以继续添加新特性的痛苦期,但随后他会通过在编译器中引入新的结构,使编译器变得更小,从而能添加更多新功能。

B 语言确实是 Unix 上使用的第一款高级语言。用它写了一些程序。B 语言有两个实现版本。一版是普通的解释器,生成某种基于栈的中间语言。还有一版叫做 vb 的“虚拟 B”,是相同语言的带分页的软件版本,能让解释器把 4K 字的段分页调入和调出。每当程序大到无法全部装入内存时,就会使用 vb。

Andrew Hume 告诉我,“B 语言一直使用到 1989 年;驱动我们排版机的程序就是用 B 语言写的。”但是硬件限制确实令人沮丧。最终,Ossanna 建议购买一台 PDP-11/20 用于文本编辑项目。Ritchie 说,Lee McMahon“认为我们做的东西很不错。”由于他的努力(以及对文字处理系统的信心),声学研究主管 Max Mathews 资助了启动资金。Doug McIlroy 告诉我:“如果没有这只来自计算机科学之外的援手,Unix 可能永远也不会突破胚胎阶段。”

实验室管理层明白文本处理是有用的东西。于是订购了 PDP-11。Ritchie 回忆道:

我们很早就拿到了 PDP-11,它是在 1970 年夏天到的。当时只有处理器和内存,没有磁盘。所有软件都是用纸带加载的,没有真正意义上的操作系统。第一款为它写的 Unix 是通过交叉汇编从 PDP-7 上移植的,使用的是用 B 语言写的 PDP-7 汇编器。

等到了我们拿到 PDP-11 的时候,只有少数程序用 B 语言重新写过,基本命令都没有,只有几个额外的程序。其中一款最早的程序是 PDP-11 汇编器,还有一款非常早期的程序是 dc(桌面计算器)。这实际上是第一款运行在 PDP-11 上的程序。它是独立运行的,甚至在操作系统出现之前就运行了。[PDP-11 从未安装过“标准 DEC 操作系统”] 它是一款非常原始的汇编器,语法几乎和 PDP-11 原始指令集完全相同。

Unix 的出现分两个阶段。Ken 在没有磁盘的情况下让它运行起来,他把内存分成两块,一块运行操作系统,另一块用作类似 RAM 磁盘。为了试用,你得先加载初始化磁盘的纸带,然后再加载操作系统。所以在磁盘出现之前,系统已经有了 cp(复制文件)、cat(连接文件)和 ls(列出文件)等命令。

系统真正完善后,出现了倒退。B 语言版本的汇编器运行很慢,于是用汇编语言重新写了它。我想也有一些新的程序用 B 语言写了出来。早期的其中一个是负责展开文件名中的星号等通配符的 glob 命令。这个名字代表 global(全局),不过具体原因我记不太清楚,感觉不太合理。展开操作是由一个独立的程序完成的,当 shell 发现参数中有特殊字符时,就调用这个程序进行展开。代码并没有内置在 shell 中。这个程序是用 B 语言写的。

Thompson 说,在等待 PDP-11 的磁盘期间,他们把 PDP-7 放在旁边,然后通过纸带移植代码,并在内存中运行文件系统。

但在 PDP-11 启动之后,就需要编辑器来进行编程。麻省理工学院的 PDP-1 上有一款叫 TECO 的编辑器。最初,TECO 是“纸带编辑器和校正器”(Tape Editor and COrrector)的缩写,后来改为“文本编辑器和校正器”(Text Editor and COrrector)。TECO 是 EMACS(Editing MACroS)的线性祖先。1967 年,L.P. Deutsch 和 B.W. Lampson 在 SDS-940 上实现了 TECO 的变体 QED(Quick EDitor)。SDS 后来被 Xerox 收购。Thompson 曾为麻省理工学院的 IBM 7094 上的 CTSS 编写过 QED 的一个版本。随后他和 Ritchie 又为贝尔电话实验室的 GE-635 编写了一个版本。现在 Thompson 为 PDP-11 编写了简化版的行编辑器 ed。但 PDP-11 是为了文本处理而购置的,所以还需要一款能够呈现文本的程序。

J.E. Saltzer 曾为 CTSS 编写过 runoff。Doug Mcllroy 回忆说:

我相信是 Morris,可能还有 Thompson,以某种方式将 runoff 移植到了 635 并称之为 roff。这是一次快速的改造,几乎是一夜之间完成的。然后我在 1969 年用 BCPL 从头编写了 roff,既简化了它,也在功能上超越了 runoff。这个版本成为了 Thompson、Ritchie 在 Unix 上(用机器语言)推出的 roff 的模型。

Mcllroy 后来对我说:“Ken 不记得第一个 635 roff,所以我猜他和那个没什么关系。不过他记得另一个我不记得的程序——一款叫 rf 的极简程序,他为 PDP-7 写的,可能是在 Unix 本身出现之前。显然那个程序是一个进化上的死胡同。”Ritchie 随后“猜测”可能是他写的。

Ritchie 说:“我们知道这其中有些谎言——我们承诺的是一个文字处理系统,而不是操作系统。”但文字处理工作很成功:贝尔电话实验室的专利部门成为了第一个 Unix 用户,他们与研究组共享 PDP-11/20。更重要的是:贝尔的专利部门随后接管了运行 Unix 的 11/20,并将资金交给计算研究部门,后来购买了 PDP-11/45。

上一页MAC 项目:CTSS 和 Multics下一页1971 年,第 1 版

最后更新于7天前