RFC 103 UNKNOWN PROTOCOLS · CONTROL · INTERRUPTS

Implementation of Interrupt Keys

A proposed marker to synchronize a remote interrupt with keyboard input.

On rfc-editor.org ↗
PUBLISHED
February 1971
AUTHORS
R.B. Kalin
STREAM
Legacy
INTERRUPT SYNC CHARACTER
Octal 200
RESERVED CONTROL CODES
Octal 201 to octal 377
DOI
10.17487/RFC0103

RFC text

Original text · RFC Editor View on rfc-editor.org ↗
                                                NWG RFC 103
                                                NIC 5764


IMPLEMENTATION OF INTERRUPT KEYS


R B Kalin
MIT Lincoln Laboratory
24 Feb 1971


    The current protocol specifications contain a serious logical
error in the implementation of the program interrupt function.  This
paper discusses the problem and offers a solution that is simple to
implement.

THE PROBLEM

    As found on most time-sharing systems the program interrupt key,
elsewhere known as the break key, or help request button, has two
functions.  It suspends temporarily the user process being run, and it
switches the keyboard input stream to a dormant supervisory process.
Unaccepted input typed prior to the interrupt request remains buffered
for the suspended user process.  Subsequent typing is sent to a
supervisory routine.

    The current NCP protocol implements only half this function.  It
pprovides, through use of INS and INR control messages, for the
suspension of a remote process, but it offers no mechanism for
notifying the remote host at what time the data stream should be
switched.  INR and INS messages are sent via the control link and
because messages on this link travel concurrently with those on the
user's keyboard input link, the receiving host can not rely on
relative arrival times as a source of synchronizing information.
Without such information the remote NCP can not know which input
characters are meant for the user process and which are meant for the
supervisory routine.

    A solution found on some systems to this problem is that of
mapping the interrupt signal into some code from the character set --
typically an ASCII control-C.  Unfortunately, this is not general
enough to be used within the ARPA network.  Some systems, eg. MULTICS,
make use of all available ASCII codes for other purposes, none are
available for such an assignment.  Even if such an assignment could be
made, there is the problem of getting the interrupt character to be
recognized by the remote host.  Buffers on that user link may be full
and the sending host may be unable to transmit the message containing

the interrupt code.  If the remote user process loops without
accepting data, there is the possibility that its input buffers will
never become free and that the message will never get through.

    A partial answer is that of providing at the serving end a
teletype scanner process that is always hungry for input.  Because all
input messages are immediately consumed, buffers remain available and
interrupt codes can get through.  Unfortunately, this implies that at
times characters must be thrown away.  After being scanned there may
be no buffer space available for them.  While not critical during
console interactions -- users can type only when the program demands
input -- this defect prevents the scanner from being driven from a
text file.


A SOLUTION

    The following defines a solution to this problem for the case of
ASCII data streams.

1) Character messages should use eight bit fields for each character
code.

2) For all of the defined ASCII character codes the left most bit in
the eight bit field shall be zero.

3) An interrupt sync character ( arbitrarilly given the code octal 200
) should be placed in the data stream at the correct point in the
typing sequence.

4) All codes from octal 201 to octal 377 are officially to be ignored
by a receiving host.  Their use is reserved for additional control
information, should it become necessary.  Attempts to use them as
additional character codes will meet with resistance from PDP-10
systems that internally pack characters into seven bit fields.  Note
that this objection can not be made against the interrupt sync
character because it is filtered out by the system and never appears
in a user's input buffer.

5) Because of the possibility that there may be an insufficient
allocation to allow the user message containing the interrupt sync
character to be sent, the INR/INS mechanism currently defined must be
kept.  An INS control message should be sent at the time an interrupt
sync character is entered into a text stream. Upon its reception by
the foreign host, the attached process should be immediately suspended
and the associated input stream should be scanned.  If possible, all
input up to the interrupt sync character should be buffered for the
suspended process.  Once the sync character is found, the stream

should be switched to the newly activated supervisory process.  If it
is not possible to buffer all of the user process's input, it can be
thrown away, and a error message returned to the user by the
supervisory process.  In either event it must be guaranteed that
outstanding input will be consumed and message buffers will be freed
so that pending character messages can be sent.

