vlambda博客
学习文章列表

Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱


关注我们丨文末赠书


诞生于贝尔实验室的一台丢弃的DEC PDP-7计算机上,到打破系统软件要用汇编语言编写的传统,最终成为一种必不可少的操作系统——如今,Unix已遍布整个世界,从微型计算机到最大的主机,已安装了数以万计的Unix系统。

Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱

是什么促使Unix系统如此成功呢?是Ken Thompson和Dennis Ritchie创造并给与Unix的“KISS”?是AT&T无心插柳柳成荫地将Unix开源?是各大供应商为争夺标准化权利的Unix之战?亦或者是Unix系统实现上的百家争鸣?

今天,异步君带大家了解Unix的前世今生。

1

Unix诞生


由于早期的计算机并不像现在的个人计算机一样普遍,只有极少数人才有机会接触到,并且当时的计算机架构很难使用,操作接口麻烦。因此在1965年前后,由贝尔实验室(Bell)、麻省理工学院(MIT)及通用电气公司(GE)共同发起了Multics的项目,Multics(全称:MULTiplexed Information and Computing System)是一个全面的、通用的分时操作系统,Multics项目的目的是想让大型主机可以同时提供300台以上的终端机连接使用的目标。

可是,到了1969年前后,项目进度落后,资金也短缺,在认为Multics项目不可能成功之后,贝尔实验室退出了该项目的研究工作。最终Multics项目还是成功地开发出了他们的系统,Multics系统虽然后来没有受到很大的重视,但是该项目培养出了很多优秀的人才,其中就包括创造了UNIX的Ken Thompson和Dennis Ritchie。

Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱

Ken Thompson被调回贝尔实验室后,面对实验室落后的仍以批处理工作的计算机环境,非常怀念Multics。后来,因为想移植一套名为“太空旅游”的游戏,他希望开发一个小的操作系统以供使用。

1969年8月,万般无奈的Thompson在库房里发现了一个闲置的PDP-7,刚好此时处于休假期并且他的妻儿探亲去了,于是Thompson有了额外的一个月时间实施他的计划。经过4个星期的奋斗,以汇编语言写出了一组内核程序,还包括一些内核工具程序,以及一个小的文件系统。在操作系统、Shell程序、编辑器和汇编程序上,他各花了一周时间。

由于当时Thompson从Multics项目中获得想法,将Multics庞大而复杂的系统进行简化,于是同实验室的朋友都戏称这个系统为Uni~cs(该系统就是Unix的原型)。

Thompson的这个文件系统有两个重要的概念,分别是:
所有的程序或系统装置都是文件。

不管构建编辑器还是附属文件,所写的程序只有一个目的,就是要有效地完成目标。

这些概念在后来对于Linux的开发有相当重要的影响。这也就是著名的KISS(keep it simple, stupid)原则,即“简单原则”——尽量用简单的方法解决问题,这是“Unix哲学”的根本原则。

由于Thompson写的Unics实在太好用了,所以在贝尔实验室内部广为流传,并且多次经过改版。但是因为Unics是以汇编语言写的,高度依赖硬件,所以每次安装到不同的机器上都需要重新编写汇编语言。

于是Thompson与Ritchie合作想将Unics改用更高级的程序语言来编写,从而提高可移植性。他们先选择了BCPL(简称B语言),然后又尝试PASCAL,发现编译出来的内核性能都不是很好,因为这些语言都不太贴近硬件操作。于是,两人(主要是Dennis Ritchie)决定自己开发一套新的语言:这就是大名鼎鼎的 C 语言。

Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱
Ken Thompson(坐着)和Dennis Ritchie在PDP-11前工作

1973年,Dennis Ritchie 用C 语言重写与编译Unics的内核,最后发行出Unix的正式版本。“重写”说起来简单,实际上并不是简单的汇编到C语言的翻译,这里边包含了很多的发明和创造。在此期间引入的“pipe”(管道)功能后来成为了Unix的一大优势,这种功能使得程序间输出结果的传递非常容易。管道的概念是贝尔实验室的Douglas McIlroy发明的,后被很多操作系统大量拷贝,其中包括Unix的所有变体、Linux、DOS和Windows。

