franta-hg@0: STDIO-FS franta-hg@0: -------- franta-hg@0: franta-hg@0: Souborový systém (FUSE) komunikující přes standardní vstup/výstup (STDIO). franta-hg@0: Tzn. jeden kanál, který lze posílat buď mezi dvěma procesy lokálně (nemá moc velký smysl) franta-hg@0: nebo po síti – tunelovaně např. unitř SSH, nebo nešifrovaně přes obyčejné TCP. franta-hg@0: franta-hg@0: Skládá se ze dvou částí: franta-hg@0: - server – zpřístupňuje skutečný souborový systém pomocí STDIO zvláštním protokolem franta-hg@0: - klient – FUSE souborový systém, který se připojuje k serveru franta-hg@0: franta-hg@0: franta-hg@0: Požadavky franta-hg@0: --------- franta-hg@0: franta-hg@0: - pouze jeden kanál pro všechny operace → multiplexování (lze např. kopírovat dva soubory současně) franta-hg@0: - efektivní binární protokol franta-hg@0: - zpřístupnit co nejvíce informací o souborech včetně rozšířených atributů a pravdivého údaje o obsazeném místě na disku franta-hg@0: - pomocí rozšířených atributů zpřístupnit další nestandardní informace a funkce – např. umožnit výpočet hashe souboru na serveru → po síti (STDIO) se pak přenese pouze otisk, ne celý soubor franta-hg@0: franta-hg@1: Příklad použití franta-hg@1: --------------- franta-hg@1: franta-hg@1: Typické použití bude pro sdílení souborového systému směrem z desktopu na vzdálený server. franta-hg@1: Uživatel na desktopu zadá něco jako: franta-hg@1: $ socat EXEC:"stdio-fs-server /home/…/sdílený-adresář" EXEC:"ssh example.com stdio-fs-klient /home/…/bod-připojení" franta-hg@1: franta-hg@0: franta-hg@0: Implementatce franta-hg@0: ------------- franta-hg@0: franta-hg@0: - klient i server by měly být ve finální verzi v C++ případně v C franta-hg@0: - prototyp může být v libovolném jazyce – Java, Perl? franta-hg@0: - server může mít více implementací – pracuje pouze se standardním vstupem/výstupem a soubory, nemá nic spolenčného s FUSE franta-hg@0: - neřešíme bezpečnost – případné šifrování si řeší uživatel o úroveň níž (SSH, TLS) podle svých potřeb franta-hg@0: - vrstvu, která se stará o multiplexování by bylo dobré napsat jako znovupoužitelnou knihovnu franta-hg@0: franta-hg@0: franta-hg@0: Multiplexování franta-hg@0: -------------- franta-hg@0: franta-hg@0: - přes jeden kanál (vstupní a výstupní proud) umožnit přenos libovolného počtu virtuálních kanálů franta-hg@0: - kusy dat se označí číslem virtuálního kanálu a poskládají se do STDIO proudu franta-hg@0: - na druhé straně se opět dekódují a rozloží jako samostatné kanály franta-hg@0: - budeme mít nultý servisní kanál, který slouží k řízení toku a přenosu dalších metadat, tento kanál je prioritní franta-hg@0: - ostatní kanály se vytváří na přání – podobně jako se vytvářejí TCP spojení franta-hg@0: - klientem (iniciátorem kanálu) i serverem u virtuálních kanálů můžou být obě strany franta-hg@0: - je potřeba řešit zahlcení franta-hg@0: - když se z jednoho virtuálního kanálu nebude číst vůbec nebo pomalu, musí být možné číst ostatní kanály, aniž by bylo potřeba čekat na odbavení paketů pomalejšího kanálu franta-hg@0: - částěčně lze řešit mezipamětí franta-hg@0: - pokud dojde k jejímu zaplnění na straně příjemce, je potřeba odesílateli sdělit, že má přestat na tomto kanále posílat data a posílat zatím data jiných kanálů franta-hg@0: - pokud odesílatel neposlechne, dojde k zablokování a je potřeba počkat, až budou pakety tohoto pomalejšího kanálu odbaveny na straně příjemce (do té doby bude zablokována i komunikace na všech ostatních kanálech) franta-hg@0: - v krajním případě může nespokojený příjemce reagovat na neposlušného odesílatele odpojením – před tím pošle servisním kanálem informaci, proč ukončuje spojení franta-hg@0: - kanál je možné odblokovat: franta-hg@0: - po uplynutí určitého času (stanovený v požadavku na blokaci) franta-hg@0: - po odvolání blokace příjemcem (řekne, že už má místo na další data) franta-hg@0: - pokud v ostatních kanálech nejsou žádná data k odeslání franta-hg@0: - potenciálně nebezpečné – může opět dojít k zahlcení tohoto kanálu a v té době už se objeví data v jiných kanálech a nepůjde je odeslat franta-hg@0: - musí být povoleno příjemcem franta-hg@0: - mohlo by jít řídit rychlost jednotlivých kanálů franta-hg@0: - plynulá komunikace, bez blokování franta-hg@0: - příjemce řekne, jakou rychlostí je schopný odbavovat data na daném kanále franta-hg@0: - průběžně lze rychlost měnit franta-hg@0: