Semafory, jejich použití a implementace
m (kategorizace) |
|||
| (Nejsou zobrazeny 3 mezilehlé verze od 1 uživatele.) | |||
| Řádka 21: | Řádka 21: | ||
S každým semaforem s je sdruženo: | 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ů | * 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 | + | * Binární semafor s.mutex (mutual exclusion) pro vzájemné vyloučení při operaci nad semaforem |
* Seznam blokovaných procesů s.L | * 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. | 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. | ||
| + | |||
| + | Pozor, mutex není binární semafor. Mutex může na rozdíl od semaforu odemknout pouze vlákno, které ho zamklo. | ||
| + | |||
| + | {{fav-kiv-bzinf}} | ||
| + | |||
| + | |||
| + | [[Kategorie:fav-kiv-bzinf]] | ||
Aktuální verze z 20. 2. 2014, 06:47
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 (mutual exclusion) 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.
Pozor, mutex není binární semafor. Mutex může na rozdíl od semaforu odemknout pouze vlákno, které ho zamklo.