Synchronizační primitivum
Z Wikipedie, otevřené encyklopedie
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í).
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.
Pro uvedená synchronizační primitiva platí, že jsou vzájemně ekvivalentní - tedy že pokud máte k dispozici jedno z nich, můžete s jeho pomocí naimplementovat ty ostatní. S výjimkou zámků to lze navíc dokázat bez aktivního čekání: na implementaci pomocí zámků potřebujete spolupráci scheduleru (možnost uspat program a později ho probudit) nebo aktivně čekat (Stačí jeden „zámkový server“ neustále prohlížející oblasti sdílené paměti a interpretující je jako zprávy. Ostatní procesy pak mohou čekat na zámcích, které vlastní a uvolní právě tehdy, když jim vyřizuje zprávu.) Pro implementaci semaforů pomocí front zpráv procesu potřebujete „semaforový server“ starající se o semafor, ale ten čeká pasivně. Pro fronty pojmenované server nepotřebujete.
[editovat] Viz též
[editovat] Zdroj
- Základy operačních systémů – přednáška na MFF UK