跳过正文
  1. 文章/

操作系统的起源:UNIX的诞生

sun.ao
作者
sun.ao
我是 sun.ao,一名热爱技术的程序员,专注于 AI 和数智化领域。
目录
计算机前世今生 - 这篇文章属于一个选集。
§ : 本文

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文件的数量。


思考题
#

  1. UNIX哲学强调"小即是美"、“组合的力量”。你能想到现代软件中符合这种哲学的例子吗?
  2. 如果没有UNIX和C语言,你觉得今天的计算机会是什么样子?

明天预告:互联网的雏形——ARPANET如何在冷战争霸中诞生,成为改变世界的网络?

计算机前世今生 - 这篇文章属于一个选集。
§ : 本文

相关文章