Č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 tomto návode sa dozviete:
- Čo je Mutex?
- Využitie Semaforu
- Používanie Mutexu
- Rozdiel medzi Semaforom a Mutexom
- Bežné mylné predstavy o Mutexe a Semafore
- Výhody semaforu
- Výhody Mutexu
- Nevýhoda Semaforov
- Nevýhody Mutexu
Čo je Mutex?
Plná forma Mutexu je objekt vzájomného vylúčenia. Je to špeciálny typ binárneho semaforu, ktorý sa používa na riadenie prístupu k zdieľanému prostriedku. Zahŕňa mechanizmus prioritného dedenia, aby sa zabránilo problémom s inverziou prioritnej priority. Umožňuje udržanie aktuálnych úloh s vyššou prioritou v blokovanom stave po čo najkratší čas. Avšak prioritné dedičstvo neopravuje inverziu priority, ale iba minimalizuje jeho účinok.
KĽÚČOVÝ ROZDIEL
- Mutex je blokovací mechanizmus, zatiaľ čo Semafor je signalizačný mechanizmus
- Mutex je iba objekt, zatiaľ čo Semafor celé číslo
- Mutex nemá žiadny podtyp, zatiaľ čo Semafor má dva typy, ktoré počítajú semafor a binárny semafor.
- Semafor podporuje modifikáciu operácií čakania a signálu, zatiaľ čo program Mutex je upravovaný iba procesom, ktorý môže vyžadovať alebo uvoľniť zdroj.
- Hodnota semaforu sa upravuje pomocou operácií wait () a signal (), na druhej strane sú operácie Mutex zamknuté alebo odomknuté.
Využitie Semaforu
V prípade jedinej medzipamäte môžeme rozdeliť 4 KB medzipamäť na štyri 1 KB medzipamäte. Semafor je možné spojiť s týmito štyrmi nárazníkmi. To umožňuje používateľom a producentom pracovať na rôznych vyrovnávacích pamätiach súčasne.
Používanie Mutexu
Mutex poskytuje vzájomné vylúčenie, ktorým môže byť buď výrobca, alebo spotrebiteľ, ktorí môžu mať kľúč (mutex) a pokračovať v práci. Pokiaľ výrobca vyplní vyrovnávaciu pamäť, musí používateľ čakať, a naopak. V zámku Mutex vždy môže pracovať s celou vyrovnávacou pamäťou iba jedna niť.
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. | 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šeobecné fakty o Mutexe a Semafore
Tu uvádzame niekoľko bežných faktov o Mutexe a Semafore:
- Mutex môže získať iba jedna úloha. S mutexom je teda spojené vlastníctvo a mutex môže uvoľniť iba jeho vlastník.
- Dôvody použitia mutexu a semaforu sú rôzne, možno kvôli podobnosti pri ich implementácii by sa mutex označoval ako binárny semafor.
- Jedna veľmi známa mylná predstava je, že Mutexy a Semafory sú takmer rovnaké, iba s tým rozdielom, že Mutex je schopný počítať do 1, zatiaľ čo Semafory sú schopné počítať od 0 do N.
- Medzi binárnym semaforom a mutexom vždy existuje neistota. Môžete počuť, že mutex je binárny semafor, čo nie je správne.
Výhody semaforu
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.
Výhody Mutexu
Tu sú dôležité výhody a výhody Mutexu
- Mutexy sú iba jednoduché zámky získané pred vstupom do jeho kritickej časti a následným uvoľnením.
- Pretože v danom okamihu je v kritickej sekcii iba jedno vlákno, neexistujú žiadne rasové podmienky a údaje vždy zostávajú konzistentné.
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í.
- Semaforové programovanie je zložitá metóda, 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.
Nevýhody Mutexu
Tu sú nevýhody / nevýhody Mutexu
- Ak vlákno získa zámok a prejde do režimu spánku alebo je to predvídané, nemusí sa druhé vlákno pohybovať vpred. To môže viesť k hladu.
- Nedá sa zamknúť alebo odomknúť z iného kontextu, ako je ten, ktorý ho získal.
- V kritickej sekcii by malo byť súčasne povolené iba jedno vlákno.
- Normálna implementácia môže viesť k zaneprázdnenému čakajúcemu stavu, ktorý stráca čas CPU.