logo

Mutex protiv Semafora

Prema terminologiji operativnog sustava, mutex i semafori su resursi jezgre koji pružaju usluge sinkronizacije, također zvane primitive sinkronizacije . Sinkronizacija procesa igra važnu ulogu u održavanju dosljednosti dijeljenih podataka. Prisutna su i softverska i hardverska rješenja za rješavanje problema s kritičnim dijelovima. Ali hardverska rješenja za probleme s kritičnim dijelovima prilično je teško implementirati. Mutex i semafor pružaju usluge sinkronizacije, ali nisu isti.

Što je Mutex?

Mutex je objekt međusobnog isključivanja koji sinkronizira pristup resursu. Stvara se s jedinstvenim imenom na početku programa. Mehanizam za zaključavanje mutexa osigurava da samo jedna nit može preuzeti mutex i ući u kritični odjeljak. Ova nit oslobađa mutex samo kada izađe u kritičnom odjeljku.

Mutex protiv Semafora

To je posebna vrsta binarnog semafora koji se koristi za kontrolu pristupa dijeljenom resursu. Uključuje mehanizam nasljeđivanja prioriteta kako bi se izbjegli problemi proširene inverzije prioriteta. Omogućuje da trenutni zadaci višeg prioriteta ostanu u blokiranom stanju najkraće moguće vrijeme. Međutim, nasljeđivanje prioriteta ne ispravlja inverziju prioriteta, već samo minimizira njezin učinak.

Primjer

To je prikazano uz pomoć sljedećeg primjera,

 wait (mutex); ..... Critical Section ..... signal (mutex); 

Upotreba Mutexa

Mutex omogućuje međusobno isključivanje, bilo proizvođača ili potrošača koji mogu imati ključ (mutex) i nastaviti sa svojim radom. Sve dok proizvođač puni međuspremnik, korisnik mora čekati i obrnuto. U Mutex zaključavanju, cijelo vrijeme, samo jedna nit može raditi s cijelim međuspremnikom.

Kada se program pokrene, on zahtijeva od sustava da stvori mutex objekt za dati resurs. Sustav stvara mutex objekt s jedinstvenim imenom ili ID-om. Kad god programska nit želi koristiti resurs, ona zauzima zaključavanje mutex objekta, koristi resurs i nakon upotrebe otpušta zaključavanje mutex objekta. Tada je sljedećem procesu dopušteno da dobije zaključavanje mutex objekta.

U međuvremenu, proces je preuzeo zaključavanje mutex objekta i nijedna druga nit ili proces ne može pristupiti tom resursu. Ako je mutex objekt već zaključan, proces koji želi zaključati mutex objekt mora čekati i sustav ga stavlja u red dok se mutex objekt ne otključa.

Prednosti Mutexa

Ovdje su sljedeće prednosti mutexa, kao što su:

  • Mutex su samo jednostavna zaključavanja dobivena prije ulaska u njegov kritični odjeljak i zatim otpuštanja.
  • Budući da je samo jedna nit u kritičnom dijelu u bilo kojem trenutku, nema uvjeta utrke, a podaci uvijek ostaju dosljedni.

Nedostaci Mutexa

Mutex također ima neke nedostatke, kao što su:

  • Ako nit dobije zaključavanje i ode u stanje mirovanja ili je preuzeta, onda se druga nit možda neće pomaknuti naprijed. To može dovesti do gladovanja.
  • Ne može se zaključati ili otključati iz konteksta različitog od onog koji ga je stekao.
  • Samo jedna nit smije biti dopuštena u kritičnom odjeljku odjednom.
  • Normalna implementacija može dovesti do zauzetog stanja čekanja, što gubi CPU vrijeme.

Što je Semaphore?

Semafor je jednostavno varijabla koja nije negativna i dijeli se između niti. Semafor je signalni mehanizam, a druga nit može signalizirati nit koja čeka na semaforu.

Mutex protiv Semafora

Semafor koristi dvije atomske operacije,

