Semafory, jejich použití a implementace
(Založena nová stránka: · 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)...) |
m (kategorizace) |
||
| (Nejsou zobrazeny 4 mezilehlé verze od 1 uživatele.) | |||
| Řádka 1: | Řádka 1: | ||
| − | + | 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ů: | 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 | Implementace | ||
| − | + | * Procesům poskytneme možnost se pozastavit při operaci P | |
| − | + | * Aktivace operací V | |
| + | |||
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ů | |
| − | + | * 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. | 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.