STREAMS

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

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/OTCP/IPプロトコルに使われていた。当時のUNIXの入出力システムコールopenclosereadwriteioctl)に新たな機能を導入しようとする試みであった。その後、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 で実装できるよう拡張された。この時点で、putmsggetmsgpoll というシステムコールが追加された。これらはそれぞれ、BSDソケットの sendrecvselect システムコールに相当する。その後、STREAMS は端末I/Oやパイプの実装にも使われ、双方向パイプやファイル記述子の受け渡しといった便利な機能が追加された。

ベル研究所によるオリジナルの実装[2]は遅いという悪評があったが、SVR3 やその後の実装では特に性能が悪いという話はない。

SVR3への移植と並行して、AT&TOSI参照モデルの各層(2層から5層まで)についてのSTREAMSメッセージパッシングの(プロトコルに依存しない)ガイドラインを開発した。しかし、ネットワーク層とトランスポート層の間はプロトコルスタックの実装に依存する部分が大きく、また上位層はカーネルでは実装されないことから、トランスポート層と上位層の間のインタフェースだけが広く採用されることとなった。これが Transport Layer Interface (TLI) である(後に X/Open Transport Interface (XLI) として採用された)。TLI/XLI は BSDソケットとほぼ等価である。

STREAMS は Single UNIX Specification のバージョン1(UNIX95)とバージョン2(UNIX98)では必須とされていたが、バージョン3(UNIX03)ではオプションとなっている。

実装

STREAMS は主に System V 系 UNIX で使われたが、他にも以下のような実装が存在する。

  • Plan 9 も STREAMS によるネットワーク機能を持っていた。
  • アップルコンピュータ社は Mentat 社の実装したSTREAMSのライセンス提供を受け、MacのOS 漢字Talk 7.5.2以降にネットワークシステム Open Transport の一部として導入した。STREAMS アーキテクチャは Mac OS Xクラシック環境に残っている。(ただし、Mac OS XネイティヴのネットワークアーキテクチャはBerkeleysocketである。)
  • Linux での STREAMS 実装として、LiS [3] や OpenSS7 Fast STREAMS がある[4]Linuxカーネルでは、開発者らが STREAMS 技術を不適切と見ているため実装されていない。代わりに STREAMS 操作をソケット操作に変換する互換レイヤーが存在する[5]

脚注

  1. ^ Goodheart, Benny (1994年). The Magic Garden Explained:The Interals of UNIX System V Release 4. Prentice Hall, 51-53, 403-527. ISBN 0-13-098138-9. 
  2. ^ Dennis M. Ritchie. “A Stream Input-Output System”. 1897-1910 AT&T. 2006年5月19日 閲覧。
  3. ^ LiS: Linux STREAMS, Francisco Ballesteros, Linux Journal, Sat 01 May 1999
  4. ^ OpenSS7 download page
  5. ^ Alan Cox, Streams and Linux, Linux Kernel Mailing List, 28 June 1998

外部リンク

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net