Prostředky pro synchronizaci procesů

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í

Zakázání přerušení · V systému se sdílením času přepíná CPU mezi procesy pouze jako důsledek přerušení · Zakážeme-li přerušení, k přepínání nedochází · Nejjednodušší řešení, možné pouze v jednoprocesorovém systému · Není dovoleno v uživatelském režimu

Řešení s aktivním čekáním Základní předpoklady o systému: 1) Zápis a čtení ze společné datové oblasti jsou nedělitelné operace 2) Kritické sekce nemohou mít přiřazenou prioritu 3) Relativní rychlost procesů je neznámá 4) Proces se může pozastavit mimo kritickou sekci

Petersonovo řešení · Na začátku není v kritické sekci žádný proces · Proces 0 volá enter_CS(0) - Nastaví interested[0]:=true, turn:=0; - Protože interested[1]=false, nebude čekat ve smyčce · Pokud proces 1 volá enter_CS(1) - Nastaví interested[1]:=true, turn:=1; - Bude čekat ve smyčce, dokud se interested[0] nenastaví na false (voláním leave_CS(0)) · Co kdyby oba procesy volaly enter_CS téměř současně? - Oba nastaví interested na true - Oba nastaví turn na své číslo; „téměř souběžný zápis“ se ale provede sekvenčně, tj. nejdříve nastaví turn jeden, hodnota bude přepsána druhým - Oba se dostanou do while, proces 0 projde, proces 1 aktivně čeká

Spin-lock s instrukcí TSL · Proměnná zámek - na počátku 0 · Proces, který chce vstoupit do KS otestuje - Pokud 0 nastaví na 1 a vstoupí do KS - Pokud 1 čeká · Problém časového souběhu: - Jeden proces přečte, vidí 0 - Druhý proces je naplánován, přečte, vidí 0, nastaví na 1, vstoupí do KS - Po naplánování první zapíše 1 a máme 2 procesy v KS · Řešení vyžaduje HW podporu - Většina současných počítačů má instrukci, která otestuje hodnotu a nastaví paměťové místo v jedné nedělitelné operaci (TSL - „Test and Set Lock“)

Semafory viz 7 Mutexy Někdy nepotřebujeme použít schopnost semaforů čítat, tj. stačila by nám pouze jejich schopnost zajistit vzájemné vyloučení => mutex Monitory viz 8 Předávání zpráv - primitiva send a receive 1. Čeká-li primitivum send na převzetí zprávy příjemcem, je blokující (synchronní). Ve většině systémů je neblokující. 2. Pokud při zavolání recese není ve frontě žádná zpráva, může se recese buď zablokovat, nebo se může vrátit s chybou. Ve většině systémů je blokující.

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