Prostředky pro synchronizaci procesů

Z FAV wiki
Přejít na: navigace, hledání

Zakázání přerušení

Ř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

Průběžně se testuje, zra už může proces do kritické sekce vstoupit - plýtvání časem CPU


Petersonovo řešení


Spin-lock s instrukcí TSL

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“) - HW podpora


Další možnosti


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í.




[editovat] Synchronizační primitiva

jsou v operačních systémech prostředky, umožňující zároveň běžícím aplikacím ošetřit současný přístup ke sdíleným prostředkům. Ve smyslu algoritmu se jedná o rozhraní a jeho implementace není důležitá.


Chybné použití synchronizačních primitiv může vést k jejich neúčinnosti (tedy k prostředku stejně mohou přistoupit dva procesy najednou) nebo k deadlocku (vzájemnému zablokování).


Deadlock (česky také uváznutí) je odborný výraz pro situaci, kdy úspěšné dokončení nějaké akce je podmíněno předchozím dokončením jiné akce, přičemž tato jiná akce může být dokončena až po dokončení původní akce. Vzniká paradox, často označovaný jako Co bylo dříve? Slepice nebo vejce?.


V počítači se jedná o zablokování procesů (případně vláken) způsobené čekáním na synchronizačních primitivech. Obvykle k němu dochází v důsledku chyby při jejich programování. Pokud uváznutí nastane, řeší se například zrušením transakce (rollback) nebo násilným ukončením procesů. Některé systémy spoléhají na to, že deadlock nastává zřídka a uživatel si pomůže sám.


[editovat] K uváznutí dojde jen při splnění všech následujících podmínek:

Prostředek může v jednom okamžiku používat jenom jeden proces (jinak dojde k chybě).

Proces může žádat o další prostředky, i když už má nějaké přiděleny.

Jakmile proces zmíněný prostředek vlastní, nelze mu ho bezpečně odejmout, musí ho sám vrátit.

Je možné uzavřít cyklus z procesů čekající každý na svého předchůdce – respektive k deadlocku dojde, jakmile je tento cyklus uzavřen.


Mezi synchronizační primitiva patří zámek a jejich zobecnění semafory, fronty zpráv a monitor.


Zámky a semafory bývají implementovány operačním systémem pomocí atomických operací na sdílené paměti a plánovače.

Pro synchronizaci v paralelním programování stačí atomické operace na sdílené paměti (čekají na sebe procesy na různých procesorech a tedy mohou čekat aktivně) a je možné je implementovat i bez pomoci operačního systému.


Fronty zpráv jsou primitivní operací v případě paralelního programování, ale je možné je implementovat v operačním systému i na jednom procesoru.


Monitor je možné realizovat pouze s podporou programovacího jazyka.


Korektní paralelní program - Nutné podmínky

  1. Dva procesy se nesmí nacházet současně ve stejné sdružené sekci.
  2. Žádné předpoklady nesmí být kladeny na rychlost a počet procesorů.
  3. Pokud proces běžící mimo kritickou sekci nesmí být blokován ostatní procesy.
  4. Žádný proces nesmí do nekonečna čekat na vstup do kritické sekce


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