重写过的Unix很快就流行起来,此后便一直应用于生产领域。就这样,一款与世界上第一块半导体存储器诞生于同一时代的产物,完成的计算量比所有其他分时系统加起来的总和还要多的经典操作系统——1973年,Unix正式诞生。

1990年,Thompson和Ritchie因“创造UNIX操作系统和C程序设计语言”而获得了IEEE颁发的IEEE汉明奖,1998年被授予国家科技奖章,2011年,二人共同获得了日本国际奖。

2

Unix之战


20世纪80年代,人们在UNIX编程环境和C程序设计语言的标准化方面已经做了很多工作。UNIX版本种类的剧增以及它们之间差别的扩大,导致很多大用户呼吁对其进行标准化。

于是各大供应商为建立Unix标准而展开了斗争,后来被称为“Unix之战”。

在1980年代中期,Unix的三个常见版本是AT&T的System III,Microsoft的Xenix和IBM认可的PC / IX。

先说说AT&T,拥有贝尔实验室的美国电话电报公司(AT&T)创造了Unix,当他们开始认识到Unix的价值时,源代码早已外散。尽管他们试图用System V建立新的Unix标准,并且还与领先的BSD Unix供应商SunMicrosystems于1987年开始开发统一系统。遗憾的是,AT&T与Sun联合开发的BSD – System V,在Unix各“开放”版本之间的商业竞争中败下阵来。1993年,AT&T将Unix版权卖给Novell。

再来是微软的Xenix。1979年,微软从AT&T公司获得授权,为英特尔处理器所开发一种Unix操作系统,由于它购买的授权无法直接让该操作系统以“Unix”为名,于是该系统命名为Xenix,可用在个人电脑及微型计算机上使用。

对于微软来说,由于需要从AT&T公司获得授权,因而这是一种自己难以把握其未来发展命运的操作系统,而且他也深明Unix的致命缺陷——早期混乱的授权,让Unix从来就没有通用版存在,所以,盖茨在寻找机会退出这个领域。

1987年,微软与SCO达成了一项协议,以持有后者股票25%的条件转让了Xenix的所有权,转而开发一款“可移植的”的操作系统——“Unix杀手”,这就是微软的Windows NT。

Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱

PC / IX是美国交互式系统公司(Interactive Systems Corporation,简称ISC)开发的一款个人计算机交互式执行程序,也是IBM PC XT的第一个Unix实现。

尽管PC / IX直接解决了XT硬盘驱动器的问题,并且与MS-DOS相比,它具有明显的速度优势。由于8088芯片缺乏真正的内存保护,IBM只销售PC/IX的单用户许可证。900美元的售价注定不能让PC/IX成为商业上的成功,1991年,ISC将其ISC Unix操作系统出售给Sun Microsystems。

八十年代末,五花八门、不同版本的Unix遍地开花,为其中一个版本写的应用程序,常常要修改后才能运用到另一个上,这对于专业的程序员来说也许不是太大问题,但对技术实力较弱的用户来说,则平添了许多麻烦。

3

尘埃落定


UNIX的各种版本和变体都起源于在PDP-11系统上运行的UNIX分时系统第6版(1976年) 和第7版(1979年) (通 常称为V6和V7)。这两个版本是在贝尔实验室以外首先得到广泛应用的UNIX系统。从这棵树上演进出以下3个分支:

(1) AT&T分支,从此引出了System和SystemV (被称为UNIX的商用版本) 。
(2)加州大学伯克利分校分支,从此引出4 .xBSD实现。
(3)类Unix操作系统

Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱
UNIX系统发展时间线

发展至今,Unix系统的实现也算是大浪淘沙,留下一些经典的产品:
1、SVR4 (UNIX System V Release 4)
SVR4是AT&T的UNIX系统实验室的产品,它将下列系统的功能合并到了一个一致的操作系统中:AT&T UNIX系统V 3.2版(SVR3.2) 、Sun Microsystems公司的SunOS操作系统、加州大学伯克利分校的4.3BSD以及微软的Xenix系统。

其源代码于1989年后期发布,在1990年开始向终端用户提供。SVR4符 合POSIX 1003. 1标准和X/Open XPG3标准。

2、4.4BSD (Berkeley Software Distribution)
Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱

BSD是由加州大学伯克利分校的计算机系统研究组(CSRG)研究开发和分发的。4.4BSD系统不再受AT&T许可证的限制,这样,大家都可以得到源代码。

