Distribuované algoritmy
Zkouškový pattern
Tahle stránka je catch-all pro distribuované algoritmy mimo broadcast/ABCAST. V zadání se střídají mutual exclusion algoritmy, synchronizace vstupu do kritické sekce, detekce ukončení, volba lídra, časová synchronizace a menší simulační algoritmy jako Random mating nebo Rendezvous.
Oficiální slidy
- Distribuovaná synchronizace, str. 10 až str. 13 - Marzulloův algoritmus.
- Distribuovaná synchronizace, str. 30 až str. 39 - Lamport a Ricart-Agrawala pro distribuované vzájemné vyloučení.
- Distribuovaná synchronizace, str. 47 až str. 52 - Maekawa.
- Distribuovaná synchronizace, str. 84 až str. 94 - Suzuki-Kasami; diagramové kroky kontroluj v PRL2526_DISTSYNCH.pdf.
- Komunikace, str. 38 až str. 41 - Bagrodia/rendezvous tokeny a příklady.
- Grafy, str. 10 až str. 15 - Random Mate / Random mating, obě fáze a analýza.
- Grafy, str. 16 až str. 26 - Optimal List Ranking přes Random Mate simulaci.
- Distribuovaná synchronizace, str. 129 až str. 135 - volba lídra a detektor Ω.
Maekawa
Vzájemné vyloučení přes kvóra:
- Každý proces má množinu procesů, od kterých žádá povolení.
- Každá dvě kvóra se protínají.
- Proces vstoupí do kritické sekce po získání všech odpovědí ze svého kvóra.
U kreslení pro 12 procesů se často používá zalomená konstrukce kvór. Důležité je ukázat průnik kvór, ne jen nakreslit tabulku.
Ricart-Agrawala
- Proces při žádosti rozešle request s Lamportovým timestampem.
- Vstoupí do CS po obdržení reply od všech ostatních.
- Při konfliktu rozhoduje menší timestamp, pak priorita/id.
- Po opuštění CS odešle odložené odpovědi.
Suzuki-Kasami
- Token-based mutual exclusion.
- Do CS může vstoupit vlastník tokenu.
- Requesty se šíří broadcastem; token drží frontu čekatelů a vektor posledních požadavků.
Marzullo
Algoritmus hledá interval s maximálním překryvem intervalů časových odhadů.
Postup:
- Z každého intervalu udělat začátek
+1a konec-1. - Seřadit body.
- Procházet zleva doprava a počítat aktivní intervaly.
- Vybrat úsek s maximálním počtem překryvů.
Dijkstra termination detection
Zkouší se jako princip detekce ukončení v distribuovaném výpočtu. V odpovědi oddělit:
- lokální pasivitu procesu;
- zprávy v kanálech;
- globální podmínku ukončení.
Volba lídra a detektory
U voleb lídra drž dvě roviny:
- pravidlo, podle kterého se vybírá lídr;
- okamžiky, kdy porucha nebo obnova spustí novou epochu.
U novějšího zadání s perfektním detektorem lídra se lídrem stává živý proces s nejvyšší prioritou a epochy se vypisují chronologicky.
Rendezvous / Bagrodia
Zadání z roku 2023/2024 používá tokeny a fronty partnerů:
- proces drží frontu tokenů potenciálních partnerů;
- při vstupu do kontextu chce komunikovat;
- při přijetí nového tokenu jej zařadí do fronty;
- pokud se dvojice domluví na komunikaci, opustí kontext.
Při simulaci hlídej pořadí událostí ve stejném čase: pokud zadání říká, že proces nejdřív odesílá a až potom zpracuje příjem, musíš to respektovat.
Random mating
Opakovaný simulační úkol:
- V jumping phase se uzly pseudonáhodně párují jako
F/M. - Cílem je zvolit kroky tak, aby fáze skončila do zadaného počtu iterací, často do 4.
- Reconstruction phase obnoví nebo popíše výslednou strukturu.
Bez obrázku nelze dopočítat konkrétní páry, ale šablona odpovědi je vždy: vypsat iterace, ukázat změny hran/párů a nezapomenout reconstruction phase.
Čtyři čtenáři / čtyři čítače
Ve zdrojích se objevuje jako krátké zadání k detekci ukončení, někdy zapsané jako “čtyři čtenáři” a jindy jako “čtyři čítače”. Ber to jako úlohu na globální stav:
- ukázat běh, kde lokální podmínky vedou k detekci ukončení;
- ukázat běh, kde zprávy nebo stav v kanálu detekci brání;
- oddělit lokální pasivitu od globálního ukončení.
Vyřešené příklady z termínů
Maekawa a zalomená kvóra
Zdroj: term-0-pretermin
Zadání: Maekawův algoritmus, kvóra pro 12 procesů a určení kvór pro 2 procesy.
Řešení:
- Nakresli kvóra tak, aby se každá dvě protínala.
- Proces vstoupí do kritické sekce po získání všech povolení ze svého kvóra.
- Důkaz není v kompletním výčtu procesů, ale v průniku kvór.
Ricart-Agrawala s Lamportovými hodinami
Zdroj: term-2-prvni-opravny
Zadání: 4 procesy žádají o kritickou sekci v synchronním čase, zpráva má latenci 3 takty, kritická sekce trvá 1 takt; zakreslit komunikaci a logické časy.
Řešení:
- Každý request nese Lamportův timestamp.
- Při konfliktu rozhoduje menší timestamp, poté priorita/id podle zadání.
- Reply se odkládá, pokud má lokální proces přednost.
- Po každé události aktualizuj Lamportovy hodiny: lokální událost
+1, příjemmax(local, received)+1.
Marzullo
Zdroj: term-2-prvni-opravny
Zadání: Marzullův algoritmus.
Řešení:
- Přepiš intervaly na začátky a konce.
- Seřaď body a sweepem počítej počet aktivních intervalů.
- Výsledkem je interval s maximálním překryvem.
Random mating
Zdroj: term-2-prvni-opravny
Zadání: 8 uzlů, vybírat F/M pseudonáhodně tak, aby jumping phase skončila do 4 iterací; nezapomenout reconstruction phase.
Řešení:
- V tabulce napiš iterace jumping phase.
- U každého uzlu uveď aktuální partnerství nebo směr skoku.
- Po skončení první fáze dopiš reconstruction phase; to je častý bodový únik.
Volba lídra po výpadcích
Zdroj: term-0-pretermin-a
Zadání: perfektní detektor lídra pro 4 procesy, výpadky a obnovy v taktech 1-14, vypsat epochy.
Řešení:
- V každém taktu vezmi jen živé procesy.
- Lídrem je živý proces s nejvyšší prioritou.
- Nová epocha vzniká při změně lídra; zapisuj
(rank lídra, pořadové číslo jeho vlády).
Kde se to objevuje
Podle sjednocených termínových souborů v archivu:
- term-0-pretermin-b
- term-0-pretermin-a
- term-2-prvni-opravny
- term-0-pretermin-b
- term-3-druhy-opravny
- term-2-prvni-opravny
- term-1-radny-c
- term-1-radny-b
- term-1-radny-a
- term-0-pretermin
- term-3-druhy-opravny
- term-2-prvni-opravny
- term-1-radny-c
- term-1-radny-b
- term-3-druhy-opravny
- term-2-prvni-opravny-b
- term-2-prvni-opravny-a
- term-3-druhy-opravny
- term-2-prvni-opravny
- term-1-radny-zkratka
- term-2-prvni-opravny
- term-1-radny-a
- term-1-radny-c
- term-1-radny-b
- term-1-radny-a