《UNIXLinux程序设计教程》一1.1 UNIX简史

简介: 本节书摘来自华章出版社《UNIXLinux程序设计教程》一 书中的第1章,第1.1节,作者:赵克佳 沈志宇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.1 UNIX简史

UNIX早在MS DOS、Windows出现之前就已经诞生了,到现在已有四十多年的历史。

1.1.1 UNIX的诞生

1965年麻省理工学院的MAC课题组和通用电气公司一起启动了一个项目—开发一个新的称为Multics的多用户、交互式操作系统。Multics的目的是向大用户团体提供同时计算和存储的能力。在当时批处理系统为主流的情况下,这是一个创新的概念。此后不久,贝尔实验室的计算科学研究中心也加入了这一计划。但在1969年,这个研究组认为开发Multics需要更长的时间,于是贝尔实验室退出了这个项目,Multics的开发也随之终止。
当Multics不再进行时,贝尔实验室的一些主要开发人员仍在继续研究另一个感兴趣的课题。他们之中的Ken Thompson 用Fortran编写了一个“太空旅行”(Space Travel)游戏程序。这个程序通过行星的自转和公转模拟行星在太阳系中的运动与位置,并提供一个宇宙飞船可以来往于各个行星。
与此同时,Thompson、Dennis Ritchie和贝尔实验室的其他人也在试图改善他们的程序设计环境,并提出了一种新的文件系统设想。随后不久Thompson在GE-645计算机上实现了模拟这个文件系统的程序。这个新的文件系统允许Thompson在类似于Multics的层次结构目录中存储他的游戏源代码文件。但是Thompson发现这仍不能满足“太空旅行”游戏的需要,因为GE-645是一个效率不高的分时系统,游戏的响应时间很慢,并且运行一次的费用太贵(约75美元),这迫使Thompson寻找另一台机器。他找到了一台闲置不用的PDP-7,这是一台18位的机器,有4096字的内存和一台电传打字机。虽然在当时这并不是唯一适合运行该游戏的机器,但是它很廉价,并且有较好的图形显示器,而它的程序设计环境和开发环境却不太好。
在这台PDP-7完成了“太空旅行”之后,Thompson和Dennis Ritchie决定为它开发一种操作系统环境。在这个环境中Thompson实现了他以前设计和模拟过的文件系统,该文件系统后来演变为著名的系统V文件系统(s5fs)的早期版本。不久,他们又加入了进程子系统、一个简单的命令解释程序(它后来演变成Bourne shell)和一组管理文件系统的实用程序,并且实现了对两个用户分时使用的支持。
由这项工作诞生了UNIX的第一个版本,这就是最早的UNIX汇编版本,尽管当时这个操作系统还没有被命名为UNIX。刚开始时,贝尔实验室该小组的成员Brain Kernighan将该操作系统取名为UNICS,以隐喻它是一个两个用户的系统,同时,这也是“Uniplexd Information and Computing System”的缩写,因此它也是隐喻Multics项目的双关语。1970年,人们为它正式取名为UNIX。

1.1.2 UNIX的早期发展

1971年 UNIX的第一个汇编版本被移植到了PDP/11-20,它的第一个真正用户是贝尔实验室的专利部门。同年11月,Ritchie和Thompson出版了《UNIX Programer抯 Manual》第1版(这个手册整整出版了10版,分别对应于贝尔实验室发布的10个UNIX版本)。
1972年发行了UNIX第2版。这个版本加入了用B语言写的管道和内核。B语言是一种解释执行语言,因此受到了性能不高的困扰。最后,Ritchie将B语言进化成C语言。C语言是随UNIX诞生的,但它的成功却大大超过了UNIX本身。
前面几个版本严格限制在贝尔实验室内部。第3版出现在1973年2月,它包含了C编译器cc。同年,UNIX被用C重写,于1973年11月产生了第4版。这次重写为UNIX的可移植性打下了良好的基础,对UNIX后来的成功有着巨大的影响。
UNIX发展过程中一个重要的里程碑是1973年10月Thompson和Ritchie共同撰写的第一篇关于UNIX的论文:“The UNIX Time Sharing System”,它发表在《ACM Symposium on Operating System》杂志上,并于1974年1月发表在《Communication of ACM》上。这篇论文第一次让外界看到了UNIX的面貌,它标志着UNIX系统的突起。世界各地的学者开始对这个新的操作系统产生兴趣,并导致了对UNIX软件和源程序代码的巨大需求。不久,UNIX晋升为第5版,这个版本在简单的许可协议下可以自由获取,包括给大学用于研究和教育目的的源代码。第一个得到UNIX许可协议的是加州大学伯克利分校,它在1973年12月得到了UNIX系统。在这种情况下,UNIX迅速传播至全世界。这为后来增强和开发UNIX的各种项目铺平了道路。
与此同时,贝尔实验室的另一个小组—程序员工作组(Programer抯 Workbench,PWB)则开发了增强对大用户集支持的另一个版本。1975年贝尔实验室第一次通过Western Electric Company对外发行了UNIX第6版,也称为V6。
UNIX 版本V7发行于1979年1月。这是第一个真正可移植的UNIX系统,并且在很大程度上影响了UNIX的后继发展。它包含了一个C编译器(这个编译器称为PCC(Portable C Compiler),即可移植C编译器),一个称为“Bourne Shell”的命令解释器,以及其他许多特征。