1. Pričekajte: Operacija čekanja smanjuje vrijednost svog argumenta S ako je pozitivan. Ako je S negativan ili nula, tada se operacija ne izvodi.

 wait(S) { while (S<=0); s--; } < pre> <p> <strong>2. Signal for the process synchronization:</strong> The signal operation increments the value of its argument S.</p> <pre> signal(S) { S++; } </pre> <p>A semaphore either allows or reject access to the resource, depending on how it is set up.</p> <h3>Use of Semaphore</h3> <p>In the case of a single buffer, we can separate the 4 KB buffer into four buffers of 1 KB. Semaphore can be associated with these four buffers, allowing users and producers to work on different buffers simultaneously.</p> <h3>Types of Semaphore</h3> <p>Semaphore is distinguished by the operating system in two categories <strong>Counting semaphore</strong> and <strong>Binary semaphore</strong> .</p> <p> <strong>1. Counting Semaphore:</strong> The semaphore S value is initialized to the <strong>number of resources</strong> present in the system. Whenever a process wants to access the resource, it performs <strong>the wait()</strong> operation on the semaphore and <strong>decrements</strong> the semaphore value by one. When it releases the resource, it performs <strong>the signal()</strong> operation on the semaphore and <strong>increments</strong> the semaphore value by one.</p> <p>When the semaphore count goes to 0, it means the processes occupy all resources. A process needs to use a resource when the semaphore count is 0. It executes the <strong>wait()</strong> operation and gets <strong>blocked</strong> until the semaphore value becomes greater than 0.</p> <img src="//techcodeview.com/img/operating-system/67/mutex-vs-semaphore-3.webp" alt="Mutex vs Semaphore"> <p> <strong>2. Binary semaphore:</strong> The value of a semaphore ranges between <strong>0</strong> and <strong>1</strong> . It is similar to mutex lock, but mutex is a locking mechanism, whereas the semaphore is a signaling mechanism. In binary semaphore, if a process wants to access the resource, it performs <strong>the wait()</strong> operation on the semaphore and decrements the value of the semaphore from 1 to 0. When it releases the resource, it performs a <strong>signal</strong> <strong>()</strong> operation on the semaphore and increments its value to 1. Suppose the value of the semaphore is 0 and a process wants to access the resource. In that case, it performs <strong>wait()</strong> operation and block itself till the current process utilizing the resources releases the resource.</p> <img src="//techcodeview.com/img/operating-system/67/mutex-vs-semaphore-4.webp" alt="Mutex vs Semaphore"> <h3>Advantages of Semaphore</h3> <p>Here are the following advantages of semaphore, such as:</p> <ul> <li>It allows more than one thread to access the critical section.</li> <li>Semaphores are machine-independent.</li> <li>Semaphores are implemented in the machine-independent code of the microkernel.</li> <li>They do not allow multiple processes to enter the critical section.</li> <li>As there is busy and waiting in semaphore, there is never wastage of process time and resources.</li> <li>They are machine-independent, which should be run in the machine-independent code of the microkernel.</li> <li>They allow flexible management of resources.</li> </ul> <h3>Disadvantage of Semaphores</h3> <p>Semaphores also have some disadvantages, such as:</p> <ul> <li>One of the biggest limitations of a semaphore is priority inversion.</li> <li>The operating system has to keep track of all calls to wait and signal semaphore.</li> <li>Their use is never enforced, but it is by convention only.</li> <li>The Wait and Signal operations require to be executed in the correct order to avoid deadlocks in semaphore.</li> <li>Semaphore programming is a complex method, so there are chances of not achieving mutual exclusion.</li> <li>It is also not a practical method for large scale use as their use leads to loss of modularity.</li> <li>Semaphore is more prone to programmer error</li> <li>, and it may cause deadlock or violation of mutual exclusion due to programmer error.</li> </ul> <h3>Difference between Mutex and Semaphore</h3> <p>The basic difference between semaphore and mutex is that semaphore is a signalling mechanism, i.e. processes perform wait() and signal() operation to indicate whether they are acquiring or releasing the resource. In contrast, a mutex is a locking mechanism, and the process has to acquire the lock on a mutex object if it wants to acquire the resource. Here are some more differences between semaphore and mutex, such as:</p> <img src="//techcodeview.com/img/operating-system/67/mutex-vs-semaphore-5.webp" alt="Mutex vs Semaphore"> <br> <table class="table"> <tr> <th>Terms</th> <th>Mutex</th> <th>Semaphore</th> </tr> <tr> <td>Definition</td> <td>The mutex is a locking mechanism, as to acquire a resource, a process needs to lock the mutex object, and while releasing a resource process has to unlock the mutex object.</td> <td>Semaphore is a signalling mechanism as wait() and signal() operations performed on the semaphore variable indicate whether a process is acquiring or releasing the resource.</td> </tr> <tr> <td>Existence</td> <td>A mutex is an object.</td> <td>Semaphore is an integer variable.</td> </tr> <tr> <td>Function</td> <td>Mutex allows multiple program threads to access a single resource but not simultaneously.</td> <td>Semaphore allows multiple program threads to access a finite instance of resources.</td> </tr> <tr> <td>Ownership</td> <td>Mutex object lock is released only by the process that has acquired the lock on the mutex object.</td> <td>Semaphore value can be changed by any process acquiring or releasing the resource by performing wait() and signal() operation.</td> </tr> <tr> <td>Categorize</td> <td>Mutex is not categorized further.</td> <td>The semaphore can be categorized into counting semaphore and binary semaphore.</td> </tr> <tr> <td>Operation</td> <td>The mutex object is locked or unlocked by the process of requesting or releasing the resource.</td> <td>Semaphore value is modified using wait() and signal() operation apart from initialization.</td> </tr> <tr> <td>Resources Occupied</td> <td>If a mutex object is already locked, then the process desiring to acquire resource waits and get queued by the system till the resource is released and the mutex object gets unlocked.</td> <td>Suppose the process acquires all the resources, and no resource is free. In that case, the process desiring to acquire resource performs wait() operation on semaphore variable and blocks itself till the count of semaphore become greater than 0.</td> </tr> </table> <hr></=0);>

