一切的一切还得从1969年说起 ... ...

UNIX

1969年,AT&T电话公司下辖的bell实验室的Ken Thompson开发出了首个UNIX实现。该实现是使用Digital PDP-7小型机的汇编语言开发而成的。1970年,AT&T的工程师们又在刚购进的Digital PDP-11小型机上,以汇编语言重写了UNIX。

没过多久,Dennis Ritchie(Thompson在bell实验室的同事,UNIX开发的早期合作者之一)设计并实现出了C编程语言。这里有一个演变过程:C语言传承自早期的解释型语言——B语言;B语言最初由Thompson实现。C语言的设计理念和设计需求出自于几位程序员的构思,它们的目的很单纯:为实现UNIX内核及其相关软件而开发一种高级语言。正是因为有着明确的目的,Thompson和Dennis Ritchie很快就用C语言重写了UNIX内核。看到这你应该也会像我一样惊叹于Ken Thompson和Dennis Ritchie这俩大佬超人的天分了。

BSD、System V

1969~1979年间,UNIX历经多次发布。而我们主要关注发布于1979年1月的UNIX第七版,这一版改善了系统的可靠性,配备了增强的文件系统。该版本还附带了不少新的工具软件,其中包括:awk、make、sed、tar、uucp、Bourne shell以及FORTRAN 77编译器。而第七版发布的重要意义还在于,从该版本起,UNIX分裂为了两大分支:BSD和System V。接下来简要描述二者的由来。

受母校加州大学伯克利分校之邀,Thompson于1975/1976学年曾担任该校的客座教授。在校期间,他与研究生们一起为UNIX开发了许多新的特性。光阴荏苒,许多UNIX的新工具和新特性又陆续在伯克利分校问世,这包括:C shell、vi编辑器、一种改进型的文件系统(伯克利快速文件系统)、Pascal语言编译器,以及用于新型Digital VAX架构的虚拟内存管理机制。

这一命名为BSD(伯克利软件发布,Berkeley Software Distribution)的UNIX版本分发颇广。1979年12月,诞生了首个完整的BSD发布版本 3BSD。(之前发布的Berkeley-BSD和 2BSD并非完整的UNIX发布版本,仅含由伯克利分校开发的新工具。)

1983年,加州大学伯克利分校的计算机系统研究组发布了 4.2BSD。该版本的发布意义深远,因为其包含了完整的TCP/IP实现,其中包括套接字应用编程接口(API)以及各种网络工具。4.2BSD及其前身4.1BSD在世界上多所大学开始在世界上多所大学广为流传。以这两者为基础,还形成了SunOS操作系统。

与此同时,美国的反托拉斯法案强制对AT&T进行拆分(于20世纪70年代中期开始立案,到1982年AT&T正式解体)。随着其在电话系统市场垄断地位的丧失,AT&T也因此获准销售UNIX(在这之前AT&T与美国政府约定不涉及软件销售行业,也就是不能将UNIX作为产品销售)。这也催生了1981年System III的发布。System III由AT&T所属的UNIX支撑团队研发,该团队雇佣了数以百计的研发人员来从事UNIX系统的增强以及应用开发。1983年,System V的首个发布版本又接踵而至,在经过一系列的发布后,最终在1989年推出了System V Release 4,此时的System V纳入了BSD的诸多特性,包含联网能力。AT&T将System V授权给不同厂商,这些厂商又将其作为自身UNIX实现的基础。

根据上面的历史可以看出,BSD以及System V只是UNIX在发展过程中发展出的最成功的两支分支而已。这也是UNIX的特征所决定的,UNIX最引人关注的特征之一就是其开发不受控于某一厂商或组织。相反,许多商业或者非商业的团队都为UNIX的演进做出过贡献。这一渊源使得UNIX集多种开创性的特性于一身,但同时也带来了负面影响,即UNIX的实现渐趋分裂。因此,要编写出能够运行于所有UNIX实现上的应用程序愈发困难。这又导致了人们对于UNIX实现的标准化呼声越来越高,这也引出了这篇文章的另一个主角 ...

GNU项目

