Co je to Semaphore? Počítání, binární typy s příkladem
⚡ Chytré shrnutí
Semaphore V operačním systému je nezáporná celočíselná proměnná sdílená mezi vlákny, která koordinuje přístup ke sdíleným zdrojům prostřednictvím dvou atomických operací, wait a signal, čímž zabraňuje vzniku závodních podmínek během synchronizace procesů.

Co je to Semaphore?
Semaphore 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 semafor, může být signalizováno jiným vláknem. Používá dvě atomické operace, 1) Počkejte a 2) Signal pro synchronizaci procesu.
Semafor buď povolí, nebo zakáže přístup ke zdroji, což závisí na tom, jak je nastaven.
Charakteristiky Semaphore
Zde jsou vlastnosti semaforu:
- Je to mechanismus, který lze použít k zajištění synchronizace úkolů.
- Jedná se o nízkoúrovňový synchronizační mechanismus.
- Semaphore bude vždy obsahovat nezápornou celočíselnou hodnotu.
- Semaphore lze implementovat pomocí testovacích operací a přerušení, které by měly být prováděny pomocí deskriptorů souborů.
Druhy Semaphores
Dva běžné druhy semaforů jsou:
- Počítání semaforů
- Binární semafory
Počítací Semaphores
Tento typ Semaphore používá počet, který pomáhá úkolu být získán nebo uvolněn vícekrát. Pokud je počáteční počet = 0, měl by být semafor počítání vytvořen ve stavu nedostupnosti.
Pokud je však počet > 0, semafor se vytvoří v dostupném stavu a počet tokenů, které má, se rovná jeho počtu.
Dvojitý Semaphores
Binární semafory jsou docela podobné počítacím semaforům, ale jejich hodnota je omezena na 0 a 1. V tomto typu semaforu operace čekání funguje pouze tehdy, když je semafor = 1, a operace signálu je úspěšná, když je semafor = 0. Je snazší ji implementovat než počítací semafory.
Příklad Semaphore
Níže uvedený program je postupnou implementací, která zahrnuje použití a deklaraci semaforu.
Shared var mutex: semaphore = 1;
Process i
begin
.
.
P(mutex);
execute CS;
V(mutex);
.
.
End;
Počkejte a Signal Operav Semaphores
Obě tyto operace se používají k implementaci synchronizace procesu. Cílem této semaforové operace je dosáhnout vzájemného vyloučení.
Čekat na Operavání
Tento typ semaforové operace vám pomáhá řídit vstup úlohy do kritické sekce. Pokud je však hodnota wait kladná, hodnota argumentu čekání X se sníží. V případě záporné nebo nulové hodnoty se neprovede žádná operace. Nazývá se také operace P(S).
Po snížení hodnoty semaforu, která se stane zápornou, je příkaz podržen, dokud nejsou splněny požadované podmínky.
P(S)
{
while (S<=0);
S--;
}
Signal operace
Tento typ Semaphore operace se používá k řízení ukončení úlohy z kritické sekce. Pomáhá zvýšit hodnotu argumentu o 1, což je označeno jako V(S).
P(S)
{
while (S>=0);
S++;
}
Počítací Semaphore vs. binární Semaphore
Zde jsou některé hlavní rozdíly mezi počítáním a binárním semaforem:
| Počítací Semaphore | Dvojitý Semaphore |
| Žádné vzájemné vyloučení | Vzájemné vyloučení |
| Jakákoli 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 Semaphore vs. Mutex
Níže uvedená tabulka porovnává semafor s mutexem v několika parametrech:
| parametry | Semaphore | Mutex |
| Mechanismus | Je to druh signalizačního mechanismu. | Jedná se o uzamykací mechanismus. |
| Datový typ | Semaphore je celočíselná proměnná. | Mutex je jen objekt. |
| Změna | Operace čekání a signálu mohou upravit semafor. | Je modifikován pouze procesem, který může požadovat nebo uvolnit zdroj. |
| Řízení zdrojů | Pokud není volný žádný prostředek, pak proces vyžaduje prostředek, který by měl provést operaci čekání. Mělo by počkat, až bude počet semaforu větší než 0. | Pokud je uzamčen, proces musí počkat. Proces by měl být držen ve frontě. K tomu je potřeba přistupovat pouze tehdy, když je mutex odemčený. |
| Vlákno | Můžete mít více programových vláken. | V mutexu můžete mít více programových vláken, ale ne současně. |
| Vlastnictví | Hodnotu lze změnit jakýmkoli procesem, který zdroj uvolní nebo získá. | Zámek objektu uvolní pouze proces, který na něj zámek získal. |
| Typ nemovitosti | Druhy Semaphore počítají semafor a binární semafor. | Mutex nemá žádné podtypy. |
| Operavání | Semaphore hodnota se upraví pomocí operace čekání () a signálu (). | Objekt Mutex je uzamčen nebo odemčen. |
| Obsazenost zdrojů | Je obsazen, pokud jsou využívány všechny zdroje a proces požadující zdroj provede operaci čekání () a zablokuje se, dokud počet semaforů nebude >1. | V případě, že je objekt již zamčený, proces požadující prostředky čeká a je systémem zařazen do fronty, než se zámek uvolní. |
výhody Semaphores
Zde jsou výhody/výhody použití Semaphore:
- Umožňuje přístup ke kritické sekci více než jednomu vláknu.
- Semaphores jsou na stroji nezávislé.
- Semaphores jsou implementovány ve strojově nezávislém kódu mikrokernelu.
- Neumožňují více procesům vstoupit do kritické sekce.
- Vzhledem k rušnému čekání v semaforu nedochází ke ztrátě času a zdrojů procesu.
- Jsou strojově nezávislé, což by mělo být spuštěno ve strojově nezávislém kódu mikrokernelu.
- Umožňují flexibilní řízení zdrojů.
Nevýhody Semaphores
Zde jsou nevýhody/nevýhody semaforu:
- Jedním z největších omezení semaforu je inverze priority.
- Operační systém musí udržovat track všech volání semaforu wait a signal.
- Jejich použití není nikdy vynuceno, ale je to pouze konvence.
- Abyste se vyhnuli uváznutí v semaforu, použijte funkci Wait and Signal operace musí být provedeny ve správném pořadí.
- Semaphore Programování je složité, takže existuje šance, že se nepodaří dosáhnout 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.
- Semaphore je náchylnější k chybě programátora.
- To může způsobit zablokování nebo porušení vzájemného vyloučení z důvodu chyby programátora.


