UNIX 标准及实现
Unix标准化
ISO C
1989年下半年,C程序设计语言的ANSI标准X3.159-1989得到标准
ANSI时美国国家标准学会(American National Standards Institute)的缩写,它是国际标准化组织(International Organization For Standardization ,ISO)中代表美国的成员。
IEC时国际电子技术委员会(International Electrotechnical Commission)的缩写。
gcc 对ISO C标准1999版本符合程度总结可参见http:///www.gnu.org/c99status.html 。
IEEE POSIX
POSIX是一个最初由IEEE(Institute Of Electrical and Electronics Engineers )制定的标准族。
POSIX指的是可移植操作系统接口(Portable Operating System interface)/
由于1003.1标准说明了一个接口(interface)而不是一种实现(implementation),所以并不区分系统调用和库函数。所有标准中的例程都称为函数。
Single UNIX specification[单一Unix规范]
single unix specification (SUS ,单一UNIX规范)是POSIX标准的超集,它定义了一些附加借口扩展了POSIX.1提供的功能。POSIX相当于 single Unix specification 的基本规范部分。
POSIX.1 中的X/open 系统接口(X/Open system interface ,XSI)选项描述了可选的接口,也定义了遵循XSI的实现鼻血支持POSIX.1的那些可选部分。这些鼻血支持的部分包括:文件同步、线程栈地址和长度属性、线程进程共享同步遗迹_XOPEN_UNIX 符号常量。只有遵循XSI的实现才能称为UNIX系统。
Open Group 拥有Unix商标,他们使用single unix specification 定义了一系列接口。一个系统要想称为Unix系统,其实现必须支持这些接口,Unix系统供应商必须以文件形式提供符合性的声明,并通过验证符合性的测试,才能得到Unix商标的许可证。
FIPS
FIPS代表的是联邦信息处理标准(Federal InforMation Processing Standard)这一标准是由美国政府发布的,并由美国政府用于计算机系统的的采购
POSIX.1 FIPS 的作用是,它要求任何希望美国政府销售符合POSIX.1标准的计算机系统的厂商都应该支持POSIX.1的某些可选功能。
Unix 系统实现
(1)AT&T分支,从此引出了系统III和系统V(被称为UNIX的商用版本)
(2)加州大学伯克利分校分之,从此引出4.xBSD 实现
(3)由于AT&T贝尔实验室的计算机研究中心不断开发的UNIX研究版本,从此引出Unix分时系统第8版本,第9版本,终止于1990年的第10版本。
SVR4
SVR4是AT&T的unix系统实验室的产品
4.4BSD
BSD 是由加州大学伯克利分校的计算机系统研究组(CSRG)研究开发和分发的。
FreeBSD
FreeBSD 基于4.4BSD-Lite操作系统。在加州大学伯克利分校的CSRG决定终止其在UNIX操作系统的BSD版本的研究工作,而且386BSD项目被忽视很长时间之后,为了继续坚持BSD系列,形成了FreeBSD项目。
LINUX
Linux是一种提供类似于UNIX的丰富编程环境的操作系统,在GNU公用许可证的指导下,Linux是免费使用的。
Mac os X
与其以前的版本相比,Mac OS X 使用了完全不同的技术。其核心操作系统称为“Darwin”,它基于Mach内核、FreeBSD操作系统以及具有面向对象框架的驱动和其他内核扩展的结合。
Solaris
Solaris是由Sun Microsystems(现为Oracle)开发的Unix系统版本。
其他Unix系统
已通过验证的其他Unix版本包括:
- AIX ,IBM 版本的UNIX操作系统
- HP-UX ,HP版本的UNIX操作系统
- IRIX,Silicon Graphics版本的操作系统
- UNIX ware ,SVR4派生的UNIX系统,现在由SCO销售。
限制
Unix 系统实现定了很多幻数和常量,其中很多已被硬编码到程序中,或用特定的技术确定。
以下两种类型的限制时必需的。
1:编译时限制
2:运行时限制
2.5.1 ISO C限制
ISO C 定义的所有编译时限制都列在头文件<limits.h>。这些限制常量在个给定的系统中并不会改变。
我们将会遇到的一个区别是系统是否提供带符号或无符号的字符值。
2.5.2 POSIX 限制
POSIX.1 定义了很多涉及操作系统实现限制的常量,遗憾的是,这是POSIX.1最令人迷惑不解的部分之一。虽然POSIX.1定义了大量限制和常量,我们只关心与基本的POSIX.1接口有关的部分。这些限制和常量分成下列7类。
1:数值限制:LONG_BIT 、SSIZE_MAX 和 WORD_BIT
2:最小值:
3:最大值:POSIX_CLOCKRES_MIN
4:运行时可以增加的值:CHARCLASS_NAME_MAX、COLL_WEIGHTS_MAX、LINE_MAX、NGROUPS_MAX 和RE_DUP_MAX
5:运行时不变值(可能不确定)
6:其他不变值:NL_ARGMAX、NL_MSGMAX、NL_SETMAX和NL_TEXTMAX.
7:路径名可变值:FILESIZEBITS、LINK_MAX、MAX_CANON、MAX_INPUT、NAME_MAX、PATH_MAX、PIPE_BUF 和 SYMILNK_MAX。
一个严格符合(strictly conforming)POSIX 的应用区别于一个刚刚符合POSIX(merely POSIX confirming)的应用。符合POSIX的应用只使用IEEE1003.1-2001中定义的接口,严格符合POSIX的应用满足更多的限制,例如:不依赖于POSIX未定义的行为,不使用其他任何已弃用的接口以及不要求所使用的常量值大于 图 所列出的最小值。