- STREAMS
In
computer networking , STREAMS is the native framework in Unix System V for implementingcharacter device s.STREAMS was designed as a modular architecture for implementing full-duplex, bidirectional character I/O between kernel or user space processes and device drivers. Its most frequent uses have been in developing terminal I/O and networking subsystems. In System V Release 4, the entire terminal interface was reimplemented using STREAMS [harv|Goodheart|1994|pp=51-53,403-527] . An important concept in STREAMS is the ability to push drivers — custom code modules that can modify the functionality of a network interface or other device — together to form a stack. Several of these drivers can be chained together in order.
STREAMS is an alternative to the
Berkeley sockets API, although all modern systems that provide STREAMS provide sockets (Sockets) as well. Although STREAMS is more complex than sockets,Fact|date=July 2008 it provides more flexibility than sockets. However, it is rarely used in modern software.Fact|date=July 2008History
STREAMS was first introduced in Eighth Edition Research Unix by
Dennis Ritchie , where it was used for the terminal I/O subsystem and theTCP/IP protocol. This version heroically attempted to fit the new functionality under the existing device I/O system calls ("open", "close", "read", "write", and "ioctl"), and its application was limited to terminal I/O and protocols providing pipe-like I/O semantics. It was ported to System V Release 3 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", and "poll"system call s, which are nearly equivalent to the "send", "recv", and "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 andfile descriptor passing. A port forUnicos was also produced.While the original
Bell Labs research implementation [cite paper | url=http://cm.bell-labs.com/cm/cs/who/dmr/st.html | title=A Stream Input-Output System | publisher=AT&T | work=AT&T Bell Laboratories Technical Journal 63, No. 8 Part 2 | pages=1897-1910 | author=Dennis M. Ritchie | accessdate=2006-05-19] was criticized for slowness,Fact|date=July 2008 the System V.3 and later third-party implementations did not suffer from serious speed issues.Fact|date=July 2008Concurrent with the System V.3 port,
AT&T developed protocol-independent STREAMS message passing guidelines for the link, network, transport, andsession layer s of theOSI model (layers 2-5). Due to the typically close implementation coupling of the network and transport protocols in a givenprotocol stack , and the typical practice of implementing layers 5-7 outside of the kernel, only the link andtransport layer interfaces have been widely adopted in practice. In conjunction with the transport message passing model, theTransport Layer Interface (later adopted as theX/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 was required for conformance with the
Single UNIX Specification versions 1 (UNIX 95) and 2 (UNIX 98), but has been marked as optional in version 3 (UNIX 03).Implementations
STREAMS has mostly been used in the System V Unix world; however, other implementations exist:
*Plan 9 originally used a multi-processor variant of Research Unix's Streams. During the transition to the third edition of Plan 9, Streams were further simplified to simple I/O queues.
*Apple Computer licensed the Mentat implementation of STREAMS for use on theMac OS starting in version 7.5.2, as part of theirOpen Transport networking system. The STREAMS architecture remains in the Classic environment on the PowerPC version ofMac OS X , but the native networking architecture is essentially Berkeley sockets.
*Linux has STREAMS in the form of LiS [ [http://www2.linuxjournal.com/article/3086 LiS: Linux STREAMS] , Francisco Ballesteros, "Linux Journal", Sat01 May 1999 ] [ [http://lis.wanware.com LiS home page] ] and more recently as OpenSS7 Fast STREAMS [ [http://www.openss7.org/download.html OpenSS7 download page] ] . STREAMS functionality is not included with the Linux kernel; the kernel developers consider it technically inadequate, and thecompatibility layer s in Linux for other operating systems convert STREAMS operations into sockets as early as possible Alan Cox, [http://lkml.org/lkml/1998/6/28/138 Streams and Linux] , Linux Kernel Mailing List,28 June 1998 ] .
*It is rumored that an early port of TCP/IP forWindows NT by Lachman Associates included a full implementation of the System V.3 STREAMS model.
*Novell Netware also utilizes STREAMS in its TCP/IP stack, licensed from Mentat.Notes
References
*cite book
author=Berny Goodheart
coauthors=James Cox
title=The magic garden explained: the internals of UNIX® System V Release 4, an open-systems design
year=1994
location=Australia
publisher=Prentice Hall
isbn=0-13-098138-9
*cite book
author=George Pajari
year=1992
edition=2nd Printing
origyear=1991
title=Writing UNIX® Device Drivers
location=Reading, MA
publisher=Addison-Wesley
isbn=0-201-52374-4
*cite book
others=Managing Editor: Mitchel Waite
author=The Waite Group (ed.)
year=1987
edition=2nd Printing
title=UNIX® Papers
location=Indianapolis, IN
publisher=Howard W. Sams & Company
isbn=0-672-22578-6
*cite book
author=W. Richard Stevens
title=Advanced Programming in the UNIX® Environment
publisher=Addison-Wesley
location=Reading, MA
year=1993
edition=1st Edition, 15th Printing
isbn=0-201-56317-7
*cite book
author=Rebecca Thomas
coauthors=Lawrence R. Rogers, Jean L. Yates
publisher=Osborne McGraw-Hill
location=Berkeley, CA
title=Advanced Programmers Guide to UNIX® System V
year=1986
isbn=0-07-881211-9External links
* [http://www.cs.arizona.edu/computer.help/policy/DIGITAL_unix/AA-PS2WD-TET1_html/netprog6.html The STREAMS framework in Digital UNIX] — from the Digital UNIX Network Programmer's Guide
* [http://docs.sun.com/app/docs/doc/806-6546 Sun STREAMS Programming Guide]
Wikimedia Foundation. 2010.