Semafory, jejich použití a implementace
Z FAV wiki
(Rozdíly mezi verzemi)
(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)...) |
|||
| Řá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 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. | ||
Verze z 29. 8. 2011, 18:43
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.