1969年夏天,美国新泽西州,贝尔实验室。
一个程序员坐在一台小型计算机前,屏幕上闪烁着光标。他正在写一个游戏——《太空旅行》,模拟太阳系中飞船的运动。
但游戏运行得太慢了。他需要更好的计算机。
他看中了实验室的PDP-11,一台刚到货的小型机。但PDP-11没有操作系统,无法运行程序。
“那我就自己写一个,“他想。
这个程序员叫肯·汤普森。他即将写出UNIX——软件世界最重要的操作系统。
Multics:失败的巨人 #
要理解UNIX,先要了解它的前身——Multics。
1960年代,贝尔实验室、MIT和通用电气合作开发Multics——一个"大而全"的操作系统。Multics的目标是支持多用户、多任务、分时共享、文件系统、安全机制……几乎所有现代操作系统的功能。
但Multics太复杂了。开发进度一拖再拖,功能不断膨胀,代码越来越庞大。到1969年,贝尔实验室决定退出项目。
汤普森和同事丹尼斯·里奇都参与过Multics。他们从Multics的失败中学到了一个教训:简单比复杂好。
UNIX的诞生 #
退出Multics后,汤普森向管理层申请买一台计算机,继续开发操作系统。管理层拒绝了——他们刚在一个失败的操作系统项目上损失了钱。
汤普森没有放弃。他发现了实验室角落里一台闲置的PDP-11,只有24KB内存。
1970年夏天,他开始在这台简陋的机器上写操作系统。
他用汇编语言写出了核心部分:内核、文件系统、进程管理、shell。整个系统简洁优雅,只有几千行代码。
他给系统起名叫UNICS(Uniplexed Information and Computing Service),是Multics的双关语——从"多”(Multi)变成了"单”(Uni)。
后来,UNICS改名为UNIX。
C语言的诞生 #
UNIX最初是用汇编语言写的。但汇编语言依赖特定硬件,难以移植到其他计算机。
里奇想:如果有一种高级语言,既能像汇编语言一样高效,又能像高级语言一样可移植,该多好?
他在汤普森的B语言基础上,设计了C语言。
C语言的特点:
- 简洁:只有32个关键字,语法简单清晰
- 高效:生成的代码接近汇编语言的效率
- 可移植:同一份代码可以在不同机器上编译运行
- 灵活:可以直接操作内存,适合系统编程
1973年,汤普森和里奇用C语言重写了UNIX。这是历史上第一个用高级语言编写的操作系统。
这次重写意义重大:UNIX可以轻松移植到不同硬件平台。这为UNIX的广泛传播奠定了基础。
UNIX的哲学 #
UNIX不仅是一个操作系统,更是一种设计哲学。
1. 小即是美
每个程序只做一件事,但把这件事做好。不要写大而全的程序,要写小而精的工具。
2. 组合的力量
程序的输出可以成为另一个程序的输入。通过管道(pipe),可以把简单的小工具组合成强大的功能。
比如,统计文件中包含"error"的行数:
cat log.txt | grep "error" | wc -l三个简单命令的组合,完成了复杂的任务。
3. 文本是通用接口
用文本作为程序之间的通信格式。文本是人类可读的,调试方便,处理灵活。
4. 沉默是金
程序成功时不要输出废话。只有在出错时才需要说话。
5. 避免交互式界面
命令行比菜单更好。命令可以脚本化、自动化,交互式菜单不行。
这些原则被称为"UNIX哲学",至今仍被软件工程师奉为圭臬。
UNIX的传播 #
贝尔实验室是AT&T的子公司。由于AT&T与政府的反垄断协议,AT&T不能销售软件。
于是,贝尔实验室把UNIX源代码几乎免费地提供给大学。
这是一个历史性的决定。
全世界的大学计算机系都开始使用UNIX。学生们学习UNIX,修改UNIX,扩展UNIX。UNIX成为计算机教育的标准平台。
其中,加州大学伯克利分校的贡献最大。他们开发了BSD UNIX(Berkeley Software Distribution),添加了TCP/IP网络支持、vi编辑器、虚拟内存等重要功能。
UNIX的后代 #
UNIX的影响远远超出了它本身。几乎所有现代操作系统都受UNIX影响:
Linux:1991年,芬兰学生林纳斯·托瓦兹写了Linux内核,结合GNU工具,形成了完整的操作系统。Linux继承了UNIX的设计哲学,成为服务器和嵌入式系统的主流。
macOS/iOS:苹果的操作系统基于BSD UNIX。macOS的终端可以直接运行UNIX命令。
Android:Android基于Linux内核,继承了UNIX的文件系统和进程管理。
今天,世界上绝大多数智能手机、服务器、超级计算机,运行的操作系统都有UNIX的血统。
图灵奖 #
1983年,汤普森和里奇获得图灵奖——计算机科学的最高荣誉。
颁奖词写道:“UNIX系统的开发,展示了软件工程的原则:简洁、优雅、可移植。它创造了一种软件开发的范式,影响了几代程序员。”
里奇被称为"UNIX之父",汤普森被称为"UNIX之母"——因为里奇设计了C语言,汤普森写了最初的内核。
里奇的离去 #
2011年,乔布斯去世的消息占据头条。但几乎没人注意到,几天后,丹尼斯·里奇也去世了。
里奇一生低调,不追求名利。他创造的C语言和UNIX,影响了整个计算机世界。但他从不炫耀自己的成就。
程序员罗伯·派克写道:“乔布斯是光芒四射的明星,里奇是默默奉献的科学家。当乔布斯在舞台上展示iPhone时,里奇在贝尔实验室的角落里写代码。但里奇的工作,让乔布斯的工作成为可能。”
下一步:互联网 #
操作系统让计算机变得易用。但计算机仍然是孤立的——每台机器独立运行,互不连接。
1960年代,美国国防部开始了一个项目:建立一个能在核战争中生存的通信网络。
这个项目叫ARPANET。它将成为互联网的前身。
明天,我们来讲互联网的诞生。
今日知识点 #
操作系统(Operating System) 管理计算机硬件资源、为应用程序提供服务的软件。核心功能包括:进程管理、内存管理、文件系统、设备驱动、用户界面。UNIX是现代操作系统的鼻祖。
内核(Kernel) 操作系统的核心部分,负责管理硬件资源和调度程序运行。内核运行在特权模式,可以直接访问硬件。应用程序通过系统调用与内核交互。
管道(Pipe)
UNIX的一个重要概念,允许一个程序的输出成为另一个程序的输入。通过管道,可以把简单的小工具组合成强大的功能。例如:ls | grep ".txt" | wc -l 统计当前目录下txt文件的数量。
思考题 #
- UNIX哲学强调"小即是美"、“组合的力量”。你能想到现代软件中符合这种哲学的例子吗?
- 如果没有UNIX和C语言,你觉得今天的计算机会是什么样子?
明天预告:互联网的雏形——ARPANET如何在冷战争霸中诞生,成为改变世界的网络?