Semafory, jejich použití a implementace

Z FAV wiki
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(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
+
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
+
Semaforu, lze přiřadit hodnotu pouze při deklaraci
−
· Když se několik procesů pokouší přistoupit současně ke stejnému semaforu, operace se provedou sekvenčně v libovolném pořadí
+
 
 +
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
+
* Vytvoříme semafor s počáteční hodnotou 1
−
· Před vstupem do KS voláme P(s), po vystoupení V(s)
+
* 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
+
* 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
+
* Procesům poskytneme možnost se pozastavit při operaci P
−
· Aktivace operací V
+
* 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ů
+
* 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 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ů:

Implementace


S každým semaforem s je sdruženo:

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.


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