軟件流控制(Software flow control)是在計算機數據鏈路中的一種流控制英語flow control (data)方法,特別適用於RS-232串口通信。採用特殊字符來傳輸帶內信令。特殊編碼字符稱作XOFFXON(分別表示"transmit off" 與 "transmit on")。因此,也被稱作「XON/XOFF流控制」。與之相對的是專用的帶外數據信令,如RS-232 RTS/CTS

表示

編輯

使用ASCII字符集,XOFF一般為字節值19(十進制),XON為字節值17。

Teletype Model 33英語Teletype Model 33 ASR採用了ACSII碼控制字符DC3 與 DC1分別用作 XOFF 與 XON。從而成為事實標準。鍵盤輸入Ctrl+S 產生 XOFF, Ctrl+Q產生 XON。

XOFF/XON 的ASCII表示
碼的名字 含義 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作為基本功能。包括UnixLinux系統控制台GUI模擬器如xtermWin32 console

數據接收方可以把發送XON作為一項魯棒技術,在數據發送方偶然(噪聲)遇到XOFF後能恢復工作。還常用於表示打印機(如HP LaserJet II)表示在線可以接收數據。

參見

編輯

參考文獻

編輯
  1. ^ The Termcap Library - Describe Padding. www.gnu.org. [2018-12-31]. (原始內容存檔於2019-09-18).