zadání, prvotní analýza
authorFrantišek Kučera <franta-hg@frantovo.cz>
Sat Jun 23 13:11:08 2012 +0200 (2012-06-23)
changeset 092b32c3f9b8e
child 1 f57460019f80
zadání, prvotní analýza
analýza/stdio-fs.txt
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/analýza/stdio-fs.txt	Sat Jun 23 13:11:08 2012 +0200
     1.3 @@ -0,0 +1,57 @@
     1.4 +STDIO-FS
     1.5 +--------
     1.6 +
     1.7 +Souborový systém (FUSE) komunikující přes standardní vstup/výstup (STDIO).
     1.8 +Tzn. jeden kanál, který lze posílat buď mezi dvěma procesy lokálně (nemá moc velký smysl)
     1.9 +nebo po síti – tunelovaně např. unitř SSH, nebo nešifrovaně přes obyčejné TCP.
    1.10 +
    1.11 +Skládá se ze dvou částí:
    1.12 + - server – zpřístupňuje skutečný souborový systém pomocí STDIO zvláštním protokolem
    1.13 + - klient – FUSE souborový systém, který se připojuje k serveru
    1.14 +
    1.15 +
    1.16 +Požadavky
    1.17 +---------
    1.18 +
    1.19 + - pouze jeden kanál pro všechny operace → multiplexování (lze např. kopírovat dva soubory současně)
    1.20 + - efektivní binární protokol
    1.21 + - 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
    1.22 + - 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
    1.23 +
    1.24 +
    1.25 +Implementatce
    1.26 +-------------
    1.27 +
    1.28 + - klient i server by měly být ve finální verzi v C++ případně v C
    1.29 + - prototyp může být v libovolném jazyce – Java, Perl?
    1.30 + - 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
    1.31 + - neřešíme bezpečnost – případné šifrování si řeší uživatel o úroveň níž (SSH, TLS) podle svých potřeb
    1.32 + - vrstvu, která se stará o multiplexování by bylo dobré napsat jako znovupoužitelnou knihovnu
    1.33 +
    1.34 +
    1.35 +Multiplexování
    1.36 +--------------
    1.37 +
    1.38 + - přes jeden kanál (vstupní a výstupní proud) umožnit přenos libovolného počtu virtuálních kanálů
    1.39 + - kusy dat se označí číslem virtuálního kanálu a poskládají se do STDIO proudu
    1.40 + - na druhé straně se opět dekódují a rozloží jako samostatné kanály
    1.41 + - budeme mít nultý servisní kanál, který slouží k řízení toku a přenosu dalších metadat, tento kanál je prioritní
    1.42 + - ostatní kanály se vytváří na přání – podobně jako se vytvářejí TCP spojení
    1.43 + - klientem (iniciátorem kanálu) i serverem u virtuálních kanálů můžou být obě strany
    1.44 + - je potřeba řešit zahlcení
    1.45 +	- 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
    1.46 +	- částěčně lze řešit mezipamětí
    1.47 +	- 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ů
    1.48 +		- 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)
    1.49 +		- 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í
    1.50 +	- kanál je možné odblokovat:
    1.51 +		- po uplynutí určitého času (stanovený v požadavku na blokaci)
    1.52 +		- po odvolání blokace příjemcem (řekne, že už má místo na další data)
    1.53 +		- pokud v ostatních kanálech nejsou žádná data k odeslání
    1.54 +			- 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
    1.55 +			- musí být povoleno příjemcem
    1.56 +	- mohlo by jít řídit rychlost jednotlivých kanálů
    1.57 +		- plynulá komunikace, bez blokování
    1.58 +		- příjemce řekne, jakou rychlostí je schopný odbavovat data na daném kanále
    1.59 +		- průběžně lze rychlost měnit
    1.60 +