关于UNIX标准 /Linux /POSIX

关于UNIX标准

POSIX(Portable Operating System Interface)是由IEEE制定的标准,致力于统一各种UNIX系统的接口,促进各种UNIX系统向互相兼容的发向发展。IEEE 1003.1(也称为POSIX.1)定义了UNIX系统的函数接口,既包括C标准库函数,也包括系统调用和其它UNIX库函数。POSIX.1只定义接口而不定义实现,所以并不区分一个函数是库函数还是系统调用,至于哪些函数在用户空间实现,哪些函数在内核中实现,由操作系统的开发者决定,各种UNIX系统都不太一样。IEEE 1003.2定义了Shell的语法和各种基本命令的选项等。本书的第三部分不仅讲解基本的系统函数接口,也顺带讲解Shell、基本命令、帐号和权限以及系统管理的基础知识,这些内容合在一起定义了UNIX系统的基本特性。

在UNIX的发展历史上主要分成BSD和SYSV两个派系,各自实现了很多不同的接口,比如BSD的网络编程接口是socket,而SYSV的网络编程接口是基于STREAMS的TLI。POSIX在统一接口的过程中,有些接口借鉴BSD的,有些接口借鉴SYSV的,还有些接口既不是来自BSD也不是来自SYSV,而是凭空发明出来的(例如本书要讲的pthread库就属于这种情况),通过Man Page的COMFORMING TO部分可以看出来一个函数接口属于哪种情况。Linux的源代码是完全从头编写的,并不继承BSD或SYSV的源代码,没有历史的包袱,所以能比较好地遵照POSIX标准实现,既有BSD的特性也有SYSV的特性,此外还有一些Linux特有的特性,比如epoll(7),依赖于这些接口的应用程序是不可移植的,但在Linux系统上运行效率很高。

POSIX定义的接口有些规定是必须实现的,而另外一些是可以选择实现的。有些非UNIX系统也实现了POSIX中必须实现的部分,那么也可以声称自己是POSIX兼容的,然而要想声称自己是UNIX,还必须要实现一部分在POSIX中规定为可选实现的接口,这由另外一个标准SUS(Single UNIX Specification)规定。SUS是POSIX的超集,一部分在POSIX中规定为可选实现的接口在SUS中规定为必须实现,完整实现了这些接口的系统称为XSI(X/Open System Interface)兼容的。SUS标准由The Open Group维护,该组织拥有UNIX的注册商标(http://www.unix.org/),XSI兼容的系统可以从该组织获得授权使用UNIX这个商标。

没有评论: