本節書摘來自異步社群《unix網絡程式設計 卷2:程序間通信(第2版)》一書中的第1章,第1.7節,作者:【美】w. richard stevens著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
有關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線程。