《UNIX环境高级编程(第3版)》——2.3 UNIX系统实现

2.3 UNIX系统实现

上一节说明了3个由各自独立的组织所制定的标准:ISO C、IEEE POSIX以及Single UNIX Specification。但是,标准只是接口的规范。这些标准是如何与现实世界相关连的呢?这些标准由厂商采用,然后转变成具体实现。本书中我们不仅对这些标准感兴趣,还对它们的具体实现感兴趣。

在McKusick等[1996]的1.1节中给出了UNIX系统家族树的详细历史。UNIX的各种版本和变体都起源于在PDP-11系统上运行的UNIX分时系统第6版(1976年)和第7版(1979年)(通常称为V6和V7)。这两个版本是在贝尔实验室以外首先得到广泛应用的UNIX系统。从这棵树上演进出以下3个分支。

(1)AT&T分支,从此引出了系统III和系统V(被称为UNIX的商用版本)。

(2)加州大学伯克利分校分支,从此引出4.xBSD实现。

(3)由AT&T贝尔实验室的计算科学研究中心不断开发的UNIX研究版本,从此引出UNIX分时系统第8版、第9版,终止于1990年的第10版。

2.3.1 SVR4
SVR4(UNIX System V Release 4)是AT&T的UNIX系统实验室(UNIX System Laboratories,USL,其前身是AT&T的UNIX Software Operation)的产品,它将下列系统的功能合并到了一个一致的操作系统中:AT&T UNIX系统V 3.2版(SVR3.2)、Sun Microsystems公司的SunOS操作系统、加州大学伯克利分校的4.3BSD以及微软的Xenix系统(Xenix是在V7的基础上开发的,后来又采纳了很多系统V的功能)。其源代码于1989年后期发布,在1990年开始向终端用户提供。SVR4符合POSIX 1003.1标准和X/Open XPG3标准。

AT&T也出版了系统V接口定义(SVID)[AT&T 1989]。SVID第3版说明了UNIX系统要达到SVR4质量要求必须提供的功能。如同POSIX.1一样,SVID定义了一个接口,而不是一种实现。SVID并不区分系统调用和库函数。对于一个SVR4的具体实现,应查看其参考手册,以了解系统调用和库函数的不同之处[AT&T 1990e]。

2.3.2 4.4BSD
BSD(Berkeley Software Distribution)是由加州大学伯克利分校的计算机系统研究组(CSRG)研究开发和分发的。4.2BSD于1983年问世,4.3BSD则于1986年发布。这两个版本都在VAX小型机上运行。它们的下一个版本4.3BSD Tahoe于1988年发布,在一台称为Tahoe的小型机上运行(Leffler等[1989]说明了4.3BSD Tahoe版)。其后又有1990年的4.3BSD Reno版,它支持很多POSIX.1的功能。

最初的BSD系统包含了AT&T专有的源代码,它们需要AT&T许可证。为了获得BSD系统的源代码,首先需要持有AT&T的UNIX源代码许可证。这种情况正在改变,近几年,越来越多的AT&T源代码被替换成非AT&T源代码,很多添加到BSD系统上的新功能也来自于非AT&T方面。

1989年,伯克利将4.3BSD Tahoe中很多非AT&T源代码包装成BSD网络软件1.0版,并使其成为可公开获得的软件。1991年发布了BSD网络软件2.0版,它是从4.3BSD Reno版派生出来的,其目的是使大部分(如果不是全部的话)4.4BSD系统不再受AT&T许可证的限制,这样,大家都可以得到源代码。

4.4BSD-Lite是CSRG计划开发的最后一个发行版。由于与USL产生的法律纠纷,该版本曾一度延迟推出。在纠纷解决后,4.4BSD-Lite立即于1994年发布,并且不再需要具有UNIX源代码使用许可证就可以使用它。1995年CSRG发布了修复了bug的版本。4.4BSD-Lite第2发行版是CSRG的最后一个BSD版本(McKusick等[1996]描述了该BSD版本)。

在伯克利所进行的UNIX开发工作是从PDP-11开始的,然后转移到VAX小型机上,接着又转移到工作站上。20世纪90年代早期,伯克利得到支持在广泛应用的80386个人计算机上开发BSD版本,结果产生了386BSD。这一工作是由Bill Jolitz完成的,其工作在1991年全年的Dr. Dobb's期刊上以每月一篇文章连载发表。其中很多代码出现在BSD网络软件2.0版中。

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

由FreeBSD项目产生的所有软件,包括其二进制代码和源代码,都是免费使用的。为了测试书中的实例,本书选取了4个操作系统,FreeBSD 8.0操作系统是其中之一。

有许多基于BSD的免费操作系统。NetBSD项目类似于FreeBSD项目,但是更注重不同硬件平台之间的可移植性。OpenBSD项目也类似于FreeBSD项目,但更注重于安全性。
2.3.4 Linux
Linux是一种提供类似于UNIX的丰富编程环境的操作系统,在GNU公用许可证的指导下,Linux是免费使用的。Linux的普及是计算机产业中的一道亮丽风景线。Linux经常是支持较新硬件的第一个操作系统,这一点使其引人注目。

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

Ubuntu 12.04的Linux分发版本是用以测试本书实例的操作系统之一。该系统使用了Linux操作系统3.2.0版内核。

2.3.5 Mac OS X
与其以前的版本相比,Mac OS X使用了完全不同的技术。其核心操作系统称为“Darwin”,它基于Mach内核(Accetta等[1986])、FreeBSD操作系统以及具有面向对象框架的驱动和其他内核扩展的结合。Mac OS X 10.5的Intel部分已经被验证为是一个UNIX系统。