后来,也有许多基于BSD的免费操作系统,比如知名的FreeBSD。

FreeBSD基于4.4BSD-Lite操作系统。在加州大学伯克利分校的CSRG决定终止其在UNIX操作系统的BSD版本的研发工作,而且386BSD项目被忽视很长时间之后,为了继续坚持BSD系列,形成了FreeBSD项目。

3、Linux
Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱

Linux是一种提供类似于UNIX的丰富编程环境的操作系统,在GNU公用许可证的指导下,Linux是免费使
用的。Linux的普及是计算机产业中的一道亮丽风景线。Linux经常是支持较新硬件的第一个操作系统, 这一点使其引人注目。

Linux是由Linus Torvalds在1991年为替代MINIX而研发的。一位当时名不见经传人物的努力掀起了澎湃巨浪,吸引了遍布全世界的很多软件开发者,在使用和不断增强Linux方面自愿贡献出了他们大量的时间。

4、Mac OS X
Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱

与其以前的版本相比,Mac OS X使用了完全不同的技术。其核心操作系统称为“Darwin",它基于Mach内核、FreeBSD操作系统以及具有面向对象框架的驱动和其他内核扩展的结合。

MacOS X 10.5的Intel部分已经被验证为是一个UNIX系统。

5、Solaris
Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱

Solaris是由Sun Microsystems (现为Oracle) 开发的UNIX系统版本。它基于SVR4, 在超过15年的时间里,Sun Microsystems的工程师对其功能不断增强。它是唯一在商业上取得成功的SVR4后裔,并被正式验证为UNIX系统。

2005年,Sun Microsystems把Solaris操作系统的大部分源代码开放给公众,作为OpenSolaris开放源代码操作系统的一部分,试图建立围绕Solaris的外部开发人员社区。

如今,这些新秀们在软件行业崛起,Unix似乎已经退居二线,很少被年轻一代提起。

但是,在操作系统发展史上,曾有过Unix这个百战不死的老兵!没有它,也就没有如今的Linux、BSD、Solaris、MacOS X……

UNIX环境高级编程(第3版)
作者:【美】W. Richard Stevens,Stephen A.Rago
译者: 戚正伟 ,张亚英 ,尤晋元

内容简介:
书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了众多应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。此外,还在附录中给出了函数原型和部分习题的答案。

UNIX网络编程 卷1:套接字联网API(第3版)
作者: 【美】W. Richard Stevens,Bill Fenner ,Andrew M. Rudoff

内容简介:
本书是一部UNIX网络编程的经典之作!书中全面深入地介绍了如何使用套接字API进行网络编程。全书不但介绍了基本编程内容,还涵盖了与套接字编程相关的高级主题,对于客户/服务器程序的各种设计方法也作了完整的探讨,最后还深入分析了流这种设备驱动机制。本书内容详尽且具权威性,几乎每章都提供精选的习题,并提供了部分习题的答案,是网络研究和开发人员理想的参考书。

UNIX网络编程 卷2:进程间通信(第2版)
作者: 【美】W. Richard Stevens

内容简介:
本书是一部UNIX 网络编程的经典之作!进程间通信(IPC)几乎是所有Unix程序性能的关键,理解IPC也是理解如何开发不同主机间网络应用程序的必要条件。本书从对Posix IPC 和System V IPC的内部结构开始讨论,全面深入地介绍了4 种IPC形式:消息传递、同步、共享内存及远程过程调用。本书内容详尽且具权威性,几乎每章都提供精选的习题,并提供了部分习题的答案。

参考资料
【1】《UNIX环境高级编程(第3版)》 
作者:【美】W. Richard Stevens Stephen A.Rago
译者: 戚正伟 ,张亚英 ,尤晋元

【2】Unix之战

Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱

Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱
扫码填写问卷,领福利

Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱

Epubit   Welfare

异步福利


邀请好友关注“异步图书”领取纸书1本,立刻填表抢座。




Today's Interaction

今日互动


说说你第一次使用Unix的感受



Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱




Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱

扫码关注「异步图书

聊聊图书背后的故事


回复“进群”入群领新手福利

异步VIP会员、技术分享、学习交流、赠书活动

戳阅读原文选书