Semafor dopušta ili odbija pristup resursu, ovisno o tome kako je postavljen.

Korištenje Semafora

U slučaju jednog međuspremnika, međuspremnik od 4 KB možemo razdvojiti na četiri međuspremnika od 1 KB. Semafor se može povezati s ova četiri međuspremnika, omogućujući korisnicima i proizvođačima da rade na različitim međuspremnicima istovremeno.

Vrste semafora

Semafor se po operativnom sustavu razlikuje u dvije kategorije Semafor za brojanje i Binarni semafor .

1. Semafor za brojanje: Vrijednost semafora S inicijalizira se na broj resursa prisutan u sustavu. Kad god proces želi pristupiti resursu, on to i učini čekanje () operacija na semaforu i smanjivanja vrijednost semafora za jedan. Kada oslobodi resurs, on radi signal() operacija na semaforu i prirasta vrijednost semafora za jedan.

Kada broj semafora prijeđe na 0, to znači da procesi zauzimaju sve resurse. Proces treba koristiti resurs kada je broj semafora 0. On izvršava čekati() operacija i dobiva blokiran dok vrijednost semafora ne postane veća od 0.

Mutex protiv Semafora

2. Binarni semafor: Vrijednost semafora kreće se između 0 i 1 . Sličan je mutex zaključavanju, ali mutex je mehanizam za zaključavanje, dok je semafor signalni mehanizam. U binarnom semaforu, ako proces želi pristupiti resursu, on to i učini čekanje() operaciju na semaforu i smanjuje vrijednost semafora s 1 na 0. Kada oslobodi resurs, izvodi signal () operaciju na semaforu i povećava njegovu vrijednost na 1. Pretpostavimo da je vrijednost semafora 0 i proces želi pristupiti resursu. U tom slučaju djeluje čekati() rad i blokira se dok trenutni proces koji koristi resurse ne oslobodi resurs.

