Mutex vs Semafor

podle terminologie operačního systému jsou mutex a semafory prostředky jádra, které poskytují synchronizační služby, nazývané také synchronizační primitivy. Synchronizace procesů hraje důležitou roli při udržování konzistence sdílených dat. Softwarové i hardwarové řešení jsou k dispozici pro řešení kritických problémů s sekcemi. Hardwarová řešení pro kritické problémy s sekcemi je však poměrně obtížné implementovat. Mutex a semafor poskytují synchronizační služby, ale nejsou stejné.

co je Mutex?

Mutex je objekt vzájemného vyloučení, který synchronizuje přístup ke zdroji. Je vytvořen s jedinečným názvem Na začátku programu. Blokovací mechanismus mutex zajišťuje, že pouze jedno vlákno může získat mutex a vstoupit do kritické sekce. Toto vlákno uvolní mutex pouze tehdy, když skončí v kritické části.

Mutex vs Semafor

Jedná se o speciální typ binárního semaforu používaného pro řízení přístupu ke sdílenému prostředku. Zahrnuje mechanismus prioritní dědičnosti, aby se zabránilo problémům s rozšířenou prioritou inverze. To umožňuje aktuální úkoly s vyšší prioritou, které mají být uchovávány v blokovaném stavu po co nejkratší dobu. Prioritní dědičnost však neopravuje prioritní inverzi, ale pouze minimalizuje její účinek.

příklad

to je ukázáno pomocí následujícího příkladu,

použití mutexu

mutex poskytuje vzájemné vyloučení, ať už výrobce nebo spotřebitel, který může mít klíč (mutex) a pokračovat ve své práci. Dokud výrobce vyplní vyrovnávací paměť, musí uživatel počkat a naopak. V mutex lock může po celou dobu pracovat pouze s jediným vláknem s celou vyrovnávací pamětí.

při spuštění programu požádá systém o vytvoření objektu mutex pro daný zdroj. Systém vytvoří objekt mutex s jedinečným názvem nebo ID. Kdykoli vlákno programu chce použít prostředek, zabírá zámek na objektu mutex, využívá prostředek a po použití uvolní zámek na objektu mutex. Pak je další proces povolen k získání zámku na objektu mutex.

mezitím proces získal zámek na objektu mutex a žádný jiný podproces nebo proces nemá přístup k tomuto prostředku. Pokud je objekt mutex již uzamčen, proces, který chce získat zámek na objektu mutex, musí počkat a systém je zařazen do fronty, dokud není objekt mutex odemčen.

výhody mutexu

zde jsou následující výhody mutexu, jako například:

  • Mutex je jen jednoduché zámky získané před vstupem do jeho kritické části a následným uvolněním.
  • vzhledem k tomu, že v kritickém úseku je v daném okamžiku pouze jedno vlákno, neexistují žádné podmínky závodu a data zůstávají vždy konzistentní.

nevýhody mutexu

Mutex má také některé nevýhody, jako například:

  • pokud vlákno získá zámek a přejde do režimu spánku nebo je předjímáno, pak se druhé vlákno nemusí pohybovat vpřed. To může vést k hladovění.
  • nelze jej uzamknout ani odemknout z jiného kontextu, než který jej získal.
  • v kritické části by mělo být povoleno pouze jedno vlákno najednou.
  • normální implementace může vést k rušnému čekacímu stavu, který ztrácí čas procesoru.

co je semafor?

semafor je jednoduše proměnná, která není negativní a sdílí mezi vlákny. Semafor je signalizační mechanismus a další vlákno může signalizovat vlákno, které čeká na semaforu.

Mutex vs Semafor

semafor používá dvě atomové operace,

1. Počkejte: operace čekání snižuje hodnotu argumentů, pokud je kladná. Pokud je S záporné nebo nulové, neprovádí se žádná operace.

2. Signál pro synchronizaci procesu: operace signálu zvyšuje hodnotu jeho argumentu s.

semafor buď povolí nebo odmítne přístup ke zdroji, v závislosti na tom, jak je nastaven.

použití semaforu

v případě jedné vyrovnávací paměti můžeme oddělit vyrovnávací paměť 4 KB na čtyři vyrovnávací paměti 1 KB. Semafor může být spojen s těmito čtyřmi vyrovnávacími pamětí, což umožňuje uživatelům a výrobcům pracovat na různých vyrovnávacích pamětí současně.

typy semaforu

semafor se vyznačuje operačním systémem ve dvou kategoriích Počítajících semafor a binární semafor.

