Annotation of researchv10dc/vol2/index/Junk/xindex.ms, revision 1.1.1.1

1.1       root        1: .so ../ADM/mac
                      2: .Tm index
                      3: .XX 48 667 "Index"
                      4: .Tm index
                      5: .TL
                      6: Index
                      7: .AU
                      8: L. L. Cherry
                      9: .2C
                     10: .NH
                     11: Introduction
                     12: .PP
                     13: The part of the
                     14: .UX
                     15: operating system that deals with terminals
                     16: and other character devices
                     17: has always been complicated.
                     18: In recent versions of the system it has become even more so, for
                     19: two reasons.
                     20: .IP 1)
                     21: Network connections require protocols more ornate than are
                     22: easily accommodated in the existing structure.
                     23: A notion of ``line disciplines'' was only partially successful,
                     24: mostly because in the traditional system only one line discipline
                     25: can be active at a time.
                     26: .IP 2)
                     27: The fundamental data structure of the traditional character I/O system,
                     28: a queue of individual characters (the ``clist''),
                     29: is costly because it accepts and dispenses characters one at a time.
                     30: Attempts to avoid overhead by bypassing the mechanism entirely
                     31: or by introducing
                     32: .I "ad hoc
                     33: routines succeeded in speeding up the
                     34: code at the expense of regularity.
                     35: .LP
                     36: Patchwork solutions to specific problems were
                     37: destroying the modularity of this part of the system.
                     38: The time was ripe to redo the whole thing.
                     39: This paper describes the new organization.
                     40: .PP
                     41: The system described here runs on about 20 machines
                     42: in the Information Sciences Research Division of Bell Laboratories.
                     43: Although it is being investigated by other parts of Bell Labs,
                     44: it is not generally available.
                     45: .Tm overview
                     46: .NH
                     47: Overview
                     48: .PP
                     49: This section summarizes the nomenclature, components, and mechanisms
                     50: of the new I/O system.
                     51: .NH 2
                     52: .Tm streams
                     53: .I "Streams
                     54: .PP
                     55: A
                     56: .I "stream
                     57: is a full-duplex connection between a user's process and a device
                     58: or pseudo-device.
                     59: It consists of several linearly connected processing modules,
                     60: and is analogous to a Shell pipeline, except that
                     61: data flows in both directions.
                     62: The modules in a stream communicate almost exclusively
                     63: by passing messages to their neighbors.
                     64: Except for some conventional variables used for flow control, modules do not
                     65: require access to the storage of their neighbors.
                     66: Moreover, a module provides only one entry point to each neighbor, namely
                     67: a routine that accepts messages.
                     68: .PP
                     69: At the end of the stream closest to the process
                     70: is a set of routines that provide the interface to the rest of the system.
                     71: A user's
                     72: .I "write
                     73: and
                     74: I/O control requests are turned into messages sent to the stream,
                     75: and
                     76: .I "read
                     77: requests take data from the stream and pass it to the user.
                     78: At the other end of the stream is a 
                     79: device driver module.
                     80: Here, data arriving from the stream is sent to the device;
                     81: characters and state transitions detected by the device are
                     82: composed into messages and sent into the stream towards the user program.
                     83: Intermediate modules process the messages in various ways.
                     84: .PP
                     85: The two end modules in a stream become connected automatically when
                     86: the device is opened;
                     87: intermediate modules are attached dynamically by request of the user's program.
                     88: Stream processing modules are
                     89: symmetrical; their read and write interfaces are identical.
                     90: .NH 2
                     91: .Tm queues
                     92: .I "Queues
                     93: .PP
                     94: Each stream processing module consists of a pair of
                     95: .Tm queues
                     96: .I "queues,
                     97: one for each direction.
                     98: A queue comprises not only a data queue proper, but also two routines
                     99: and some status information.
                    100: One routine is the
                    101: .I "put procedure,
                    102: which is called by its neighbor
                    103: to place messages on the data queue.
                    104: The other, the
                    105: .I "service procedure,
                    106: is scheduled to execute whenever there is work for it to do.
                    107: The status information includes a pointer to the next queue downstream,
                    108: various flags, and a pointer to additional state information required
                    109: by the instantiation of the queue.
                    110: .Tm queues
                    111: Queues are allocated in such a way that the routines associated with
                    112: one half of a stream module may find the queue associated with the other half.
                    113: (This is used, for example, in generating echos for terminal input.)
                    114: .NH 2
                    115: .Tm message blocks
                    116: .I "Message blocks
                    117: .Tm queues
                    118: .PP
                    119: The objects passed between queues are blocks obtained from an allocator.
                    120: Each contains a
                    121: .I "read pointer,
                    122: a
                    123: .I "write pointer,
                    124: and a
                    125: .I "limit pointer,
                    126: which specify respectively the beginning of information being passed, its end,
                    127: and a bound on the extent to which the write pointer may be increased.
                    128: .PP
                    129: The header of a block specifies its type; the most common blocks contain
                    130: data.
                    131: There are also control blocks of various kinds,
                    132: all with the same form as data blocks and obtained from the same
                    133: allocator.
                    134: For example, there are control blocks to introduce delimiters
                    135: into the data stream, to pass user I/O control requests, and to announce
                    136: special conditions such as line break and carrier loss on terminal
                    137: devices.
                    138: .PP
                    139: Although data blocks arrive in discrete units
                    140: at the processing modules,
                    141: boundaries between them are semantically insignificant;
                    142: standard subroutines may try to coalesce adjacent
                    143: data blocks in the same queue.
                    144: Control blocks, however, are never coalesced.
                    145: .NH 2
                    146: .Tm scheduling
                    147: .I "Scheduling
                    148: .PP
                    149: Although each queue module behaves in some ways like a separate process,
                    150: it is not a real process; the system saves no state information
                    151: for a queue module that is not running.
                    152: In particular queue processing routines do not block when they cannot proceed,
                    153: but must explicitly return control.
                    154: A queue may be
                    155: .I "enabled
                    156: by mechanisms described below.
                    157: When a queue becomes enabled, the system will, as soon as convenient,
                    158: call its service procedure entry,
                    159: which removes successive blocks
                    160: from the associated data queue, processes them, and places them on the
                    161: next queue by calling its put procedure.
                    162: When there are no more blocks to process, or when the next queue becomes
                    163: full, the service procedure returns to the system.
                    164: Any special state information must be saved explicitly.
                    165: .PP
                    166: Standard routines make enabling of queue modules largely automatic.
                    167: For example, the routine that puts a block on a queue
                    168: enables the queue service routine if the queue was empty.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.