本节书摘来自异步社区《UNIX网络编程 卷2:进程间通信(第2版)》一书中的第1章,第1.7节,作者:【美】W. Richard Stevens著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.7 Unix标准
有关Unix标准化的大多数活动是由Posix和Open Group做的。
1.7.1 osix
Posix是“可移植操作系统接口”(Portable Operating System Interface)的首字母缩写。它并不是一个单一标准,而是一个由电气与电子工程师学会即IEEE开发的一系列标准。Posix标准还是由ISO(国际标准化组织)和IEC(国际电工委员会)采纳的国际标准,这两个组织合称为ISO/IEC。Posix标准经历了以下若干代。
IEEE Std 1003.1-1988(共317页)是第一个Posix标准。它说明进入类Unix内核的C语言接口,涉及下列领域:进程原语(fork、exec、信号、定时器)、进程环境(用户ID、进程组)、文件与目录(所有I/O函数)、终端I/O、系统数据库(口令文件和用户组文件)、tar与cpio归档格式。
第一个Posix标准是出现于1986年称为“IEEEIX”的试用版本。Posix这个名字是由Richard Stallman建议使用的。
IEEE Std 1003.1-1990(共356页)是下一个Posix标准,它也是国际标准ISO/IEC 9945-1: 1990。从1988年版本到1990年版本只做了少量的修改。新添的副标题为“Part 1: System Application Program Interface (API) [C Language]”,指示本标准为C语言API。
IEEE Std 1003.2-1992出版成两卷本,共约1300页,其副标题为“Part2: Shell and Utilities”。这一部分定义了shell(基于System V的Bourne shell)和大约100个实用程序(即通常从shell启动执行的程序,包括awk、basename、vi和yacc等)。本书称这个标准为Posix.2。
IEEE Std 1003.1b-1993(共590页)先前称为IEEE P1003.4。这是对1003.1-1990标准的更新,添加了由P1003.4工作组开发的实时扩展:文件同步、异步I/O、信号量、内存管理(mmap和共享内存区)、执行调度、时钟与定时器、消息队列。
IEEE Std 1003.1,1996年版[IEEE 1996]包括1003.1-1990(基本API)、1003.lb-1993(实时扩展)、-1995 (Pthreads)和1003.1i-1995(对1003.1b的技术性修正)。这个标准也称为ISO/IEC 9945-1: 1996。其中增加了三章线程内容以及有关线程同步(互斥锁和条件变量)、线程调度和同步调度的额外各节。本书称这个标准为Posix.1。
743页中有四分之一强的篇幅是标题为“Rationale and Notes”(原理与注解)的附录。这些原理含有历史性信息以及某些特性必须加入或删除的理由,它们通常跟正式标准一样有教益。
遗憾的是IEEE标准在因特网上不是免费可得的。其订购信息在[IEEE 1996]的参考文献说明中给出。
注意信号量在实时标准中定义,它与在Pthreads标准中定义的互斥锁和条件变量相分离,这足以解释它们的API中存在的某些差异。
最后注意读写锁(尚)不属于任何Posix标准。我们将在笫8章中详细讨论。
将来某个时候印制的新版本的IEEE Std 1003.1应包括P1003.lg标准,它是我们在UNPvl中讲述的网络编程API(套接字和XTI)。
1996年版的Posix.1标准的前言中声称ISO/IEC 9945由下面三个部分构成。
Part 1: System application program interface (API) [C Language](第一部分:系统应用程序接口(API)[C语言])。
Part 2: Shell and utilities(第二部分:Shell和实用程序)。
Part 3: System administration(第三部分:系统管理)(正在开发中)。
第一部分和第二部分就是我们所称的Posix.1和Posix.2。
Posix标准化工作仍将继续,任何论述到它的书籍都在跟踪这项工作。
1.7.2 Open Group
Open Group是由X/Open公司(1984年成立)和开放软件基金会(OSF,1988年成立)于1996年合并而成的组织。它是由厂家、业界最终用户、*部门和学术机构组成的国际组织。它们的标准经历了以下若干代。
X/Open公司于1989年出版了“X/Open Portability Guide”(《X/Open移植性指南》)第3期(XPG3)。
第4期于1992年出版,这一期的第2版于1994年出版。这个最终版本也称为“Spec ,其中魔数1170是系统接口数(926个)、头文件数(70个)和命令数(174个)的总和。这组规范的最终名字是“X/Open Single Unix Specification”(X/Open单一Unix规范),也称为“Unix 。
1997年3月单一Unix规范的第2版发表。符合这个规范的产品可称为“Unix ,这也是本书提到这个规范所用的名称。Unix 98所需的接口数从1170个增加到1434个,然而,适用于工作站的接口数却猛增到3030个,因为它包含CDE(公共桌面环境,Common Desktop Environment),而CDE又反过来要求有X Windows系统和Motif用户接口。
单一Unix规范的许多文档可在因特网上从这个站点免费取得。
1.7.3 Unix版本和移植性
当今大多数Unix系统符合Posix.1和Posix.2的某个版本。我们使用限定词“某个”是因为Posix每次更新(例如1993年增加实时扩展,1996年增加Pthreads内容),厂家都得花一两年(甚至更长的时间)去实现并加入最近的更新内容。
从历史上看,多数Unix系统或者源自Berkeley,或者源自System V,不过这些差别在慢慢消失,因为大多数厂家已开始采用Posix标准。仍然存在的主要差别在于系统管理,这是一个目前还没有任何Posix标准可循的领域。
运行本书中大多数例子的平台是Solaris 2.6和Digital Unix 4.0B。其原因在于写到此处时(1997年末到1998年初),只有这两种Unix系统支持System V IPC、Posix IPC及Posix线程。