BSD UNIX历史以及设计原则

BSD Unix

本博客是对一个BSD Unix历史的简介的翻译,原文是《操作系统概念》一书附录A的一部分

A.1 Unix历史

第一版Unix由贝尔实验室研究组的Ken Thompson于1969年开发,其目的是为了使用一款闲置的电脑PDP-7.不久Dennis Ritchie也加入了Thompson,他们两人和研究组的其他成员一起,制造出了Unix的早期版本。

         Ritchie之前曾在MULTICS项目中工作,MULTICS对这个新的操作系统产生了很大的影响。甚至连Unix这个名字也是MULTICS的双关语。文件系统的基本组织,将命令解释器(shell)作为一个用户进程的思想,为每一个命令使用分别的进程,原始的行编辑字符(#删除最后一个字符,@删除整行),以及其他许多特性直接源自MULTICS。一些源于其他操作系统的思想也被采用,比如MIT的CTSS和XDS-940.

         Ritchie和Thompson在unix上静静的工作了多年。第二个版本时他们使用PDP-11/20;

第三版时,他们把操作系统的大部分使用C语言进行了重写,取代了之前采用的汇编语言。C语言在贝尔实验室开发,用于支持Unix。Unix也移到了更大的PDP-11模型中,比如11/45,11/70。当unix使用用C重写迁移到了拥有支持多道程序硬件的系统(比如11/45)时,多道程序和其他改进也添加了进去。

         Unix开发完成之后,在贝尔实验室内广泛使用,渐渐传播到了一些大学。第一个贝尔实验室之外广泛使用的是第六版,1976年发布。(早期unix系统的版本号和unix发行版本创建时当前unix编程人员手册的版本号一致,代码和手册是独立校阅的)

         1978年,第7版本发布。运行在PDP-11/70和Interdata 8/32上的unix系统是大多数现代unix系统的祖先。它不久就移植到了其他PDP-11模型和

VAX电脑系统(VAX Computer line).VAX上可用的版本是32V。从那时起研究在继续。

 

A.1.1unix支持组

自1978年第7版本发布之后,unix支持组(the Unix Support Group,USG)从AT&T下的unix发行研究组那儿获得了管理控制和责任,AT&T是贝尔实验室的父组织。Unix开始成为一项产品,而不是一个简单的研究工具。然而,研究组还在继续开发他们自己的unix以用于他们内部计算使用。第8个版本包含一个称为流I/O系统(stream I/O system)的功能,允许对内核IPC模块进行灵活的配置,同时还包含RFS,一个和Sun的NFS类似的远程文件系统。当前版本是Unix10,发布于1989年,只有贝尔实验室内部可用。

         USG主要为AT&T下的Unix提供支持。第一个来自USG的外部发行版本是SystemⅢ,发行于1982.

System Ⅲ整合了版本7和32V的特性,以及一些非研究组开发的Unix系统的特性。举例来说,Unix/RT,一个实时unix系统,大量的PWB(Programmer’s work bench)的软件工具包的移植版本也包含在了System Ⅲ中。

         USG在1983年发布了System Ⅴ;它很大程度上源于SystemⅢ。AT&T对贝尔业务公司的剥夺让AT&T进入了侵略性的促销SystemⅤ的境地。USG重组为USDL(Unix System Development laboratory),在1984年发行了SystemⅤ第二个发行版本(Ⅴ.2)。unix systemⅤ 的第二个发行版本的第四版(Ⅴ.2.4)添加了一个新的包含写时复制和共享内存的虚拟存储技术的实现。USDL又被AT&T信息系统(ATTIS)代替,ATTIS在1987年发布了system Ⅴ的第3个版本(Ⅴ.3). Ⅴ.3改写了V8关于流式I/O系统的实现,并使其通过STREAMS使用。也包含了RFS,类似于NFS的一种远程文件系统。

A.1.2 伯克利开始开发

早期UNIX系统的小体积,模块化,和简洁的设计引领了许多其他计算机科学组织基于UNIX的工作,比如RAND,BBN,the University of Illinois, Harvard, Purdue, and DEC。在贝尔实验室和AT&T之外,最有影响力的开发组就是加利福尼亚大学伯克利分校。

Bill Joy 和 Ozalp Babaoglu在1978年第一个在berkeley VAX UNIX上做了一些工作。他们添加了虚拟存储,请求页式和页替换到32V版本,制造了3BSD UNIX。

这个版本是第一次在UNIX系统上实现这些功能。3BSD巨大的虚拟内存空间允许开发非常大的程序,比如伯克利自己的Franz LISP。内存管理工作说服了DARPA(Defense Advanced Research Projects Agency)资助伯克利开发一个标准的UNIX系统供政府使用;4BSD就是结果。

         供DARPA使用的4BSD由一个指导委员会指导,包括许多来自UNIX和网络社区的重要人物。这个项目的目标之一就是为DARPA的因特网网络协议(TCP/IP)提供支持。

这一个支持以一种广泛的形式提供。在4.2BSD中就可以在各种各样的网络设施中通信,包括局域网(例如以太网和手持电话)和广域网(比如NSFNET)。这些协议现在流行的最重要的原因就是这一个版本的实现。许多unix系统的供应商把他作为他们实现的基础,它甚至还被用在其他操作系统。它允许因特网从1984年的60个连结的网络发展到多于8000的网络,在1993年时估计有1000万(10million)个网络。

         另外伯克利改写了许多同时代操作系统的特性来提高UNIX的设计和实现。TENEX(TOPS-20)系统的许多终端行编辑功能通过一个新的终端驱动来提供。一个新的用户接口(Cshell),一个新的文本编辑器(ex/vi),Pascal和lisp的编译器,和许多新的伯克利编写的程序。4.2BSD的一些效率的提供受启与VMS操作系统。

         伯克利的Unix软件发布于BSD(BerkeleySoftware Distributions)。将3BSD之后的Berkely VAX UNIX 系统称为4BSD是方便的,但是实际上确有几个特殊的版本,最重要的4.1BSD,4.2BSD;4.2BSD第一次发布于1983年,是最初的伯克利DARPA Unix项目的巅峰。为PDP-11开发的等价版本是2.9BSD

         在1986年,4.3BSD发布。他和4.2很相似不过包括大量的内部改变包括bug修复和性能提升。也添加了一些新的功能,包括对Xerox Network System 协议的支持。

         之后的一个版本是1988年的4.3 BSDTahoe。它包含提升的拥塞控制和TCP/IP性能的提升。磁盘配置从设备驱动在分离出来并且从磁盘自身读出来。扩充的时区支持也包含在内。4.3 BSD Tahoe,实际上是为CCI Tahoe system (Computer Console, Inc., Power

6 computer)开发并在其上开发,而不是通常的基于VAX。相应的PDP-11版本是2.10.1BSD;他由USENIX协会发布,这个协会也发布了4.3BSD的手册。4.3.2 BSDReno发行版本见证了ISO/OSI网络的实现。

         最后一个伯克利发行版本是4.4BSD,于1993年完成。它包含新的X.25网络支持和遵从POSIX标准。它包含一个全新的文件系统组织,拥有一个新的虚拟文件系统接口并支持可堆叠的文件系统,也就是允许文件系统层置在其他文件系统的顶层,使得包含新特性变得容易。一个NFS和基于日志的文件系统的实现包含在内。4.4BSD的虚拟内存系统派生自Mach。还有一些其他改变,比如增强的安全和改进的内核结构。随着4.4版本的发行,伯克利中断了他的研究工作。

 

A.1.3Unix的传播

UNIX | BSD 一直是VAX的操作系统的选择自从1979年的最初发行版本一直到Ultrix,DEC的BSD实现。实际上4BSD仍然是许多研究和网络设施的最佳选择。当前的Unix操作系统集不局限于贝尔实验室(现在属于Lucent Technology)和BSD。Sun Microsystems通过在Sun的工作站上使用帮助了UNIX的BSD风味版的推广。随着Unix逐渐流行,它被迁移到了许多计算机和计算机系统上。非常多的Unix和类Unix系统被创造出来,DEC支持自己的Unix(Ultrix)在自己的工作站上使用,正在用另一个UNIX派生的系统OSF/1来替代Ultrix。

微软为Intel 8088家族重写了Unix把他称作XENIX,并且他的Windows NT操作系统受Unix的影响极大。IBM在他的PC,工作站和主机上使用UNIX(AIX)。事实上,UNIX几乎在所有的通用计算机中都能找到。它运行在pc上,工作站上,迷你计算机上,主机上以及超级计算机上,从Apple Macintosh IIs到 Cray II。因为他的广泛的可获得性,它的使用环境涵盖了学术,军事,制造进程控制.绝大部分这些系统基于版本7,SystemⅢ,4.2BSD或SystemⅢ。

         unix在计算机供应商中的广泛流行使得unix成为移植性最好的操作系统,用户可以期望一个Unix环境独立于任何特定的计算机生产商。但是大量的实现版本导致了不可忽视的编程和用户接口随着供应商而变化。对于真实存在的供应商相互独立的情况,应用程序开发者需要一致的接口,这样的接口使得所有的“UNIX”应用在所有的Unix系统上都可以运行,但是显然事实并非如此。这一点随着unix成为受偏爱的程序(涵盖数据库,图形和网络程序)开发平台变得越来越重要,导致了对UNIX标准的强烈需求。

         一些标准化项目开始使用。第一个是/usr/group 1984 Standard,由UniForum工业用户组赞助,从那时起,许多官方标准继续努力,包括IEEE和ISO(POSIX标准)。

X/Open Group国际联盟完成了XPG3,是一个公共应用环境,将IEEE接口标准归入在内。不幸的是,XPG3基于ANSI C 的一个草案,而不是最终版本,因此XPG3被重新制定为XPG4.1989年,ANSI标准正文标准化了C编程语言,给出了一个生产商很快采纳的ANSI C的说明。

         随着这些项目的继续,UNIX的各种风格将会聚合并产生一个Unix编程接口,使得Unix更加流行。实际上,两个不同的UNIX提供商集合在解决这个问题:AT&T指导的 UNIX International(UI)和开放软件基金(OSF)都同意遵循POSIX标准。最近,许多提供商参与到这两个组之中,并达成了更远的标准(COSE agreement)。

         AT&T在1989年用UNIX软件组织(USO)取代了ATTIS group,上市了第一个融合的UNIX,System Ⅴ release 4.这个系统结合了System V, 4.3 BSD, and Sun's SunOS,的特性,包括长文件名,伯克利文件系统,虚拟内存管理符号链接多访问组,job控制和可靠的信号。它同时遵守POSIX标准的发布版本POSIX.1USO制造了SVR4之后,它成为AT&T的子公司称为UNIX系统实验室(USL);1993年,他被Novell, Inc.收购。下图总结了各个unix版本的关系。


         UNIX系统从两个贝尔实验室成员的个人项目成长为一个由跨国的标准定义的操作系统。同时,UNIX是一个绝佳的学术研究的工具,并且我们相信它会保持作为操作系统理论和实践的重要部分。举例来说,Tunis操作系统,Xinu操作系统和Minix操作系统基于UNIX的概念但是开发用于教室学习,有过剩的正在进行的和UNIX相关的研究,包括Mach, Chorus, Comandos, and Roisin。最开始的开发者Ritchie andThompson,在1983年被Association for Computing Machinery授予图灵奖以纪念他们在Unix上的工作

 

A.1.4FreeBSD的历史

这一部分所说的unix版本是FreeBSD的Intel版本。这个系统实现了许多有趣的操作系统概念,比如带簇的请求页式,网络等。FreeBSD项目开始于1993,目的是生产一个386BSD的快照来解决当前的patch机制(批处理机制)不能解决的问题。386BSD派生自4.3 BSD-Lite (Net/2),由William Jolitz.于1992年6月发行。FreeBSD(由David Greenman制造)1.0于1993年12月发行,FreeBSD 1.1在1994年五月发行。这两个版本都是基于4.3 BSD-Lite. UCB and Novell的法律问题要求4.3 BSD-Lite的代码不被使用,所以最后的4.3BSD-Lite发行版本在1994年7月((FreeBSD 1.1.5.1).。

         FreeBSD从那时起根据不完整的4.4BSD-Lite的代码重新发明,FreeBSD2.0在1994年9月发行。后来的发行版本包括2.0.5inJune 1995, 2.1.5 in August 1996, 2.1.7.1 in February 1997, 2.2.1 in April 1997,2.2.8in November 1998, 3.0 in October 1998, 3.1 in February 1999, 3.2 in May

1999, 3.3 in September 1999, 3.4 inDecember 1999, 3.5 in June 2000, 4.0 in March2000, 4.1 in July 2000, and 4.2 inNovember 2000.。

         FreeBSD项目的目标是为任何目的提供软件没有约束。这个想法是使代码充分的使用并提供最大的好处。目前他主要运行在Intel平台上,虽然Alpha平台也支持。移植到其他处理器平台的工作正在进行当中。

A.2设计原则

UNIX被设计为一个分时系统。标准的用户接口(shell)很简单而且如果想的话可以用其他shell代替。文件系统是一个多层的数,允许用户创建自己的子目录。用户的每一个数据文件都是一个简单的字节序列。

磁盘文件和I/O设备被尽可能简单地对待。因此,设备的依赖和特性被尽可能多的保存在内核之中。即使在内核中,绝大多数设备都受设备驱动程序限制。

UNIX支持多进程。一个进程可以容易地创建新进程。CPU调度是一个简单的优先级调度。FreeBSD使用请求页式作为支持内存管理和CPU调度决策的机制。如果一个系统正在遭受过度换页就会使用Swapping技术。

因为UNIX 是由Thompson 和Ritchie为了自己方便而创造的,因此UNIX小到容易理解。绝大多数算法的选择往往是考虑简单性,而不是速度或者复杂度。目的是使内核和库提供一个小的工具集并且足够强大以能够支持用户按需构建一个更复杂的系统。UNIX的简洁的设计导致了很多的模仿和修改。

尽管UNIX的设计者对于他们的UNIX系统非常了解,但是UNIX在实现之前并没有详细说明其设计。这个灵活性似乎成为系统开发中的关键因素之一。一些设计原则演化出来,虽然这些设计原则并未被明确提出。

UNIX系统由编程人员为编程人员而设计。因此,他是交互性的,并且程序开发工具一直处于很高的优先级。这些工具包括make,源代码控制系统SCCS(source code control system),UNIX上使用的主要的版本控制系统是CVS(concurrent versions system),因为有大量的开发者经营并使用者这些代码。

UNIX的绝大部分使用C语言编写,C语言的开发正是为了支持UNIX,因为不论是Thompson还是Ritchie都不喜欢使用汇编语言编程。避免使用汇编语言同样因为UNIX运行的机器并不确定(跨平台)。这极大地简化了UNIX从一类硬件系统到另一类硬件系统的迁移。

从一开始,UNIX开发系统的源代码就放在了线上,开发者使用正在开发的系统作为他们主要的系统。这种开发模式极大地促进了不足的发现以及修复,包括新的可能性和实现。这也加速了当今UNIX变式过多的现状,但是其好处超过了弊处。如果某些部分坏掉了,这可以在局域网中被修改,没有必要等到下一个发行版本。这些修复以及一些新的工具也许会结合到下一个发布版本。

PDP-11(以及更早的使用UNIX系统的计算机)的大小限制,催生了一些优雅。其他系统拥有大量的算法处理病态情况,UNIX只是将所有可控的崩溃成为panic。UNIX努力去阻止这些问题,而不是尝试修复这些问题。其他的系统往往使用蛮力或者宏扩展,UNIX的开发往往更巧妙或者至少更简单。

这些早期的优势很大程度上影响了其流行度,这也反过来产生了新的需求挑战这些优点。UNIX被用来做网络,图形,实时操作这些任务,并不总是符合开始的面向文本的模型(text-orinted model)。因此,一些内部工具发生了改变,新的编程接口也添加了进去。添加这些新的功能,特别是窗口接口需要添加大量的代码,急速增加了系统的大小。举例来说,网络和窗口都加倍了系统的大小。这个模式也指出了UNIX的另一个优势,无论工业界开发出了什么东西,UNIX总是能够将其吸收但是仍旧是UNIX。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值