Software flow control is a method of
flow control used in computer
data links, especially
RS-232 serial. It uses special codes, transmitted
in-band, over the primary communications channel. These codes are generally called XOFF and XON (from "transmit off" and "transmit on", respectively). Thus, "software flow control" is sometimes called "XON/XOFF flow control". This is in contrast to flow control via dedicated
out-of-band signals — "
hardware flow control" — such as
RS-232 RTS/CTS.
Representation
For systems using the
ASCII
ASCII ( ), an acronym for American Standard Code for Information Interchange, is a character encoding standard for representing a particular set of 95 (English language focused) printable character, printable and 33 control character, control c ...
character code, XOFF is generally represented using a
character or
byte
The byte is a unit of digital information that most commonly consists of eight bits. Historically, the byte was the number of bits used to encode a single character of text in a computer and for this reason it is the smallest addressable un ...
with decimal value 19; XON with value 17.
The ASCII standard does not reserve any
control character
In computing and telecommunications, a control character or non-printing character (NPC) is a code point in a character encoding, character set that does not represent a written Character (computing), character or symbol. They are used as in-ba ...
s for use as XON/XOFF specifically. However, it does provide four generic "device control" characters (DC1 through DC4). The
Teletype Model 33 ASR adopted two of these, DC3 and DC1, for use as XOFF and XON, respectively. This usage was copied by others, and is now a
de facto standard. The keyboard equivalents of for XOFF, and for XON, also derive from this usage.
Mechanism
When one end of a data link is unable to accept any more data (or approaching that point), it sends XOFF to the other end. The other end receives the XOFF code, and suspends
transmission. Once the first end is ready to accept data again, it sends XON, and the other end resumes transmission.
For example, one may imagine a
computer
A computer is a machine that can be Computer programming, programmed to automatically Execution (computing), carry out sequences of arithmetic or logical operations (''computation''). Modern digital electronic computers can perform generic set ...
sending data to a slow
printer. Since the computer is faster at sending data than the printer can print it, the printer falls behind and approaches a situation where it would be overwhelmed by the data. The printer reacts to this situation by sending XOFF to the computer, which temporarily stops sending data. When the printer is again ready to receive more data, it sends XON to the computer, which starts sending data again.
XOFF/XON can be employed in both directions, for example, two
teleprinters connected to each other.
Comparison with hardware flow control
The principal advantage of software flow control is the reduction in the number of
electrical conductors between sender and receiver. Given a
common ground, only two signals are needed, one to send and the other to receive. Hardware flow control requires additional wires between the two devices. It also requires specific hardware implementation, which had more significant costs in earlier days of computing (i.e., 1960s and 70s).
However, software flow control is not without its problems. The most important drawback is that software flow control is less reliable. Sending XOFF requires at least one character time to transmit, and may be queued behind already-transmitted data still in buffers. Hardware signals may be asserted almost instantaneously, and out-of-order.
As the name "software flow control" implies, flow control using this method is ''usually'' implemented in software (or
firmware
In computing
Computing is any goal-oriented activity requiring, benefiting from, or creating computer, computing machinery. It includes the study and experimentation of algorithmic processes, and the development of both computer hardware, h ...
), which can cause further delays in XOFF response. These delays can lead to data corruption due to
buffer overruns. Hardware flow control, on the other hand, is typically under the direct control of the transmitting
UART, which is able to cease transmission immediately, without the intervention of higher levels. To handle the latency caused by builtin
FIFOs, more advanced UARTs, like the 16950, provide "on-chip" software flow control.
UARTs that lack such support, like the
16550, may suffer from buffer overruns when using software flow control, although this can be somewhat mitigated by disabling the UART's FIFO.
Finally, since the XOFF/XON codes are sent in-band, they cannot appear in the data being transmitted without being mistaken for flow control commands. Any data containing the XOFF/XON codes thus must be encoded in some manner for proper transmission, with corresponding overhead. This is frequently done with some kind of
escape sequence
In computer science, an escape sequence is a combination of characters that has a meaning other than the literal characters contained therein; it is marked by one or more preceding (and possibly terminating) characters.
Examples
* In C and ma ...
. For printing devices that directly interpret ASCII codes, this is not a large problem, because the XON and XOFF codes use
ASCII
ASCII ( ), an acronym for American Standard Code for Information Interchange, is a character encoding standard for representing a particular set of 95 (English language focused) printable character, printable and 33 control character, control c ...
"device control" code numbers.
Applications
Software flow control is used extensively by low-speed devices, especially older
printers and
dumb terminal
A computer terminal is an electronic or electromechanical hardware device that can be used for entering data into, and transcribing data from, a computer or a computing system. Most early computers only had a front panel to input or display ...
s, to indicate they are temporarily unable to accept more data. Typically, this is due to a combination of limited
output
Output may refer to:
* The information produced by a computer, see Input/output
* An output state of a system, see state (computer science)
* Output (economics), the amount of goods and services produced
** Gross output in economics, the valu ...
rate and any
buffers being full. Some terminal control packages, such as
termcap, employ "padding" (short delays using millisecond granularity
) to allow such equipment sufficient time to perform the requested actions without the need to assert XOFF.
XOFF/XON are still sometimes used manually by computer operators, to pause and restart output which otherwise would
scroll
A scroll (from the Old French ''escroe'' or ''escroue''), also known as a roll, is a roll of papyrus, parchment, or paper containing writing.
Structure
A scroll is usually partitioned into pages, which are sometimes separate sheets of papyru ...
off the display too quickly.
Terminal emulator
A terminal emulator, or terminal application, is a computer program that emulates a video terminal within some other display architecture. Though typically synonymous with a shell or text terminal, the term ''terminal'' covers all remote term ...
software generally implements XOFF/XON support as a basic function. This generally includes the
system console on modern
Unix
Unix (, ; trademarked as UNIX) is a family of multitasking, multi-user computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, a ...
and
Linux
Linux ( ) is a family of open source Unix-like operating systems based on the Linux kernel, an kernel (operating system), operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically package manager, pac ...
machines, as well as
GUI emulators such as
xterm
xterm is the standard terminal emulator for the X Window System. It allows users to run programs which require a command-line interface.
If no particular program is specified, xterm runs the user's Unix shell, shell. An X display device, dis ...
and the
Win32 console.
Robust XON is a technique to restart communication, just in case it was stopped by an accidentally received XOFF. The receiving unit sends periodic XON characters when it can receive data, and the line is idle. One common use is by serial printers (like
HP LaserJet II) to indicate they are online and ready to receive data. The XON is sent every 1 to 30 seconds depending on the printer's firmware design.
See also
*
Ethernet flow control
References
* {{cite web , url=http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=bpl06142&locale=en_US , title=HP LaserJet IIP and IIP Plus Printers - Control Panel Keys and Menus , publisher=
Hewlett-Packard
The Hewlett-Packard Company, commonly shortened to Hewlett-Packard ( ) or HP, was an American multinational information technology company. It was founded by Bill Hewlett and David Packard in 1939 in a one-car garage in Palo Alto, California ...
, archiveurl=https://web.archive.org/web/20060509012616/http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=bpl06142&locale=en_US , archivedate=May 9, 2006
Flow control (data)