1. System V和BSD
Unix操作系统在操作风格上主要分为System V和BSD(目前一般采用BSD的第4个版本SVR4),前者的代表的操作系统有Solaris操作系统,在Solaris1.X之前,Solaris采用的是BSD风格,2.x之后才投奔System V阵营。后者的代表的操作系统有FreeBSD。
System V它最初由AT&T开发,曾经也被称为AT&T System V,是Unix操作系统众多版本中的一支。在1983年第一次发布,一共发行了4个System V的主要版本,System V Release4,或者称为SVR4,是最成功的版本,该版本有些风格成为一些UNIX共同特性的源头,如下表格的初始化脚本/etc/init.d。用来控制系统的启动和关闭。
BSD(Berkeley Software Distribution,伯克利软件套件)是Unix的衍生系统,1970年代由伯克利加州大学(Uni Versity of California, Berkeley)开创。BSD用来代表由此派生出的各种套件集合。
Linux之所以被称为类Unix操作系统(Unix Like),部分原因就是Linux的操作风格是介于上述二者之间,且不同厂商为了照顾不同的用户,其发行版的操作风格有存在差异。
另外要清楚,使用TCP/IP协议的应用程序来实现网络进程间的通信的编程接口有BSDUnix的套接字(BSD socket)和System V Unix的TLI,不过后者已经被淘汰。
2. Poxis和System V
System V的概念如上所述。Posix是Portable Operating System Interface(可移植性操作系统接口)的简称,是一个电气与电子工程学会即IEEE开发的一系列标准,目的是为运行在不同操作系统的应用程序提供统一的接口,实现者是不同的操作系统内核。
将这两个名词放在一起讨论的一般是在Linux的进程间通信中,如在信号量编程中,有Posix信号量和System V信号量。它们都可以用于进程或者线程间的同步。然而,Posix信号量是基于内存的,即信号量值是放在共享内存中的,它使与文件系统中的路径名对应的名字来标识。当我们谈论“Posix 信号量”时,所指的是单个计数信号量。在Linux操作系统中,Posix信号量(共享内存、消息队列)可以通过ipcs命令查看。Posix信号量多用于进程间通信。
System v信号量测试基于内核的,它放在内核里面,要使用System V信号量需要进入内核态,所以在多线程编程中一般不建议使用System V信号量,因为线程相对于进程是轻量级的,从操作系统的调度开销角度看,如果使用System V信号量会使得每次调用都要进入内核态,丧失了线程的轻量优势。当我们讨论“System v信号量”时,所指的是计数信号量集。