Čo je Semafor?
Semafor je jednoducho premenná, ktorá nie je negatívna a je zdieľaná medzi vláknami. Semafor je signalizačný mechanizmus a vlákno, ktoré čaká na semafore, môže byť signalizované iným vláknom. Využíva dve atómové operácie, 1) čakací a 2) signál na synchronizáciu procesu.
Semafor buď povoľuje, alebo zakazuje prístup k prostriedku, čo závisí od spôsobu jeho nastavenia.
V tejto príručke k operačnému systému (OS) sa dozviete:
- Charakteristické pre Semafor
- Čo je Semafor?
- Druhy semaforov
- Ukážka semaforu
- Čakanie a operácie so signálmi v semaforoch
- Počítanie semafor vs. binárny semafor
- Rozdiel medzi Semaforom a Mutexom
- Výhody semaforov
- Nevýhoda semaforov
Charakteristické pre Semafor
Tu sú charakteristické vlastnosti semaforu:
- Je to mechanizmus, ktorý možno použiť na zabezpečenie synchronizácie úloh.
- Je to synchronizačný mechanizmus na nízkej úrovni.
- Semafor bude vždy obsahovať nezápornú celočíselnú hodnotu.
- Semafor je možné implementovať pomocou testovacích operácií a prerušení, ktoré by sa mali vykonať pomocou deskriptorov súborov.
Druhy semaforov
Dva bežné druhy semaforov sú
- Počítanie semaforov
- Binárne semafory.
Počítanie semaforov
Tento typ semaforu používa počet, ktorý pomáha pri získaní alebo vydaní úlohy viackrát. Ak je počiatočný počet = 0, počítací semafor by sa mal vytvoriť v nedostupnom stave.
Ak je však počet> 0, semafor sa vytvorí v dostupnom stave a počet jeho tokenov sa rovná jeho počtu.
Binárne semafory
Binárne semafory sú dosť podobné počítaniu semaforov, ale ich hodnota je obmedzená na 0 a 1. V tomto type semaforu operácia čakania funguje, iba ak semafor = 1, a operácia signálu bude úspešná, keď semafor = 0. Je ľahké implementovať ako počítať semafory.
Ukážka semaforu
Nižšie uvedený program predstavuje implementáciu krok za krokom, ktorá zahŕňa použitie a deklaráciu semaforu.
Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;
Čakanie a operácie so signálmi v semaforoch
Obe tieto operácie sa používajú na implementáciu synchronizácie procesov. Cieľom tejto semaforovej operácie je získať vzájomné vylúčenie.
Počkajte na operáciu
Tento typ semaforovej operácie vám pomáha kontrolovať zadanie úlohy do kritickej sekcie. Ak je však hodnota čakania kladná, potom sa hodnota argumentu čakania X zníži. V prípade zápornej alebo nulovej hodnoty sa nevykoná žiadna operácia. Nazýva sa tiež P (S) prevádzka.
Po znížení hodnoty semaforu, ktorá sa stane zápornou, sa príkaz podrží, kým nie sú splnené požadované podmienky.
Copy CodeP(S){while (S<=0);S--;}
Prevádzka signálu
Tento typ operácie Semafor sa používa na riadenie ukončenia úlohy z kritického úseku. Pomáha zvýšiť hodnotu argumentu o 1, ktorá sa označuje ako V (S).
Copy CodeP(S){while (S>=0);S++;}
Počítanie semafor vs. binárny semafor
Tu sú niektoré hlavné rozdiely medzi počítaním a binárnym semaforom:
Počítam semafor | Binárny semafor |
Žiadne vzájomné vylúčenie | Vzájomné vylúčenie |
Ľubovoľná celočíselná hodnota | Hodnota iba 0 a 1 |
Viac ako jeden slot | Iba jeden slot |
Poskytnite súbor procesov | Má mechanizmus vzájomného vylúčenia. |
Rozdiel medzi Semaforom a Mutexom
Parametre | Semafor | Mutex |
Mechanizmus | Je to druh signalizačného mechanizmu. | Je to uzamykací mechanizmus. |
Dátový typ | Semafor je celočíselná premenná. | Mutex je iba objekt. |
Úprava | Operácie čakania a signálu môžu upraviť semafor. | Je upravený iba procesom, ktorý môže požadovať alebo uvoľniť zdroj. |
Riadenie zdrojov | Ak žiadny zdroj nie je zadarmo, potom proces vyžaduje zdroj, ktorý by mal vykonať čakaciu operáciu. Mal by počkať, kým počet semaforov nebude väčší ako 0. | Ak je zamknutá, proces musí čakať. Tento proces by mal byť vedený v rade. K tomuto je potrebné pristupovať, len keď je odomknutý mutex. |
Závit | Môžete mať viac vlákien programu. | V mutexe môžete mať viac vlákien programu, ale nie súčasne. |
Vlastníctvo | Hodnotu je možné zmeniť akýmkoľvek procesom, ktorý uvoľní alebo získa zdroj. | Zámok objektu sa uvoľní iba procesom, ktorý získal zámok na ňom. |
Typy | Typy semaforu sú počítanie semaforov a binárnych semaforov a | Mutex nemá žiadne podtypy. |
Prevádzka | Hodnota semaforu sa upravuje pomocou čakania () a signálu (). | Objekt Mutex je zamknutý alebo odomknutý. |
Obsadenosť zdrojov | Obsadí sa, ak sa používajú všetky zdroje a proces požadujúci zdroj vykoná operáciu wait () a sám sa zablokuje, kým sa počet semaforov nestane> 1. | V prípade, že je objekt už uzamknutý, proces požadujúci prostriedky čaká a je v systéme zaradený do fronty pred uvoľnením zámku. |
Výhody semaforov
Tu sú výhody a výhody použitia Semaphore:
- Umožňuje viac ako jednému vláknu prístup do kritickej sekcie
- Semafory sú nezávislé od strojov.
- Semafory sú implementované do strojovo nezávislého kódu mikrojadra.
- Nedovolia viacerým procesom vstúpiť do kritickej sekcie.
- Pretože v semafore je veľa práce s čakaním, nikdy nedochádza k plytvaniu procesným časom a prostriedkami.
- Sú nezávislé od stroja, ktoré by sa mali spúšťať v strojovo nezávislom kóde mikrojadra.
- Umožňujú flexibilné riadenie zdrojov.
Nevýhoda semaforov
Tu sú nevýhody / nevýhody semaforu
- Jedným z najväčších obmedzení semaforu je prioritná inverzia.
- Operačný systém musí sledovať všetky hovory, aby čakal a signalizoval semafor.
- Ich použitie sa nikdy nevynucuje, ale je to len na základe konvencie.
- Aby sa zabránilo zablokovaniu v semafore, je potrebné vykonať operácie Wait a Signal v správnom poradí.
- Programovanie semaforov je komplikované, takže existuje šanca, že sa nedosiahne vzájomné vylúčenie.
- Nie je to ani praktická metóda pre veľké použitie, pretože ich použitie vedie k strate modularity.
- Semafor je náchylnejší na chyby programátora.
- Môže to spôsobiť zablokovanie alebo porušenie vzájomného vylúčenia v dôsledku chyby programátora.
Zhrnutie:
- Semafor je definovaný ako premenná, ktorá nie je negatívna a je zdieľaná medzi vláknami.
- Je to mechanizmus, ktorý možno použiť na zabezpečenie synchronizácie úloh.
- Počítací semafor používa počet, ktorý pomáha pri získaní alebo vydaní úlohy viackrát.
- Binárne semafory sú dosť podobné počítaniu semaforov, ale ich hodnota je obmedzená na 0 a 1.
- Operácia Wait vám pomôže riadiť zadanie úlohy do kritickej časti
- Operácia semaforu signálu sa používa na riadenie ukončenia úlohy z kritického úseku
- Počítanie semaforu nemá žiadne vzájomné vylúčenie, zatiaľ čo binárny semafor nemá vzájomné vylúčenie
- Semafor znamená signalizačný mechanizmus, zatiaľ čo Mutex je uzamykací mechanizmus
- Semafor umožňuje viac ako jednému vláknu prístup do kritickej sekcie
- Jedným z najväčších obmedzení semaforu je prioritná inverzia.