analýza/stdio-fs.txt
author František Kučera <franta-hg@frantovo.cz>
Sat Jun 23 13:11:08 2012 +0200 (2012-06-23)
changeset 0 92b32c3f9b8e
child 1 f57460019f80
permissions -rw-r--r--
zadání, prvotní analýza
franta-hg@0
     1
STDIO-FS
franta-hg@0
     2
--------
franta-hg@0
     3
franta-hg@0
     4
Souborový systém (FUSE) komunikující přes standardní vstup/výstup (STDIO).
franta-hg@0
     5
Tzn. jeden kanál, který lze posílat buď mezi dvěma procesy lokálně (nemá moc velký smysl)
franta-hg@0
     6
nebo po síti – tunelovaně např. unitř SSH, nebo nešifrovaně přes obyčejné TCP.
franta-hg@0
     7
franta-hg@0
     8
Skládá se ze dvou částí:
franta-hg@0
     9
 - server – zpřístupňuje skutečný souborový systém pomocí STDIO zvláštním protokolem
franta-hg@0
    10
 - klient – FUSE souborový systém, který se připojuje k serveru
franta-hg@0
    11
franta-hg@0
    12
franta-hg@0
    13
Požadavky
franta-hg@0
    14
---------
franta-hg@0
    15
franta-hg@0
    16
 - pouze jeden kanál pro všechny operace → multiplexování (lze např. kopírovat dva soubory současně)
franta-hg@0
    17
 - efektivní binární protokol
franta-hg@0
    18
 - 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
    19
 - 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
    20
franta-hg@0
    21
franta-hg@0
    22
Implementatce
franta-hg@0
    23
-------------
franta-hg@0
    24
franta-hg@0
    25
 - klient i server by měly být ve finální verzi v C++ případně v C
franta-hg@0
    26
 - prototyp může být v libovolném jazyce – Java, Perl?
franta-hg@0
    27
 - 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
    28
 - 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
    29
 - vrstvu, která se stará o multiplexování by bylo dobré napsat jako znovupoužitelnou knihovnu
franta-hg@0
    30
franta-hg@0
    31
franta-hg@0
    32
Multiplexování
franta-hg@0
    33
--------------
franta-hg@0
    34
franta-hg@0
    35
 - 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
    36
 - kusy dat se označí číslem virtuálního kanálu a poskládají se do STDIO proudu
franta-hg@0
    37
 - na druhé straně se opět dekódují a rozloží jako samostatné kanály
franta-hg@0
    38
 - 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
    39
 - ostatní kanály se vytváří na přání – podobně jako se vytvářejí TCP spojení
franta-hg@0
    40
 - klientem (iniciátorem kanálu) i serverem u virtuálních kanálů můžou být obě strany
franta-hg@0
    41
 - je potřeba řešit zahlcení
franta-hg@0
    42
	- 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
    43
	- částěčně lze řešit mezipamětí
franta-hg@0
    44
	- 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
    45
		- 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
    46
		- 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
    47
	- kanál je možné odblokovat:
franta-hg@0
    48
		- po uplynutí určitého času (stanovený v požadavku na blokaci)
franta-hg@0
    49
		- po odvolání blokace příjemcem (řekne, že už má místo na další data)
franta-hg@0
    50
		- pokud v ostatních kanálech nejsou žádná data k odeslání
franta-hg@0
    51
			- 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
    52
			- musí být povoleno příjemcem
franta-hg@0
    53
	- mohlo by jít řídit rychlost jednotlivých kanálů
franta-hg@0
    54
		- plynulá komunikace, bez blokování
franta-hg@0
    55
		- příjemce řekne, jakou rychlostí je schopný odbavovat data na daném kanále
franta-hg@0
    56
		- průběžně lze rychlost měnit
franta-hg@0
    57