1.1.3 BSD UNIX

在UNIX V7期间,UNIX已发展成为一个可运行于许多不同处理机上的相当稳定的操作系统。贝尔实验室广泛使用UNIX,但没有任何技术服务。由于美国法律的原因,其父公司AT&T也没有提供服务(受1956年美国司法部对AT&T 以及Western Electric公司反托拉斯诉讼协议的约束,在该协议的有效期内,禁止AT&T生产任何与电话或电报无关的设备或从事其他非公共载体通信服务的商务)。
加州大学伯克利分校于1974年12月得到了第一个UNIX许可。在随后的几年中,贝尔实验室研究组的一些成员,包括Ken Thompson,利用休假在那里讲授UNIX,并参加一些研究工作。加州大学伯克利分校的很多研究生和教授对UNIX系统产生了极大兴趣,其中包括Bill Joy和Chuck Holey。他们为这个UNIX开发了一些实用程序,包括Pascal编译器和ed编辑器,这个编辑器后来成为著名的vi编辑器。Bill Toy将这些新增的内容与一些广泛发布的软件集中在一起,打成一个软件包,形成了“Berkeley Software Distribution”(BSD),并在1978年春季将它以每个许可协议50美元售出。同年晚些时候又推出了2BSD。
据说前两个BSD版本只包含应用和实用程序,并没有修改也没有包含UNIX操作系统,第一个包含操作系统的版本是1979年发布的3BSD。3BSD运行于32位的VAX-11/780,这个版本在内核加入了页式请求和虚拟内存等新功能。3BSD虚拟内存功能引起了国防高级研究项目部(the Defense Advanced Research Project Agency,DARPA)的注意,他们决定为伯克利UNIX系统的开发提供基金。DARPA项目的主要目的之一是集成TCP/IP网络协议包。在DARPA的资助下,UNIX开始蓬勃发展。1980年产生了后来统称为4BSD的几个版本:4.0BSD(1980)、4.1BSD(1981)、4.2BSD(1983)、4.3BSD(1986)以及4.4BSD(1993)。
伯克利UNIX的研究工作是由计算机科学研究组(Computer Science Research Group,CSRG)进行的。4.4BSD之后,由于UNIX系统变得越来越大,以致很难由一个小组来维护和发展,同时也由于经费问题,CSRG决定不再继续进行UNIX的开发。
伯克利小组对UNIX作出了许多重要性的贡献。除了虚拟内存和纳入了TCP/IP协议外,BSD UNIX 还引入了快速文件系统(Fast File System,FFS)、可靠信号以及套接字功能。

1.1.4 系统V UNIX

另一方面,在贝尔实验室内部,UNIX的研究工作仍在继续。1978年V7发布后不久,贝尔实验室研究组将向外发布UNIX的工作先后移交给了UNIX支持组(UNIX Suport Group,USG)、UNIX系统开发实验室(UNIX System Development Laboratories,USDL),最后是USDL内的AT&T-IS (AT&T Information System)。他们发布了UNIX系统III(1982)、系统V(1983)、系统V版本2(SVR2,1984)、系统V版本3(SVR3,1987)。1989年,AT&T和Sun联合开发了系统V版本4(SVR4)。
AT&T没有向外发布系统IV。1982年,AT&T与美国司法部的官司以具有里程碑意义的判决宣告结束。作为判决的结果,Western Electric 被拆散,地区性的经营公司从AT&T分离并成立了Baby Bells。而贝尔实验室则独立出来重新命名为AT&T实验室,同时,AT&T被允许进入计算机商务。为此AT&T提前宣布了UNIX系统V。为了引起UNIX团体的注意,它同时还宣布了提供对系统V以及将来版本的技术支持。更重要的是,AT&T宣布系统V将与将来的版本向上兼容。
系统V UNIX引入了许多新的特征,如进程间通信(包括共享存储、信号量和消息队列)、远程文件共享、共享库、用于设备驱动程序和网络的STREAMS等机制。

1.1.5 UNIX的商业化

