軟件流控制
軟件流控制(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).