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 kurzu operačního systému (OS) se naučíte:
- Charakteristika semaforu
- Co je Semafor?
- Druhy semaforů
- Příklad semaforu
- Čekání a operace signálu v semaforech
- Počítání semafor vs. binární semafor
- Rozdíl mezi Semaforem a Mutexem
- Výhody semaforů
- Nevýhoda semaforů
Charakteristika semaforu
Zde jsou charakteristické pro semafor:
- Jedná se o mechanismus, který lze použít k zajištění synchronizace úkolů.
- Jedná se o synchronizační mechanismus na nízké úrovni.
- Semafor bude vždy obsahovat nezápornou celočíselnou hodnotu.
- Semafor lze implementovat pomocí testovacích operací a přerušení, která by měla být provedena pomocí deskriptorů souborů.
Druhy semaforů
Dva běžné druhy semaforů jsou
- Počítání semaforů
- Binární semafory.
Počítání semaforů
Tento typ Semaphore používá počet, který pomáhá získat nebo uvolnit úkol několikrát. Pokud je počáteční počet = 0, měl by být počítající semafor vytvořen v nedostupném stavu.
Pokud je však počet> 0, je semafor vytvořen v dostupném stavu a počet tokenů, které má, se rovná jeho počtu.
Binární semafory
Binární semafory jsou velmi podobné počítání semaforů, ale jejich hodnota je omezena na 0 a 1. V tomto typu semaforu funguje operace čekání pouze v případě, že semafor = 1, a operace signálu bude úspěšná, když semafor = 0. Je snadné implementovat než počítat semafory.
Příklad semaforu
Níže uvedený program je krok za krokem implementace, která zahrnuje použití a deklaraci semaforu.
Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;
Čekání a operace signálu v semaforech
Obě tyto operace se používají k implementaci synchronizace procesů. Cílem této semaforové operace je získat vzájemné vyloučení.
Počkejte na operaci
Tento typ semaforové operace vám pomůže řídit vstup úkolu do kritické sekce. Pokud je však hodnota čekání kladná, hodnota argumentu čekání X se sníží. V případě záporné nebo nulové hodnoty se neprovede žádná operace. Nazývá se také P (S) operace.
Po snížení hodnoty semaforu, která se stane zápornou, je příkaz podržen, dokud nejsou splněny požadované podmínky.
Copy CodeP(S){while (S<=0);S--;}
Provoz signálu
Tento typ semaforové operace se používá k řízení ukončení úkolu z kritické sekce. Pomáhá zvýšit hodnotu argumentu o 1, která se označuje jako V (S).
Copy CodeP(S){while (S>=0);S++;}
Počítání semafor vs. binární semafor
Zde jsou některé hlavní rozdíly mezi počítáním a binárním semaforem:
Počítám semafor | Binární semafor |
Žádné vzájemné vyloučení | Vzájemné vyloučení |
Libovolná celočíselná hodnota | Hodnota pouze 0 a 1 |
Více než jeden slot | Pouze jeden slot |
Poskytněte sadu procesů | Má mechanismus vzájemného vyloučení. |
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 | Druhy semaforu jsou počítání semaforu a binárního semaforu a | 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. |
Výhody semaforů
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ů.
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 komplikované, 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.
Souhrn:
- Semafor je definován jako proměnná, která je nezáporná a sdílená mezi vlákny.
- Jedná se o mechanismus, který lze použít k zajištění synchronizace úkolů.
- Počítání semafor používá počet, který pomáhá úkol získat nebo uvolnit několikrát.
- Binární semafory jsou velmi podobné počítání semaforů, ale jejich hodnota je omezena na 0 a 1.
- Operace Wait vám pomůže řídit vstup úkolu do kritické sekce
- Operace semaforu signálu se používá k řízení ukončení úkolu z kritické sekce
- Počítání semaforu nemá žádné vzájemné vyloučení, zatímco binární semafor má vzájemné vyloučení
- Semafor znamená signalizační mechanismus, zatímco Mutex je zajišťovací mechanismus
- Semafor umožňuje přístup do kritické sekce více než jednomu vláknu
- Jedním z největších omezení semaforu je prioritní inverze.