软件流控制
软件流控制(Software flow control)是在计算机数据链路中的一种流控制方法,特别适用于RS-232串口通信。采用特殊字符来传输带内信令。特殊编码字符称作XOFF与XON(分别表示"transmit off" 与 "transmit on")。因此,也被称作“XON/XOFF流控制”。与之相对的是专用的带外数据信令,如RS-232 RTS/CTS。
表示
编辑使用ASCII字符集,XOFF一般为字节值19(十进制),XON为字节值17。
Teletype Model 33 ASR采用了ACSII码控制字符DC3 与 DC1分别用作 XOFF 与 XON。从而成为事实标准。键盘输入Ctrl+S 产生 XOFF, Ctrl+Q产生 XON。
码的名字 | 含义 | ASCII | 十进制 | 十六进制 | 键盘输入 |
---|---|---|---|---|---|
XOFF | 暂停传输 | DC3 | 19 | 13 | Ctrl+S |
XON | 恢复传输 | DC1 | 17 | 11 | Ctrl+Q |
机制
编辑当一端的数据连接不再能接受更多数据(或者接近这个状态),它发送XOFF字节给另一端。另一端收到XOFF字节,挂起数据发送。一端如果准备好继续接收数据,它发送XON字节给另一端,另一端恢复数据发送。
例如,假使有一台电脑发送数据给一台低速打印机。 鉴于电脑发送数据的速率快于打印机打印的速率,打印机会落后并有可能被数据淹没。在此种情形下,打印机会发送XOFF信号给电脑端,令其暂停发送数据。当打印机准备好继续接受数据时,它会发送一个XON信号给电脑,让其继续传输数据。
XOFF/XON 能被用于双向传输,例如两台互连的电传打印机。
比较硬件流控制
编辑软件流控制的优点是降低了收发双方之间的电路导体数量。给定一个共同的电路接地,只需要两条电路分别用于收发。也不需要额外的特定硬件实现。这对于早期(1960年代与70年代)的计算机来说很有意义。
软件流控制的问题是发送XOFF需要至少一个字符的时间,而且需要排在对方已经接收的数据之后处理。而硬件流控制可以通过UART及时确认信令。
应用
编辑软件流控制广泛用于低速设备,特别是打印机与哑终端,用以指出它们临时暂停接收数据。某些终端控制包,如termcap,采用"padding" (毫秒级的短暂延迟[1])来给设备流出足够处理时间而不必插入XOFF。
XOFF/XON 也用于让操作者手工暂停与恢复滚屏。
终端模拟器软件通常实现XOFF/XON作为基本功能。包括Unix与Linux的系统控制台。GUI模拟器如xterm与Win32 console。
数据接收方可以把发送XON作为一项鲁棒技术,在数据发送方偶然(噪声)遇到XOFF后能恢复工作。还常用于表示打印机(如HP LaserJet II)表示在线可以接收数据。
参见
编辑参考文献
编辑- ^ The Termcap Library - Describe Padding. www.gnu.org. [2018-12-31]. (原始内容存档于2019-09-18).