STREAMS
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/05/07 14:07 UTC 版)
ナビゲーションに移動 検索に移動STREAMSは、UNIX System V のキャラクタデバイスの実装フレームワークである。
STREAMS は、カーネルやユーザ空間プロセスとデバイスドライバとの全二重双方向のキャラクタI/Oを実装するモジュール性の高いアーキテクチャとして設計された。端末I/Oやネットワークサブシステムの開発によく使われた。System V Release 4 では、全ての端末インタフェースがSTREAMSを使って実装された[1]。
STREAMS は、プロトコルスタックを実装するためのカーネル内の仕組みである。たとえば、TCP/IPでは、TCP や IP がそれぞれSTREAMSモジュールとして実装される。STREAMSモジュールには上位層への双方向接続ポートと下位層への双方向接続ポートを持つ。STREAMSモジュールは基本的には上位層や下位層のことを全く知らなくてもよい構造になっていて、TCPモジュールのルーチンがIPのルーチンを直接コールすることはない。
STREAMS はBSDのソケットAPIと対抗する技術だが、STREAMSを使ったシステムでは常にソケットのインタフェースも提供された。STREAMS はソケットよりも複雑だが、柔軟性も高い。
歴史
STREAMS はデニス・リッチーが Version 8 Unix に導入したのが最初であり、その時点で端末I/OとTCP/IPプロトコルに使われていた。当時のUNIXの入出力システムコール(open、close、read、write、ioctl)に新たな機能を導入しようとする試みであったが[2]、その応用は端末I/Oとパイプ状のI/O意味論を提供するプロトコル群に限定されていた。その後、Robert Israel、Gil McGrath、Dave Olander、Her-Daw Che、 Maury Bach らが System V Release 3 に移植し、様々なトランスポート層プロトコル(TCP/IP、ISO Class 4 transport、SNA LU 6.2、RFS で使う AT&T NPACK protocol)を STREAMS で実装できるよう拡張された[3]。これはまず、UNIX System V Release 3 の Network Support Utilities (NSU) パッケージと共にリリースされた[4]。この時点で、putmsg、getmsg、poll というシステムコールが追加された。これらはそれぞれ、BSDソケットの send、recv、select システムコールに相当するが[5]、名前空間の衝突を避けるために別の名前を付けている[6]。System V Release 4 では、STREAMS は端末I/Oフレームワークやパイプの実装にも使われ、双方向パイプやファイル記述子の受け渡しといった便利な機能が追加された[3]。UNICOSへの移植も行われている。
ベル研究所によるオリジナルの実装[7]は遅いという悪評があったが、SVR3 やその後の実装では特に性能が悪いという話はない。
SVR3への移植と並行して、AT&T はOSI参照モデルの各層(2層から4層まで)についてのSTREAMSメッセージパッシングの(プロトコルに依存しない)ガイドラインを開発した。
- データリンク層 - DLPI (Data Link Provider Interface)[8]
- ネットワーク層 - NPI (Network Provider Interface)[9]
- トランスポート層 - TPI (Transport Provider Interface)[10]
しかし、ネットワーク層とトランスポート層の間はプロトコルスタックの実装に依存する部分が大きく、また上位層 (5-7) はカーネルでは実装されないことから、データリンク層[8]とトランスポート層[11]がそれぞれの上位層に見せるSTREAMSインタフェースだけが後にX/Openによって標準化された。トランスポート層の実装に依存しないメッセージパッシング型のAPIとして Transport Layer Interface (TLI) が定義され、後に X/Open Transport Interface (XLI) として採用された。また、セッション層、プレゼンテーション層、アプリケーション層をサポートするライブラリが定義され[12]、後に The Open Groupが標準化した[13]。
STREAMS は Single UNIX Specification のバージョン1(UNIX95)とバージョン2(UNIX98)では必須とされていたが、BSDやLinuxでは採用されなかったためバージョン3(UNIX03)ではオプションとなっている。
実装
STREAMS は主に System V 系 UNIX で使われたが、他にも以下のような実装が存在する。
- Plan 9 も当初は STREAMS によるネットワーク機能を持っていたが、第3版へ移行する過程で単純なI/Oキューに変更された。
- Mentat という企業がSTREAMSの実装を開発している。
- ノベルはNetWareのTCP/IPスタックの実装にMentat版のSTREAMSを使っていた。
- アップルコンピュータは Mentatの実装したSTREAMSのライセンス提供を受け、MacのOS 漢字Talk 7.5.2以降にネットワークシステム Open Transport の一部として導入した。STREAMS アーキテクチャは Mac OS X のClassic環境に残っている(ただし、macOSネイティヴのネットワークアーキテクチャはBSDのsocketである)。
- Linuxカーネルでは、開発者らが STREAMS 技術を不適切と見ているため実装されていない。代わりに STREAMS 操作をソケット操作に変換する互換レイヤーが存在する[14]。
- FreeBSD はSVR4とのバイナリ互換性のためにSTREAMS関連システムコールをサポートしている。
- Windows NT のカーネルにはSTREAMSの完全移植版である streams.sys があった。DDK文書にはSTREAMSについての章があったが、NT4のDDKでは obsolete とされていた。
脚注
- ^ Goodheart 1994, pp. 51-53,403-527
- ^ Goodheart 1994, pp. 52–53
- ^ a b Goodheart 1994, p. 17
- ^ Goodheart 1994, p. 51
- ^ Ritchie 1984
- ^ Goodheart 1994
- ^ Dennis M. Ritchie. “A Stream Input-Output System”. AT&T Bell Laboratories Technical Journal 63, No. 8 Part 2 (AT&T): 1897-1910 2006年5月19日閲覧。.
- ^ a b UNIX International (August 20, 1991), Data Link Provider Interface (DLPI) Specification, UNIX International Publication (Revision 2.0.0, Draft 2 ed.), Parsippany, N.J.: UNIX International Press 2009年7月27日閲覧。
- ^ UNIX International (August 17, 1992), Network Provider Interface (NPI) Specification, UNIX International Publication (Revision 2.0.0, Draft 2 ed.), Parsippany, N.J.: UNIX International Press 2009年7月27日閲覧。
- ^ UNIX International (December 10, 1992), Transport Provider Interface Specification, UNIX International Publication (Revision 1.5, Draft 2 ed.), Parsippany, N.J.: UNIX International Press 2009年7月27日閲覧。
- ^ Open Group (1999), “Transport Provider Interface (TPI) Specification”, Open Group CAE Specification (Berkshire, UK: Open Group Publication)
- ^ UNIX International (October 25, 1990), ACSE/Presentation Library Interface (APLI) Specification, UNIX International Publication (Draft ed.), Parisppany, N.J.: UNIX International Press
- ^ Open Group (September 1993), “ACSE/Presentation Services API (XAP)”, X/Open CAE Specification (Berkshire, UK: X/Open Company Limited) XAP (c303), ISBN 1-872630-91-X
- ^ Alan Cox, Streams and Linux, Linux Kernel Mailing List, 28 June 1998
- ^ LiS: Linux STREAMS, Francisco Ballesteros, Linux Journal, Sat 01 May 1999
- ^ OpenSS7 download page
参考文献
- Goodheart, Berny; James Cox (1994), The magic garden explained: the internals of UNIX System V Release 4, an open-systems design, Australia: Prentice Hall, ISBN 0-13-098138-9
- Pajari, George (1992) [1991], Writing UNIX Device Drivers (2nd Printing, 1st ed.), Reading, MA: Addison-Wesley, ISBN 0-201-52374-4
- Ritchie, Dennis M. (October 1984). “A Stream Input-Output System”. AT&T Bell Laboratories Technical Journal 63, No. 8 Part 2 (AT&T): 1897–1910 2006年5月19日閲覧。.
- Stevens, W. Richard (1993), Advanced Programming in the UNIX Environment (15th Printing, 1st ed.), Reading, MA: Addison-Wesley, ISBN 0-201-56317-7
- Thomas, Rebecca; Lawrence R. Rogers, Jean L. Yates (1986), Advanced Programmers Guide to UNIX System V, Berkeley, CA: Osborne McGraw-Hill, ISBN 0-07-881211-9
- Waite Group (1987), Mitchel Waite, ed., UNIX Papers (2nd Printing, 1st ed.), Indianapolis, IN: Howard W. Sams & Company, ISBN 0-672-22578-6
外部リンク
- streamsのページへのリンク