1.1 UNIX系统简介
1.1.1 UNIX系统的发展历史
1.Multics与星际旅行
在20世纪60年代,大部分操作系统为批处理系统,交互性差。1965年,AT&T贝尔电话实验室、通用电气公司、麻省理工学院MAC课题组一起联合为美国国防部研制开发一个称为Multics(MULTiplexed Information and Computing Service)的新操作系统。Multics项目的设计规模宏大,可谓“完美”,但是受当时计算机软/硬件水平的影响,最终未能完成设计目标。Multics系统的核心内容是能够很漂亮地支持大群用户对大型计算机的交互式分时使用。当时,用户与计算机交互表现为用户在键盘上输入,计算机通过电传打字机响应(因为在当时还没有显示器)。
Multics项目中止后,当贝尔实验室从Multics研究联盟中退出时,Ken Thompson留了下来,写出一个名叫“星际旅行(Space Travel)”的游戏程序。Ken Thompson找到了一台废弃的DEC PDP-7计算机运行他的程序,这台DEC PDP-7成为“星际旅行”的游戏平台和Ken Thompson关于操作系统设计思路的试验场。为了使这台机器运行起来,Ken Thompson把注意力从游戏转向操作系统。
Ken Thompson和Dennis Ritchie一起着手开发DEC PDP-7上的操作环境,为支持游戏开发而在DEC PDP-7上编制的实用程序成为UNIX的核心。这个初期的操作系统只有和现在的UNIX比较之后才能勉强被认出来。它的文件系统很原始,也没有实行现在这样的标准,没有分时使用能力。UNIX最初的名字是“UNICS”(Uniplexed Information and Computing Service),在1970年,贝尔实验室的另一位研究员Brian Kernighan提出UNIX这个名字,UNIX中的UNI与Multi相对应,意为没有那么复杂,而X则是CS的谐音。
当时的计算机软/硬件环境给UNIX带来了永久地影响。当时计算机硬件的水平相当原始,最强大的机器所拥有的计算能力和内存还不如现在一个普通的手机。所谓的大硬盘容量不超过1M。视频显示终端才刚刚起步,六年以后才得到广泛应用。最早分时系统的标准交互设备就是ASR-33电传打字机。因此,只要有可能,UNIX开发者就使用最短的命令名称和最短的信息。例如,列目录命令ls,它本来该是list,虽然只有4个字符,但也被简化为ls,只剩2个字符。如果UNIX命令执行成功了,它通常不给出任何信息,而是给出一个可被查询的返回码。UNIX命令简洁、“少说多做”的传统正是从这里开始的。
即使在早期,PDP-7 UNIX已经拥有现今UNIX的诸多共性,它提供的编程环境比当时读卡式批处理大型机的环境要舒服得多。因此,UNIX可以称得上是第一个能让程序员直接坐在机器旁,一边编程一边测试的联机系统。
最初的UNIX用汇编语言写成,应用程序用汇编语言和解释型语言B混合编写。B语言小巧、实用,但作为系统编程语言还不够强大,所以在Dennis Ritchie给它增加了数据类型和结构后,于1971年起从B语言演化成为C语言。
1973年11月,Thompson和Ritchie等人用C语言重写了UNIX,这是UNIX操作系统迈向成功之路的关键一步,也成为“可移植操作系统”的开端。有了C语言之后,可移植操作系统变成现实,使UNIX几乎可以被移植所有的硬件平台。1979年,Ritchie评价说:“UNIX的成功在很大程度上源自其以高级语言作为表述方式所带来的可读性、可改性和可移植性”。
2.UNIX与黑客文化
与UNIX传统的历史交织在一起的有一种隐性文化,一种更难归类的文化,这是一种传达着有关美和优秀设计的价值体系的文化,人们把这种文化称为“黑客文化”。这里的黑客(hacker)不是现在意义的坏人或捣乱分子,而是水平极高的,热衷于编程和计算机事业的优秀人士。
1974年,Thompson和Ritchie在《美国计算机通信》(Communications of the ACM)上发表的一篇论文中第一次公开展示了UNIX。文中作者描述了UNIX前所未有的简洁设计,并报告了600多例UNIX应用,极大地吸引了黑客和计算机爱好者。
但是,根据1958年为解决反托拉斯案例达成的和解协议,AT&T公司不允许从事除“公用通信服务”外的任何商业活动,因此,AT&T公司被禁止进入计算机相关的商业领域,所以UNIX不能够成为一种商品。为了满足黑客和计算机爱好者的需要,AT&T公司在签署简单协议的前提下,将UNIX系统无偿地提供给大学,以供教学与研究,或通过Ken Thompson默默回应请求者,将磁带和磁盘一包包地寄送出去。
UNIX的发展迅速笼罩在一层反传统文化的氛围中,没有版权和费用约束,源代码可以自由交流,UNIX黑客沉浸在共同编织未来和编写系统的狂欢中。在当时,大部分UNIX程序以源代码形式配送,由最终用户把它编译成可执行程序,黑客不仅使用UNIX系统,而且还编写UNIX程序,并交流、修改和共享源代码。由于众多黑客的参与,UNIX得到了快速发展,许多大学都对UNIX做出过贡献,多伦多大学计算机系发明了200dpi的打印机/绘图仪,并且开发了相关软件;耶鲁大学的计算机专家和学生改进了UNIX的shell;普度大学的电子工程系对UNIX的性能做了重要改进,推出了支持大量用户的UNIX版本,还推出了最早的UNIX网络之一;加州大学伯克利分校的学生开发了新shell和许多小型实用工具。
在UNIX的发展过程中,加州大学伯克利分校很早就成为最重要的学术热点,它从1974年就开始研究UNIX,尤其Ken Thompson于1975—1976年年休期间在此教学,更对UNIX的研究注入了强劲活力。1977年,加州大学伯克利分校毕业生Bill Joy管理的实验室发布了第1版BSD(Berkeley Software Distribution)。1980年,加州大学伯克利分校成为为这个UNIX变种做积极贡献的高校子网的核心。从此UNIX走向了以AT&T和加州大学伯克利分校两者为主的开发道路,两者相互学习、相互批评,促进了UNIX的发展。System V和BSD UNIX成为UNIX的两大主流,现在大部分的UNIX是它们的衍生品。
3.System V和BSD UNIX
AT&T公司与美国司法部的法律大战终于在1982年达到终点,AT&T公司被重新允许进
入计算机市场。贝尔实验室先后在1983年发行了System V和几种微处理机上的UNIX;1984年发行了System V Release2(SVR2);1986年,UNIX System V发展到了它的修订版Res2.1和Res3.0;1987年发行了SVR3。System V引入了许多新特征、新设施,最有代表性的就是进程间通信机制(IPC)。
UNIX系统的另外一个最重要的分支BSD UNIX的大部分特点(如C Shell、vi编辑器、作业控制、动态安装文件系统和快速文件系统)与System V UNIX差不多,但是促使其迅速流行的原因是加州大学伯克利分校的计算机系统研究小组(CSRG)最早发表的一个包括页式内存管理的UNIX版本。
FreeBSD是UNIX众多分支中相当优秀的一支,是著名的BSD UNIX的一个继承者,SUN OS和Solaris也是在DSB上发展起来的。
4.UNIX与TCP/IP
1980年,美国国防部高级研究计划局(Defense Advanced Research Projects Agency,DARPA)需要请人在UNIX环境下的VAX机上实现全新的TCP/IP协议栈。加州大学伯克利分校在虚存、开放源代码方面做的工作及其拥有最强大的开发工具的优势促使美国国防部高级研究计划局选择了伯克利分校的UNIX作为平台,决定支持伯克利分校的UNIX系统开发。BSD与美国国防部一起成为用UNIX系统实现网络互连的推动力量,该项目促进了UNIX的发展,也促进了TCP/IP的发展。
1983年夏天,支持TCP/IP协议版本的UNIX—BSD 4.2公开发行,宣布TCP/IP的诞生,这具有划时代意义。有了TCP/IP,一切都变了,它造就了1994年以后的互联网大爆炸。现在网络无处不在,无处不有。
在1983年TCP/IP实现随Berkeley 4.2版发布之前,UNIX对网络的支持一直是薄弱的。早期的以太网实验不尽如人意,贝尔实验室开发了一个难看但能用的工具UUCP,可在普通电话线上通过调制解调器来传送软件,可以在分布很广的机器之间转发邮件,支持Usenet,但是,没有FTP,没有telnet,只有限制重重的远程作业执行和很慢的连接。其他的网络方案也在发展,AT&T和SUN Microsystems都发表了网络文件系统,从而把所有网络机器的文件系统结合成一个单独的大文件系统,其中RFS(Remote File System)和NFS(Network File System)至今仍在使用。
5.UNIX向GUI发展
图形用户接口(GUI)在20世纪70年代或者更早就开始流传,大部分GUI是从Xerox公司的Palo A1to研究中心的工作中演变而来的。GUI是一个用图形(称为图标)表示操作系统的组成部分,GUI的最初设想是创建一个友好的用户环境并以一致的隐喻来理解操作系统。GUI使用方便,不是因为容易理解,而是因为使用的—致性,当用户学会在一种GUI环境下运行—个程序后,就可以容易地运行相同环境中的其他程序。
20世纪80年代初,计算机技术的发展使GUI产生了—个大飞跃。DEC和麻省理工合作的Athena计划,合并了—个基于斯坦福大学的W窗口系统的窗口系统。沿袭B语言和C语言规定,新系统命名为X,也称为X窗口系统。
X很受欢迎,部分原因是其公开的源代码,更重要的是X窗口现在可以在很多机型和操作系统上运行,而不仅仅是UNIX。然而,X窗口只提供了显示窗口、图形和文本的方法,却没有定义外观。开放软件基金会(OSF)决心建立一个标准的GUI,他们的GUI(称为Motif)是使用X窗口创建的。另一个流行的GUI是Open Look,由SUN Microsystems提供。
1985年,X窗口系统的创始人发布了X窗口的源码,无须版税、约束和授权。这项决策的直接结果就是X窗口成为不同UNIX厂商之间合作的安全中立区,成为UNIX的图形引擎。
6.UNIX系统的商业化
UNIX系统的不断发展吸引了许多计算机公司,它们开始将UNIX商业化,出售自己的UNIX产品。每一家都是以AT&T或BSD的系统为蓝本,将它们移植到自己的硬件上,并加上一些自己的“增值”功能:SUN Microsystems公司基于BSD开发、发行了SUN OS,后来又基于SVR4发行了Solaris系统;微软与SCO公司合作开发并发行了XENIX系统;SCO公司将SVR3移植到386上,并将其命名为SCO UNIX;IBM公司开发了AIX操作系统;HP公司开发了HP-UX;Digital公司开发了Digital UNIX;还有著名教授Andrew S. Tanenbaum为了教学开发的MINIX系统,以及可爱的小企鹅——Linux操作系统。
每种商业变化都增加了许多新特征,这些功能中的许多后来又被加入到主线系统中,逐步推动UNIX系统向前发展。
7.UNIX系统的标准化
随着UNIX的商业化,UNIX的源代码开始枯竭,各大UNIX厂商也都想通过个性发展来谋取优势,各种UNIX变种的泛滥造成了许多不兼容问题,这使开发应用的程序员不得不花费大量的精力来保证它们的程序可以运行于各种不同的UNIX系统中。在这种局面下,美国IEEE(Institute of Electrical and Electronics Engineers,美国电气及电子工程师学会)组织成立了POSIX(Portable Operation System Interface,可移植操作系统接口标准)委员会专门从事UNIX的标准化工作。
POSIX标准是基于现有的UNIX实践和经验,描述了操作系统的系统调用接口,用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。UNIX标准意味着一个可以运行UNIX应用软件的平台,它为用户提供一个标准的开发界面,而不在于系统内部如何实现。POSIX委员会完成了UNIX系统标准化,各UNIX厂商要按其定义重新实现UNIX。
1.1.2 UNIX系统的特点
对用户和程序员来说,UNIX操作系统极富个性,它有许多其他实用操作系统所没有的特点。由于UNIX的多用户多任务能力、设备无关性及其提供的很多附加工具,有经验的UNIX用户往往比其他系统的用户有更高的收益。UNIX的错误处理功能可以在程序运行出错时减少数据损失。UNIX使用方便,为用户、管理人员、顾客及商业决策人员提供了更大的选择范围。
1.多任务
UNIX是一个多任务操作系统,即可以同时运行多个任务。通过一个时间分享处理程序,UNIX实现了多任务。表面上看起来计算机同时为多个程序服务,实际上是在多个进程间很快地切换,由于这些处理发生很快,所以用户通常察觉不到。
2.多用户
除了多任务能力以外,UNIX还可以同时为多个用户服务。UNIX的多用户主要体现在,允许很多用户同时在不同的终端工作,使用操作系统,执行相关或不相关的任务,就像每个终端用户自己拥有一台单独的机器。
终端和PC很相似,仅有一个键盘和一个显示器,并用一条电缆连到主机上,但一般来说它不包含处理器。这种终端被人们更形象地称为哑终端。终端仅能接收键盘输入,并发送给主机,以及接收主机送来的字符,再将其显示到显示器上。某些终端也包含处理器,用以辅助用户和主机之间转递数据,如X终端拥有图形处理器,可以显示窗口和其他图形。
3.并行处理能力
与其他常见的操作系统相比,UNIX是最早支持多处理机的操作系统,而且它所支持的处理器数目也一直处于领先水平。例如,Windows NT能支持1~4个CPU;Windows 2000,最多能支持16个CPU,而UNIX在20世纪90年代中期就已经能支持32~64个CPU。UNIX可以管理数百个乃至成千上万个CPU组成的巨型机系统。
4.设备无关性
UNIX把设备作为特殊文件来处理,并分别命名,这样,在任何使用文件名的地方都可以使用设备名,通过文件操作可以实现对设备的操作,并且屏蔽对设备操作的细节。由于大部分设备除共性外还有其独有的功能,如可以格式化磁盘、回绕磁带、调整终端设置等,因此UNIX提供了专门的命令和函数执行这些操作。
但是,这种灵活性并不意味着可对任何文件或设备执行任意操作,还要考虑设备的特殊性,如打印机只能用于输出而不能用于输入。
5.工具
UNIX在其发展的最初阶段就已采用“工具法”解决问题。每一个“工具”只完成一个简单任务。通过工具组合,就可以完成某个工具无法完成的更大的、更复杂的任务。
为了组合工具,UNIX提供了管道。管道可以让数据从一个程序流到另一程序,每个程序都可以用某种方式修改数据。管道在UNIX命令行中以竖线“|”表示,它看起来确实像一条管道。
工具法在处理更加复杂的程序集合方面有很多优势:
(1)灵活性。可以组合实用的工具来完成最复杂的任务。
(2)速度快。可以快速完成任务,因为基本的工具程序块已经存在了。
(3)结构化。由于UNIX都使用相同的程序块,因此鼓励用户使用相似的方式解决问题。
工具法也可能会使UNIX的新手感到困惑,因为它可以使用很多种方法进行同一处理,这使习惯使用图形接口来解决问题的用户难以体验工具法的威力。
6.错误处理
由于UNIX是一个多用户系统,所以它必须有很强大的错误处理能力。在单用户系统中,错误引起的不便只是关机和重启动,而多用户系统的关机和重启动会引起很多的用户不便,甚至造成严重后果和经济损失。所以,UNIX尽力防止危险性的错误也就不足为怪了。
UNIX防止应用程序不合理地改写内存,防止用户有意或偶然删除不属于自己的文件;还提供了强大的中断处理功能以防止“越界”、死循环等事件的发生。当出现严重错误时,UNIX系统保存所有当前状态的信息然后退出,供熟练的管理和程序人员查找出错原因。实际上,由于错误处理得当,UNIX系统极少出现失控的情况。
7.强大的网络功能
UNIX系统提供了丰富的网络功能,是真正的网络操作系统。作为Internet网络技术基础的TCP/IP就是在UNIX上开发出来的,已经成为UNIX系统不可分割的重要组成部分,也为网络技术的发展可在其他操作系统的应用起到了推动和榜样作用。UNIX系统还提供众多常用的通信协议软件和网络服务,通过这些软件或服务,用户可轻松实现自己所需的功能或在不同操作系统间实现互连互通。
8.开放性
UNIX系统的本质特征是它的开放性,它是目前开放性最好的操作系统,是目前唯一能稳定运行在从微机、小型机到中型机、大型机的操作系统。所谓开放性是指它遵循统一的国际标准和规范。开放性已成为20世纪90年代计算机技术的核心问题,也是一个系统或软件是否具有生命力的重要因素。