Semafory, jejich použití a implementace

Z FAV wiki
Verze z 8. 8. 2011, 15:22; Tester (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Přejít na: navigace, hledání

· Semafor = proměnná, obsahuje nezáporné celé číslo · Semaforu, lze přiřadit hodnotu pouze při deklaraci · Nad semafory pouze operace P(s) a V(s): Operace P(S): pokud S>0, sníží S o 1, jinak pozastaví proces Operace V(S): pokud je nad semaforem S zablokovaný jeden nebo více procesů, vzbudí jeden z nich (náhodně), jinak zvýší S o 1

· Operace P i V jsou nedělitelné (atomické) akce, tj. jakmile započne akce nad semaforem, nikdo k němu nemůže přistoupit · Když se několik procesů pokouší přistoupit současně ke stejnému semaforu, operace se provedou sekvenčně v libovolném pořadí

Vzájemné vyloučení pomocí semaforů: · Vytvoříme semafor s počáteční hodnotou 1 · Před vstupem do KS voláme P(s), po vystoupení V(s) · Je-li libovolný proces v KS, je s=0, jinak s=1

Implementace · Procesům poskytneme možnost se pozastavit při operaci P · Aktivace operací V

S každým semaforem s je sdruženo: · Celočíselná proměnná s.c, dovolíme jí nabývat i záporných hodnot, pak absolutní hodnota s.c vyjadřuje počet blokovaných procesů · Binární semafor s.mutex pro vzájemné vyloučení při operaci nad semaforem · Seznam blokovaných procesů s.L

Proces, který nemůže dokončit operaci P bude zablokován a uložen do seznamu blokovaných procesů. Pokud při operaci V není seznam prázdný, vybere se ze seznamu jeden proces a odblokuje se.

Osobní nástroje
Jmenné prostory
Varianty
Akce
Navigace
Nástroje