Vyšlo v týdeníku CHIPweek č. 27/95, 1. listopadu 1995
Vytištěno z adresy: http://www.earchiv.cz/a95/a527k130.php3

Flow Control

Když spolu komunikují dva subjekty, je vždy velmi důležité, aby jeden z nich nezahltil toho druhého - tedy aby jej nedostal do takového stavu, ve kterém příjemce již nestíhá správně zužitkovávat to, co mu druhá strana posílá, a musí to buď ihned zahazovat, nebo jinak ignorovat. Nejmarkantnější je tento problém zřejmě v situaci, kdy vzájemně komunikují dva různě výkonné (a hlavně různě rychlé) subjekty - například velmi rychlý počítač v roli odesilatele, a relativně pomalý počítač v roli příjemce. Pak je vcelku zřejmé, že rychlejší počítač by se měl zajímat o to, zda pomalejší počítač „stíhá" korektním způsobem přijímat jeho data, a v případě potřeby se přizpůsobit rychlosti pomalejšího počítače. Stejný problém však nastává i v případě, kdy spolu vzájemně komunikují dva víceméně rovnocenné subjekty - například dva stejně rychlé počítače. Zde je totiž třeba si uvědomit, že příjemce nemusí mít na starosti jen příjem dat. Jde-li například o počítač, pracující ve víceúlohovém režimu, musí se průběžně věnovat i dalším úlohám, a ne pouze zmíněnému příjmu dat. Prakticky vždy je tedy nutné mít k dispozici vhodný mechanismus, kterým by bylo možné regulovat průběh přenosu. Obecně se přitom hovoří o mechanismech pro tzv. řízení toku (flow control).

Základní charakteristikou všech mechanismů a technik řízení toku je skutečnost, že průběh přenosu by se měl řídit možnostmi příjemce, a nikoli schopnostmi odesilatele. Rozhodující slovo by tedy měl mít příjemce, který by měl mít možnost diktovat tempo vzájemného „rozhovoru". Konkrétně by měl mít právo přimět odesilatele, aby dočasně pozastavil odesílání dalších dat, a následně jej zase mohl informovat, že ve vysílání může pokračovat. Otázka ovšem je, na jaké úrovni takovýto regulační mechanismus implementovat, a jakým způsobem.

Nejjednodušší je situace v případě, kdy mezi příjemcem a odesilatelem existuje více samostatných přenosových kanálů. Pak je vcelku snadné vyhradit jeden z nich pro vlastní přenos, a další kanály vyhradit potřebám řízení toku. Typicky k tomu dochází tam, kde se jedná o propojení na velmi krátké vzdálenosti, a mezi oběma stranami je veden nějaký vícežilový kabel - například mezi počítačem a tiskárnou, nebo mezi počítačem a modemem. V takovém případě je možné regulovat tok dat i po jednotlivých znacích či bytech - tj. dát příjemci možnosti pozastavit a později znovu obnovit přenos mezi libovolnými dvěma znaky či byty. V tomto případě se ale již většinou nehovoří o řízení toku (flow control), ale používá se spíše termín handshake. V doslovném překladu to znamená „potřesení rukou", a je to dáno tím, že jde vlastně o spojení potvrzování (viz minulý díl) a řízení toku: každý jednotlivý znak či byte je samostatně potvrzen, a současně s tím je i signalizováno, zda je příjemce schopen přijmout další znak či byte, nebo nikoli.

Poněkud odlišná je situace při komunikaci na větší vzdálenosti, kdy vyhrazení samostatných přenosových kanálů pro řízení (i potvrzování) nepřipadá v úvahu. Zde existuje obvykle jen jeden kanál, skrz který musí „projít" všechno - kromě vlastních dat i veškeré řídící údaje, sloužící jak potřebám řízení toku, tak i potřebám potvrzování či ještě dalším nezbytným činnostem. Když ale dochází k takovémuto „prolínání" skutečných dat a řídících údajů, musí být vždy jednoznačně jasné, co se právě přenáší, zda jde o data nebo o řídící údaje (v této souvislosti se obvykle hovoří o tzv. transparenci dat).

V praxi se ale u takovýchto jednotlivých přenosových kanálů praktikuje řízení toku na poněkud vyšší úrovni, než na úrovni jednotlivých znaků či bytů. Tedy počítá se s tím, že data se přenáší po určitých celcích (blocích, rámcích, paketech), a řízení toku se týká toho, zda příjemce je schopen přijmout další blok dat či nikoli. Příjemce zde tedy nemá možnost dočasně pozastavit přenos uprostřed nějakého bloku dat, ale vždy jen mezi bloky dat. Navíc režie, spojená s takto koncipovaným řízením toku, může být únosně malá. V praxi je také konkrétní řízení toku často kombinováno s mechanismy potvrzování - když už příjemce vysílá zpět k odesilateli informaci o tom, zda a jak co přijal, je vhodné s ní spojit i informaci o tom, co dalšího je či není schopen přijmout, tedy informace potřebné pro řízení toku. O konkrétních technikách si ale povíme zase až někdy příště.