Mutex protiv Semafora

Prednosti Semafora

Evo sljedećih prednosti semafora, kao što su:

  • Omogućuje više od jedne niti da pristupi kritičnom odjeljku.
  • Semafori su neovisni o stroju.
  • Semafori su implementirani u strojno neovisni kod mikrojezgre.
  • Ne dopuštaju da više procesa uđe u kritični odjeljak.
  • Kako u semaforu ima gužve i čekanja, nikada nema gubitka vremena i resursa procesa.
  • Oni su neovisni o stroju, što bi se trebalo izvoditi u kodu mikrojezgre neovisnom o stroju.
  • Omogućuju fleksibilno upravljanje resursima.

Nedostatak semafora

Semafori također imaju neke nedostatke, kao što su:

  • Jedno od najvećih ograničenja semafora je inverzija prioriteta.
  • Operativni sustav mora pratiti sve pozive na čekanje i signalizirati semafor.
  • Njihovo korištenje nikada nije nametnuto, već samo prema konvenciji.
  • Operacije čekanja i signala moraju se izvršavati ispravnim redoslijedom kako bi se izbjegle blokade u semaforu.
  • Semaforsko programiranje je složena metoda, tako da postoje šanse da se ne postigne međusobno isključivanje.
  • To također nije praktična metoda za široku upotrebu jer njihova upotreba dovodi do gubitka modularnosti.
  • Semafor je skloniji greškama programera
  • , i može uzrokovati zastoj ili kršenje uzajamnog isključivanja zbog pogreške programera.

Razlika između Mutexa i Semafora

Osnovna razlika između semafora i muteksa je u tome što je semafor signalni mehanizam, tj. procesi izvode čekanje() i signal() operaciju da naznače da li stječu ili oslobađaju resurs. Nasuprot tome, mutex je mehanizam za zaključavanje, a proces mora steći zaključavanje mutex objekta ako želi steći resurs. Evo još nekih razlika između semafora i muteksa, kao što su:

Mutex protiv Semafora
Pojmovi Mutex Semafor
Definicija Mutex je mehanizam za zaključavanje, budući da za dobivanje resursa proces mora zaključati mutex objekt, a dok otpušta resurs, proces mora otključati mutex objekt. Semafor je signalni mehanizam jer operacije čekanja () i signala () koje se izvode na varijabli semafora pokazuju da li proces stječe ili oslobađa resurs.
Postojanje Muteks je objekt. Semafor je cjelobrojna varijabla.
Funkcija Mutex omogućuje više programskih niti da pristupe jednom resursu, ali ne istovremeno. Semafor omogućuje više programskih niti da pristupe konačnoj instanci resursa.
Vlasništvo Zaključavanje mutex objekta oslobađa samo proces koji je stekao zaključavanje mutex objekta. Vrijednost semafora može se promijeniti bilo kojim procesom koji preuzima ili oslobađa resurs izvođenjem operacija wait() i signal().
Kategoriziraj Mutex nije dalje kategoriziran. Semafor se može kategorizirati u semafor za brojanje i binarni semafor.
Operacija Mutex objekt se zaključava ili otključava postupkom zahtjeva ili otpuštanja resursa. Vrijednost semafora mijenja se korištenjem operacija wait() i signal(), osim inicijalizacije.
Resursi zauzeti Ako je mutex objekt već zaključan, tada proces koji želi dobiti resurs čeka i sustav ga stavlja u red dok se resurs ne oslobodi i mutex objekt ne otključa. Pretpostavimo da proces stječe sve resurse i nijedan resurs nije besplatan. U tom slučaju, proces koji želi pridobiti resurs izvodi operaciju čekanja() na varijabli semafora i blokira se sve dok broj semafora ne postane veći od 0.