Mac OS X 10.6.8(Darwin 10.8.0)是用以测试本书实例的操作系统之一。

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

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

Solaris 10 UNIX操作系统也是用以测试本书实例的操作系统之一。

2.3.7 其他UNIX系统
已经通过验证的其他UNIX版本包括:

AIX,IBM版的UNIX系统;

HP-UX,HP版的UNIX系统;

IRIX,Silicon Graphics版的UNIX系统;

UnixWare,SVR4派生的UNIX系统,现由SCO销售。

时间: 2024-12-03 06:41:29

《UNIX环境高级编程(第3版)》——2.3 UNIX系统实现的相关文章

unix环境高级编程-UNIX环境高级编程源代码对应

问题描述 UNIX环境高级编程源代码对应 今天开始学习UNIX环境高级编程,书中的源代码下载到了,但是发现根本不是按章节来的,找起来是相当的费时间,有哪位大神用过后知道他们的对应关系么,比如1-1对应ls1.c这样,真是万分感激,造福大家啊!

ubuntu-最近在学习Unix 环境高级编程,配置环境时遇到了些问题

问题描述 最近在学习Unix 环境高级编程,配置环境时遇到了些问题 最近再看APUE(UNix 环境高级编程)的第三版,照着教程在中配置环境.也就是想要运行书中的源码,则要安装 libbsd-dev包,而每次安装这个包时,都如上报错,请问各位大虾,该怎么解决呢? 解决方案 你好, 类似的问题我也遇到过 ubuntu下apt-get install安装软件, 报"无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系",今天终于找到解决方法了. 一般出现这种情况的原

Mac OS X 10.8 中编译APUE(Unix环境高级编程)的源代码过程_C 语言

最近在温习APUE(<unix环境高级编程>),以前都是在linux下搞,现在打算在自己机器弄下,于是google了下,把编译的事情搞定了,修改了一些教程的一些错误,比如下载链接之类的. 1.下载源文件,我这里是第二版,貌似第三版的英文版出来了... 复制代码 代码如下: wget http://www.apuebook.com/src.2e.tar.gz 2.解压 复制代码 代码如下: tar zxf src.2e.tar.gz 3.修改些东西 复制代码 代码如下: cd apue.2e/

UNIX环境高级编程---标准I/O库

前言:我想大家学习C语言接触过的第一个函数应该是printf,但是我们真正理解它了吗?最近看Linux以及网络编程这块,我觉得I/O这块很难理解.以前从来没认识到Unix I/O和C标准库I/O函数压根不是一码事.Unix I/O也叫低级I/O,也叫Unbuffered I/O,是操作系统内核部分,也是系统调用:而C标准I/O函数相对也成Buffered I/O,高级I/O,一般是为了效率考虑对这些系统调用的封装.以前使用getchar()经常为输入完后的回车而出错.那是不理解标准I/O实现时的

UNIX环境高级编程中的apue.h

/************** * *apueerror.h * *************/ #include <apue.h> #include <stdio.h> #include <errno.h> /* for definition of errno */ #include <stdarg.h> /* ISO C variable aruments */ static void err_doit(int, int, const char *, va

unix高级编程-UNIX环境高级编程 times() 疑问

问题描述 UNIX环境高级编程 times() 疑问 例程 int main(int argc, char *argv[]) { clock_t s_clk,e_clk; struct tms s_tms,e_tms; s_clk = times(&s_tms); system("ls /dev"); system("date"); sleep(1); e_clk = times(&e_tms); printf("e_clk %ld - s

《UNIX环境高级编程(第3版)》——2.2 UNIX标准化

2.2 UNIX标准化 2.2.1 ISO C 1989年下半年,C程序设计语言的ANSI标准X3.159-1989得到批准.此标准被也采纳为国际标准ISO/IEC 9899:1990.ANSI是美国国家标准学会(American National Standards Institute)的缩写,它是国际标准化组织(International Organization for Standardization,ISO)中代表美国的成员.IEC是国际电子技术委员会(International Ele

《UNIX环境高级编程(第3版)》——2.5 限制

2.5 限制 UNIX系统实现定义了很多幻数和常量,其中有很多已被硬编码到程序中,或用特定的技术确定.由于大量标准化工作的努力,已有若干种可移植的方法用以确定这些幻数和具体实现定义的限制.这非常有助于改善UNIX环境下软件的可移植性. 以下两种类型的限制是必需的. (1)编译时限制(例如,短整型的最大值是什么?) (2)运行时限制(例如,文件名有多少个字符?) 编译时限制可在头文件中定义.程序在编译时可以包含这些头文件.但是,运行时限制则要求进程调用一个函数获得限制值. 另外,某些限制在一个给定

《UNIX环境高级编程(第3版)》——第1章 UNIX基础知识 1.1 引言

第1章 UNIX基础知识 1.1 引言 所有操作系统都为它们所运行的程序提供服务.典型的服务包括:执行新程序.打开文件.读文件.分配存储区以及获得当前时间等,本书集中阐述不同版本的UNIX操作系统所提供的服务. 想要按严格的先后顺序介绍UNIX,而不超前引用尚未介绍过的术语,这几乎是不可能的(可能也会令人厌烦).本章从程序员的角度快速浏览UNIX,对书中引用的一些术语和概念进行简要的说明并给出实例.在以后各章中,将对这些概念做更详细的说明.对于初涉UNIX环境的程序员,本章还简要介绍了UNIX提