1. Počítání semaforu: hodnota semaforu S je inicializována na počet zdrojů přítomných v systému. Kdykoli chce proces získat přístup ke zdroji, provede operaci wait()na semaforu a sníží hodnotu semaforu o jednu. Když uvolní zdroj, provede operaci signal() na semaforu a zvýší hodnotu semaforu o jednu.

když počet semaforů přejde na 0, znamená to, že procesy zabírají všechny zdroje. Proces musí použít prostředek, když je počet semaforů 0. Provede operaci wait() a zablokuje se, dokud hodnota semaforu nebude větší než 0.

Mutex vs Semafor

2. Binární semafor: hodnota semaforu se pohybuje mezi 0A 1. Je podobný zámku mutex, ale mutex je blokovací mechanismus, zatímco semafor je signalizační mechanismus. V binárním semaforu, pokud chce proces získat přístup ke zdroji, provede operaci wait () na semaforu a sníží hodnotu semaforu z 1 na 0. Když uvolní zdroj, provede operaci signálu () na semaforu a zvýší jeho hodnotu na 1. Předpokládejme, že hodnota semaforu je 0 a proces chce získat přístup ke zdroji. V takovém případě provede operaci wait () a zablokuje se, dokud aktuální proces využívající zdroje neuvolní zdroj.

Mutex vs Semafor

výhody semaforu

zde jsou následující výhody semaforu, jako například:

  • umožňuje přístup k kritické části více než jednomu vláknu.
  • semafory jsou strojově nezávislé.
  • semafory jsou implementovány ve strojově nezávislém kódu mikrokernelu.
  • neumožňují vstup více procesů do kritické sekce.
  • protože v semaforu je obsazeno a čeká, nikdy nedochází k plýtvání časem a zdroji procesu.
  • jsou nezávislé na stroji, které by měly být spuštěny ve strojově nezávislém kódu mikrokernelu.
  • umožňují flexibilní správu zdrojů.

nevýhoda semaforů

semafory mají také některé nevýhody, jako například:

  • jedním z největších omezení semaforu je prioritní inverze.
  • operační systém musí sledovat všechna volání, aby čekal a signalizoval semafor.
  • jejich použití není nikdy vynuceno, ale je to pouze konvencí.
  • operace čekání a signálu musí být provedeny ve správném pořadí, aby se zabránilo zablokování v semaforu.
  • semaforové programování je složitá metoda, takže existuje šance na nedosažení vzájemného vyloučení.
  • není to také praktická metoda pro použití ve velkém měřítku, protože jejich použití vede ke ztrátě modularity.
  • semafor je náchylnější k chybě programátora
  • a může způsobit zablokování nebo porušení vzájemného vyloučení z důvodu chyby programátora.

rozdíl mezi Mutexem a semaforem

základní rozdíl mezi semaforem a Muforem je, že semafor je signalizační mechanismus, tj. procesy provádějí operace wait() a signal (), aby naznačily, zda získávají nebo uvolňují zdroj. Naproti tomu mutex je blokovací mechanismus a proces musí získat zámek na objektu mutex, pokud chce získat zdroj. Zde jsou některé další rozdíly mezi semaforem a mutexem, například:

Mutex vs Semafor

výrazy Mutex Semafor
definice mutex je blokovací mechanismus, protože pro získání zdroje musí proces uzamknout objekt mutex a při uvolnění procesu zdroje musí odemknout objekt mutex. semafor je signalizační mechanismus, protože operace wait() a signal() prováděné na proměnné semaforu ukazují, zda proces získává nebo uvolňuje zdroj.
Existence mutex je objekt. semafor je celočíselná proměnná.
funkce Mutex umožňuje více programových vláken pro přístup k jednomu zdroji, ale ne současně. Semafor umožňuje více programových vláken pro přístup k konečné instanci zdrojů.
vlastnictví zámek objektu Mutex je uvolněn pouze procesem, který získal zámek na objektu mutex. hodnotu semaforu lze změnit jakýmkoli procesem získáním nebo uvolněním zdroje provedením operace wait() a signal ().
kategorizovat Mutex není dále kategorizován. semafor lze rozdělit do počítacího semaforu a binárního semaforu.
operace objekt mutex je uzamčen nebo odemčen procesem vyžádání nebo uvolnění zdroje. hodnota semaforu se kromě inicializace mění pomocí operace wait() a signal ().
zdroje obsazené pokud je objekt mutex již uzamčen, proces, který si přeje získat prostředek, čeká a dostane se do fronty systémem, dokud se prostředek neuvolní a objekt mutex se odemkne. Předpokládejme, že proces získá všechny zdroje a žádný zdroj není volný. V takovém případě proces, který chce získat zdroj, provede operaci wait () na semaforové proměnné a sám se zablokuje, dokud počet semaforů nebude větší než 0.

Leave a Reply