Information AboutStreams |
| CATEGORIES ABOUT STREAMS | |
| computer networking | |
| inter-process communication | |
| system v | |
| unix | |
| SHOPPER'S DELIGHT | |
|
STREAMS is the Unix System V networking architecture. It is an alternative to the Berkeley Sockets API , although all modern systems that provide STREAMS provide sockets as well. While not as popular as sockets have been, due to its added complexity, it provides a lot of flexibility that sockets lack. It was designed as a modular architecture for implementing networking services. STREAMS was first introduced in Eighth Edition Research Unix by Dennis Ritchie, where it was used for the terminal IO subsystem and the TCP/IP protocol. This version heroically attempted to fit the new functionality under the existing device I/O system calls (open/close/read/write/ioctl), which limited its application to terminal I/O and protocols providing pipe-like I/O semantics. It was ported to System V Release 3 (SVR3) by Robert Israel, Gil McGrath, Dave Olander, Her-Daw Che, and Maury Bach as part of a wider framework intended to support a variety of transport protocols, including TCP/IP, ISO Class 4 transport, SNA LU 6.2, and the AT&T NPACK protocol (used in RFS ). This port added the putmsg/getmsg/poll system calls, which are near-equivalents to the senv/recv/select calls from Berkeley sockets. In subsequent releases, STREAMS was used for the terminal I/O framework and pipes, providing useful new functionality like bi-directional pipes and File Descriptor passing. While the original Bell Labs research implementation {Link without Title} was criticized for slowness, the System V Release 3 and later third-party implementations did not suffer from serious speed issues. Concurrent with the System V Release 3 port, AT&T developed protocol-independent STREAMS message passing guidelines for the link, network, transport, and Session Layer s of the OSI Model (layers 2-5). Due to the typically close implementation coupling of the network and transport protocols in a given Protocol Stack , and the typical practice of implementing layers 5-7 outside of the Kernel , only the link and Transport Layer interfaces have been widely adopted in practice. In conjunction with the transport message passing model, the Transport Layer Interface (later adopted as the X/Open Transport Interface) was defined to provide a transport protocol-independent API for application development. The TLI/XTI API is roughly equivalent to BSD sockets, and most systems now provide a sockets emulation for use with the TCP/IP protocol stack (either on top of the TLI/XTI API or as an alternative API on top of the underlying STREAMS transport message passing model). STREAMS has mostly been used in the Unix world; however, Apple Computer licensed the Mentat implementation of STREAMS for use on the MacOS starting in version 7.5.2, as part of their OpenTransport networking system. The STREAMS architecture remains in the Classic environment on Mac OS X , but the native networking architecture is essentially Berkeley sockets. It is rumored that an early port of TCP/IP for Windows NT by Lachman Associates included a full implementation of the System V Release 3 STREAMS model. An important concept in STREAMS is the ability to push drivers together to form a stack. These drivers are custom code modules that can modify the functionality of a network interface or other device. Several of these drivers can be chained together in order. This potentially provides a lot of power. |