1984年,一位供职于MIT的天赋异禀的程序员Richard Stallman开始着手创建一个自由(free)的 UNIX实现,与之对应的是同时期的那些在专有操作系统上强加限制条款(用户不能得到源码,不能重新更改发行所购软件)的计算机厂商。Stallman为了开发出一套完整又可自由获取的,包含内核以及所有相关软件包的类UNIX系统,他发起了GNU(GNU's not UNIX 的缩写)项目。

GNU项目的重要成果之一是制定了GNU GPL(通用公共许可协议)。Linux发行版中的大多数软件,包括Linux内核,都是以GPL或与之相似的许可协议发布的。以GPL许可协议发布的软件不但必须开放源码,而且应能在GPL条款的约束下自由对其进行重新发布。GPL的第一版发布于1989年。最初GNU项目未能够开发出能够有效运作的UNIX内核,但却开发了大量其他程序。其中就有Emacs文本编辑器、GCC、bash shell以及glibc等大名鼎鼎的程序。

到了20世纪90年代早期,GNU项目已经开发出了一套几乎完整的操作系统,除了还缺少其中最重要的一环:能够有效运行的UNIX内核。万事俱备,只欠东风 ...

Linux内核

1991年,Linus Torvalds,一位芬兰赫尔辛基大学的学生,在外界的激励下为自己的Intel 80386 PC开发了一个操作系统。在一门课程的学习中他接触到了Minix——由荷兰大学教授开发的一款主要用于教学的类UNIX操作系统,Minix源码完全开放,作为大学操作系统的教学工具。但也因此Minix有着平台等因素的局限性,于是Torvalds自力更生开发出了一个类UNIX的内核雏形,并将这一消息放到网上寻求其他程序员的帮助以共同完成这一史诗般的工作。

本身Linux的许可协议十分严格,但这时候GNU组织冒了出来,并用三寸不烂之口舌说服Torvalds加入了组织,用以修补GNU项目庞大版图中最后缺失的那一块。Torvalds后来做到了一呼百应。许多其他程序员与Torvalds一起加入到Linux的开发行列中。到了1994年3月,Linux 1.0版本正式发布。

标准化

20世纪80年代初,C语言问世已达10年之久,在大量的UNIX系统以及其它操作系统上都有实现,而且各种C语言的实现之间存在着细微的差别。这也促成了C语言的标准化,ANSI(美国国家标准委员会)C语言标准最终于1989年获批,这也就是著名的C89标准(也经常被称为ANSI C)。这份标准在定义C语言语法和语义的同时,还对标准C语言库操作进行了描述(库功能以及实现),这包括stdio函数,字符串处理函数、数学函数、各种头文件等等。1999年,ISO又正式批准了对C语言标准的修订版,也就是著名的C99,其中包括了对C语言机器标准库的一系列修改。诸如,增加了long long和布尔数据类型,C++风格的注释(//)、首先指针以及可变长数组。

C语言标准独立于任何操作系统,换言之,C语言并不依赖于UNIX系统。这也意味着仅仅利用标准C语言库编写而成的C语言程序可以一直到支持C语言实现的任何计算机或操作系统上。

POSIX

术语“POSIX(可移植操作系统接口Portable Operating System Interface)”是指在IEEE(电气电子工程师学会),确切的说是其下属的可移植应用标准委员会(PASC)赞助下所开发的一系列标准,POSIX标准的目标是提升应用程序在源码级别的可移植性。

POSIX.1 于1989年成为IEEE标准,并在稍作修订后于1990年被正式采纳为ISO标准。符合POSIX.1 标准的操作系统应向程序提供调用各项服务的API,POSIX.1 文档对此做出了规范。凡是提供了上述API的操作系统都可认定为符合POSIX.1 标准。

POSIX.1 及后续的多个版本标准化了包括UNIX系统调用、C语言库函数、实时性扩展、线程以及包括套接字在内的网络API等多方面的接口。这里的实时性扩展包括文件同步、异步I/O、进程调度、高精度时钟和定时器、采用信号量、共享内存,以及消息队列的进程间通信。这3种进程间通信方法的称谓前通常被冠以POSIX,以示其有别于与之类似而又较为古老的System V 信号量、共享内存以及消息队列

Last modification:November 10th, 2019 at 08:12 am