UNIX的广泛流传引起了不少计算机公司的兴趣。1977年AT&T公司开始向计算机厂商提供UNIX操作系统的初始设备制造许可(OEM),这使得许多OEM厂商能够重写UNIX的部分内核和外部结构,他们开始将UNIX商品化并推出了自己的UNIX商业版本。于是,从20世纪70年代末开始,市场上出现了不同的UNIX商业版本。这些商业版本都以AT&T或者BSD版本为基础,并带有各自的增值特征。
1982年太阳微系统公司发布了SunOS,这是基于4.2BSD的UNIX变体(后来又发布了基于SVR4、称为Solaris的版本)。微软和SCO联合发布了XENIX,SCO将SVR3移植到了386上,并将它命名为SCO UNIX。之后在20世纪80年代和90年代出现了更多的商业版本,其中包括IBM的AIX,HP公司的HP-UX,Digital公司的ULITRIX、OSF/1及Digital UNIX,SGI的IRIX,CRAY的UNICOS等。这些UNIX商业版本引入了许多新的特征,同时,它们也为UNIX提供了更好的文档说明、技术培训、服务和软件支持。

1.1.6 Linux

Linux出现于1991年,作者是芬兰赫尔辛基大学的一名学生Linus Torvalds。他开发Linux的初衷之一是想有一个能运行于PC机上的较便宜的UNIX操作系统。1990年,UNIX在大学已经很流行,但同时UNIX系统已经商业化并且很昂贵。许多学生希望能在自己的计算机上运行UNIX,但最便宜的选择只有Minix,这是由Andy Tanenbaum教授为教学目的而写的一个很小的类UNIX的操作系统。尽管当时已经有386BSD(NetBSD、FreeBSD和OpenBSD的先驱),但还不成熟且需要比当时PC机能力更高的机器来运行。
Linus Torvalds从Minix着手,但希望能比Minix更好,不久之后他便抛开Minix开始写自己的操作系统,并于1991年10月发布了Linux 0.0.2版本,包括源代码。这随即引起了黑客们的注意,他们通过网络加入了Linux内核的开发。尽管在一开始Linux并不能算是一个真正的操作系统,只是一个自娱性的小东西,但由于一批高水平黑客的加入,使得Linux得到了迅猛发展,到1994年年初Linux 1.0诞生时,Linux已经是一个功能完备的操作系统。
从一开始Linus就决定自由扩散Linux,它的最大特点在于开放源码并遵循公共版权许可证(GPL),正是这一特点使得Linux吸引了大批志愿人员不断对其增加新的应用软件,使得Linux逐渐由一个内核操作系统完善为一个包含各种应用支持软件的系统。今天,Linux已经包括了文件服务、邮件服务、网络服务等一系列功能,并且包括了KDE、Gnome等桌面应用环境。目前Linux几乎可以运行于所有主流微处理器平台,可以说Linux是目前运行硬件平台最多的操作系统。
尽管Linux有自己的一些特殊功能,但本质上同其他UNIX商业版本一样,也是UNIX的一种实现,它与绝大部分UNIX标准兼容。这意味着只要是遵循UNIX标准书写的程序,在Linux上便可以不加修改地运行。
本书讲述UNIX的标准程序设计接口,但以Linux作为运行环境,书中的所有例题都已在Intel微处理器的Linux系统中运行通过。

相关文章
《UNIXLinux程序设计教程》一3.10 思考与练习
本节书摘来自华章出版社《UNIXLinux程序设计教程》一 书中的第3章,第3.10节,作者:赵克佳 沈志宇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1118 0
《UNIXLinux程序设计教程》一3.1 文件描述字的打开、创建和关闭
本节书摘来自华章出版社《UNIXLinux程序设计教程》一 书中的第3章,第3.1节,作者:赵克佳 沈志宇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1174 0
《UNIXLinux程序设计教程》一第1章 UNIX导论
本节书摘来自华章出版社《UNIXLinux程序设计教程》一 书中的第1章,第1.1节,作者:赵克佳 沈志宇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1372 0
《UNIXLinux程序设计教程》一2.10 思考与练习
本节书摘来自华章出版社《UNIXLinux程序设计教程》一 书中的第2章,第2.10节,作者:赵克佳 沈志宇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1220 0
《UNIXLinux程序设计教程》一2.1 UNIX 输入输出基本概念
本节书摘来自华章出版社《UNIXLinux程序设计教程》一 书中的第2章,第2.1节,作者:赵克佳 沈志宇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1235 0
|
Unix Linux
《UNIXLinux程序设计教程》一1.9 思考与练习
本节书摘来自华章出版社《UNIXLinux程序设计教程》一 书中的第1章,第1.9节,作者:赵克佳 沈志宇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
972 0
|
存储 Unix Shell
《UNIXLinux程序设计教程》一1.3 UNIX基本概念
本节书摘来自华章出版社《UNIXLinux程序设计教程》一 书中的第1章,第1.3节,作者:赵克佳 沈志宇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1094 0