6) In the event that an interrupt sync character is received before
the matching INS, the user process should be suspended and the NCP
should wait for the INS before proceeding.

7) The function of the NCP is the above discussion can, of course, be
delegated a separate modulo, eg. a TELNET process.  If this is done,
the NCP can be transparent to message content.


COMMENTARY

    The proposed change to the second level protocol described herein
is not meant as a general solution, but rather as a specific patch to
the current NCP design with the intent of correcting a critical error.
Its more obvious deficiencies are...

1) It only works with seven bit code character streams.  No extensions
are allowed for EBCDIC, ASCII-8, or other large character sets.  No
provision is made for interrupting a process to which there is no
character stream, although the author knows of no case in which the
concept means more than closing the connection.

2) It requires the system to scan all data coming over an
interruptable connection.  Presumably this means that at the time the
connection is created, the receiving host must be told that this scan
is to be done.  Various techniques, both implicit and explicit, could
be used.

3) The technique is not immune to loss character boundaries within a
message nor can it tolerate INS control messages that do not have
matching sync characters, or vis versa.

4) It may not possible to get either the INS or the text message
containing the interrupt sync character to a remote host.  Possible
reasons include user console failure, local host failure, network
failure, blocked control link, insufficient allocation etc.  Under
such circumstances the remote process may loop indefinitely.


    The only comprehensive solution known to the interrupt
synchronization problem, those that avoid the above difficulties,

require more than minor changes to the current NCP protocol.  Unless
simpler answers are suggested, their implementation must be postponed
until the next major design revision.

       [ This RFC was put into machine readable form for entry ]
         [ into the online RFC archives by Gert Doering 4/97 ]

ISO Plain Language

On this page
PROBLEMThe NCP can suspend a remote process, but control messages on a separate link do not show where the keyboard input stream should switch to a supervisory process.
MECHANISMFor ASCII data streams, the proposal inserts an interrupt sync character, octal 200, at the interrupt point and pairs it with an INS control message.
THE TRADE-OFFThe author presents this as a specific patch, notes its limitations and says a comprehensive solution would require larger NCP changes.

§1Why Interrupts Need a Stream Marker

An interrupt key suspends the current user process and switches later keyboard input to a supervisory process. Input typed before the interrupt may remain buffered for the suspended process.

The current NCP can suspend a remote process with INS and INR control messages, but those messages travel on a separate link from keyboard input. Their arrival times therefore do not tell the receiving host which characters belong to each process.

The remote system needs to know exactly where typing changes from the user process to the supervisor. A control message on another link does not identify that position in the input stream.

§2Interrupt Sync Character and INS

For ASCII data streams, the proposal uses eight-bit fields for characters and puts an interrupt sync character with code octal 200 in the data stream at the point of interruption. Codes from octal 201 to octal 377 are to be ignored by a receiving host and reserved for possible control information.

The sender also sends an INS control message when it inserts the sync character. The foreign host immediately suspends the attached process and scans the input stream. Once it finds the marker, it switches the stream to the supervisory process; input before the marker should be buffered for the suspended process if possible.

The marker travels with the typed data, so it shows where the interrupt happened. INS tells the remote host to suspend the process and look for that marker.

§3Ordering the Marker and Control Message

The INS message is retained because there may not be enough allocation to send the text message containing the sync character. If the sync character arrives before the matching INS, the user process should be suspended and the NCP should wait for INS before proceeding.

If the host cannot buffer all input for the user process, the proposal allows it to discard that input and return an error message through the supervisory process. It requires outstanding input to be consumed and message buffers freed so pending character messages can be sent.

The separate INS message backs up the marker if the data cannot be sent yet. The receiver waits for both pieces and must free buffers so pending input can move.

§4Limits of the Proposed Patch

The author says the method works only for seven-bit character streams and does not cover EBCDIC, ASCII-8 or other larger character sets. It requires the receiving system to scan data on interruptable connections.

The method cannot handle lost character boundaries or unmatched INS messages and sync characters. If either message fails to reach the remote host, the remote process may loop indefinitely. The RFC says a comprehensive solution would require more than minor changes to the current NCP protocol.

The proposal has limits: it supports only seven-bit character streams and depends on both marker and control messages arriving in order. If one is lost, the remote process may not recover.