Co je Semafor?
Semafor je jednoduše proměnná, která je nezáporná a sdílená mezi vlákny. Semafor je signalizační mechanismus a vlákno, které čeká na semaforu, může být signalizováno jiným vláknem. Využívá dvě atomové operace, 1) čekání a 2) signál pro synchronizaci procesu.
Semafor povoluje nebo zakazuje přístup k prostředku, což závisí na tom, jak je nastaven.
V tomto výukovém programu se naučíte:
- Co je Mutex?
- Použití semaforu
- Použití Mutexu
- Rozdíl mezi Semaforem a Mutexem
- Časté mylné představy o Mutexu a Semaforu
- Výhody semaforu
- Výhody Mutexu
- Nevýhoda semaforů
- Nevýhody Mutexu
Co je Mutex?
Plná forma Mutexu je Mutual Exclusion Object. Jedná se o speciální typ binárního semaforu, který slouží k řízení přístupu ke sdílenému prostředku. Zahrnuje mechanismus dědičnosti priorit, aby se zabránilo problémům s inverzí rozšířené priority. Umožňuje udržovat aktuální úkoly s vyšší prioritou v blokovaném stavu po co nejkratší dobu. Prioritní dědičnost však neopravuje prioritní inverzi, ale pouze minimalizuje její účinek.
KLÍČOVÝ ROZDÍL
- Mutex je zajišťovací mechanismus, zatímco Semaphore je signalizační mechanismus
- Mutex je jen objekt, zatímco Semaphore je celé číslo
- Mutex nemá žádný podtyp, zatímco Semafor má dva typy, které počítají semafor a binární semafor.
- Semafor podporuje modifikaci operací čekání a signalizace, zatímco Mutex je upravován pouze procesem, který může požadovat nebo uvolnit prostředek.
- Hodnota semaforu se upravuje pomocí operací wait () a signal (), na druhou stranu jsou operace Mutex zamčené nebo odemčené.
Použití semaforu
V případě jediné vyrovnávací paměti můžeme rozdělit 4 kB vyrovnávací paměť na čtyři 1 kB vyrovnávací paměti. Semafor může být spojen s těmito čtyřmi vyrovnávacími paměti. To umožňuje uživatelům a producentům pracovat na různých vyrovnávacích pamětí současně.
Použití Mutexu
Mutex poskytuje vzájemné vyloučení, což může být buď producent, nebo spotřebitel, který může mít klíč (mutex) a pokračovat v práci. Dokud výrobce vyplní vyrovnávací paměť, uživatel musí počkat a naopak. V zámku Mutex po celou dobu může s celou vyrovnávací pamětí pracovat pouze jedno vlákno.
Rozdíl mezi Semaforem a Mutexem
Parametry | Semafor | Mutex |
---|---|---|
Mechanismus | Jedná se o typ signalizačního mechanismu. | Jedná se o zajišťovací mechanismus. |
Datový typ | Semafor je celočíselná proměnná. | Mutex je jen objekt. |
Úpravy | Operace čekání a signálu mohou upravit semafor. | Je upraven pouze procesem, který může požadovat nebo uvolnit prostředek. |
Správa zdrojů | Pokud není žádný prostředek volný, vyžaduje tento proces prostředek, který by měl provést operaci čekání. Mělo by počkat, až bude počet semaforů větší než 0. | Pokud je uzamčen, musí proces čekat. Proces by měl být veden ve frontě. K tomu je třeba přistupovat, pouze když je mutex odemčený. |
Vlákno | Můžete mít více podprocesů programu. | V mutexu můžete mít více podprocesů programu, ale ne současně. |
Vlastnictví | Hodnotu lze změnit jakýmkoli procesem uvolňujícím nebo získávajícím zdroj. | Zámek objektu je uvolněn pouze procesem, který zámek získal. |
Typy | Typy semaforu jsou počítání semaforu a binárního semaforu. | Mutex nemá žádné podtypy. |
Úkon | Hodnota semaforu se upravuje pomocí operací wait () a signal (). | Objekt Mutex je uzamčen nebo odemčen. |
Obsazenost zdrojů | Je obsazeno, pokud se používají všechny prostředky a proces požadující zdroj provede operaci wait () a sám se zablokuje, dokud se počet semaforů nestane> 1. | V případě, že je objekt již uzamčen, proces vyžadující prostředky čeká a je systémem zařazen do fronty před uvolněním zámku. |
Společná fakta o Mutexu a Semaforu
Zde je několik běžných faktů o Mutexu a Semaforu:
- Pouze jeden úkol může získat mutex. K mutexu je tedy přidruženo vlastnictví a mutex může uvolnit pouze jeho vlastník.
- Důvody pro použití mutexu a semaforu jsou různé, možná kvůli podobnosti při jejich implementaci by se mutex označoval jako binární semafor.
- Jedna velmi známá mylná představa je, že Mutexy a Semafory jsou téměř stejné, pouze s tím rozdílem, že Mutex je schopen počítat do 1, zatímco Semafory schopné počítat od 0 do N.
- Mezi binárním semaforem a mutexem vždy existuje nejistota. Možná uslyšíte, že mutex je binární semafor, což není správné.
Výhody semaforu
Zde jsou výhody / výhody používání Semaphore:
- Umožňuje více než jednomu vláknu přístup do kritické sekce
- Semafory jsou nezávislé na strojích.
- Semafory jsou implementovány do strojově nezávislého kódu microkernel.
- Nepovolují více procesům vstoupit do kritické sekce.
- Jelikož na semaforu čeká hodně práce, nikdy nedojde k plýtvání časem a zdroji.
- Jsou nezávislé na stroji, který by měl být spuštěn v strojově nezávislém kódu mikrokernelu.
- Umožňují flexibilní správu zdrojů.
Výhody Mutexu
Zde jsou důležité výhody / výhody Mutexu
- Mutexy jsou 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 daném okamžiku je v jeho kritické části pouze jedno vlákno, neexistují žádné podmínky závodu a data vždy zůstávají konzistentní.
Nevýhoda semaforů
Zde jsou nevýhody / nevýhoda semaforu
- Jedním z největších omezení semaforu je prioritní inverze.
- Operační systém musí sledovat všechny hovory, aby čekal a signalizoval semafor.
- Jejich použití není nikdy vynuceno, ale je to pouze na základě konvence.
- Aby se zabránilo zablokování v semaforu, je nutné provést operace Wait a Signal ve správném pořadí.
- Semaforové programování je složitá metoda, takže existuje šance, že nedojde k vzájemnému vyloučení.
- Také to není 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átoru.
- Může to způsobit zablokování nebo narušení vzájemného vyloučení kvůli chybě programátoru.
Nevýhody Mutexu
Zde jsou nevýhody / nevýhoda Mutexu
- Pokud vlákno získá zámek a přejde do režimu spánku nebo je preempted, pak se druhé vlákno nemusí pohybovat vpřed. To může vést k hladovění.
- Nelze jej zamknout nebo odemknout z jiného kontextu, než z kterého jej získal.
- V kritické sekci by mělo být povoleno vždy pouze jedno vlákno.
- Normální implementace může vést k zaneprázdněnému čekajícímu stavu, což ztrácí čas CPU.