logo

Mutex proti Semaforju

Glede na terminologijo operacijskega sistema so mutex in semaforji viri jedra, ki zagotavljajo storitve sinhronizacije, imenovane tudi sinhronizacijski primitivi . Sinhronizacija procesov igra pomembno vlogo pri ohranjanju konsistentnosti skupnih podatkov. Za reševanje težav s kritičnimi odseki sta na voljo tako programska kot strojna rešitev. Toda strojne rešitve za težave kritičnih odsekov je precej težko izvesti. Mutex in semafor zagotavljata storitve sinhronizacije, vendar nista enaka.

Kaj je Mutex?

Mutex je objekt medsebojne izključitve, ki sinhronizira dostop do vira. Ustvari se z edinstvenim imenom na začetku programa. Mehanizem za zaklepanje mutexa zagotavlja, da lahko samo ena nit pridobi mutex in vstopi v kritični del. Ta nit sprosti samo mutex, ko zapusti kritični del.

Mutex proti Semaforju

Je posebna vrsta binarnega semaforja, ki se uporablja za nadzor dostopa do skupnega vira. Vključuje mehanizem prednostnega dedovanja, da se izognete razširjenim težavam z inverzijo prioritet. Omogoča, da trenutna opravila z višjo prioriteto ostanejo v blokiranem stanju najkrajši možni čas. Vendar prednostno dedovanje ne popravi prednostne inverzije, ampak le zmanjša njen učinek.

Primer

To je prikazano s pomočjo naslednjega primera,

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

Uporaba Mutexa

Mutex zagotavlja medsebojno izključitev, bodisi proizvajalca bodisi potrošnika, ki ima lahko ključ (mutex) in nadaljuje s svojim delom. Dokler proizvajalec polni medpomnilnik, mora uporabnik čakati in obratno. V ključavnici Mutex lahko ves čas samo ena nit deluje s celotnim medpomnilnikom.

Ko se program zažene, od sistema zahteva, da ustvari objekt mutex za dani vir. Sistem ustvari objekt mutex z edinstvenim imenom ali ID-jem. Kadarkoli programska nit želi uporabiti vir, zavzame zaklepanje objekta mutex, uporabi vir in po uporabi sprosti zaklepanje objekta mutex. Nato lahko naslednji proces pridobi zaklepanje objekta mutex.

Medtem je proces pridobil zaklepanje objekta mutex in nobena druga nit ali proces ne more dostopati do tega vira. Če je objekt mutex že zaklenjen, mora proces, ki želi pridobiti zaklepanje objekta mutex, počakati in ga sistem postavi v čakalno vrsto, dokler se objekt mutex ne odklene.

Prednosti Mutexa

Tu so naslednje prednosti mutexa, kot so:

  • Mutex so samo preproste ključavnice, pridobljene pred vstopom v njegov kritični del in nato sprostitvijo.
  • Ker je samo ena nit v svojem kritičnem delu v danem trenutku, ni tekmovalnih pogojev in podatki vedno ostanejo dosledni.

Slabosti Mutexa

Mutex ima tudi nekaj slabosti, kot so:

  • Če nit pridobi zaklepanje in gre v stanje spanja ali je prevzeta, se druga nit morda ne bo premaknila naprej. To lahko povzroči lakoto.
  • Ni ga mogoče zakleniti ali odkleniti iz konteksta, ki ni tisti, ki ga je pridobil.
  • V kritičnem razdelku mora biti hkrati dovoljena samo ena nit.
  • Običajna izvedba lahko povzroči zasedeno čakajoče stanje, ki zapravlja čas procesorja.

Kaj je Semafor?

Semafor je preprosto spremenljivka, ki ni negativna in se deli med nitmi. Semafor je signalni mehanizem in druga nit lahko signalizira nit, ki čaka na semafor.

Mutex proti Semaforju

Semafor uporablja dve atomski operaciji,

1. Počakajte: Operacija čakanja zmanjša vrednost svojega argumenta S, če je pozitiven. Če je S negativen ali nič, se ne izvede nobena operacija.

 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 dovoli ali zavrne dostop do vira, odvisno od tega, kako je nastavljen.

Uporaba Semaforja

V primeru enega vmesnega pomnilnika lahko medpomnilnik s 4 KB razdelimo na štiri medpomnilnike po 1 KB. Semafor je mogoče povezati s temi štirimi medpomnilniki, kar uporabnikom in proizvajalcem omogoča sočasno delo na različnih medpomnilnikih.

Vrste semaforjev

Semafor razlikuje operacijski sistem v dveh kategorijah Semafor za štetje in Binarni semafor .

1. Semafor za štetje: Vrednost semaforja S se inicializira na število virov prisoten v sistemu. Kadarkoli želi proces dostopati do vira, to izvede čakanje () delovanje na semaforju in zmanjšanja vrednost semaforja za eno. Ko sprosti vir, deluje signal () delovanje na semaforju in povečanja vrednost semaforja za eno.

Ko gre število semaforjev na 0, to pomeni, da procesi zasedajo vse vire. Proces mora uporabiti vir, ko je število semaforjev 0. Izvede počakaj() delovanje in dobi blokiran dokler vrednost semaforja ne postane večja od 0.

Mutex proti Semaforju

2. Binarni semafor: Vrednost semaforja se giblje med 0 in 1 . Podobno je zaklepanju mutexa, vendar je mutex mehanizem za zaklepanje, medtem ko je semafor signalni mehanizem. V binarnem semaforju proces izvede, če želi dostopati do vira čakanje () operacijo na semaforju in zmanjša vrednost semaforja z 1 na 0. Ko sprosti vir, izvede signal () operacijo na semaforju in poveča njegovo vrednost na 1. Recimo, da je vrednost semaforja 0 in proces želi dostopati do vira. V tem primeru deluje počakaj() delovanje in se blokira, dokler trenutni proces, ki uporablja vire, ne sprosti vira.

Mutex proti Semaforju

Prednosti Semaforja

Tukaj so naslednje prednosti semaforja, kot so:

  • Omogoča več kot eni niti dostop do kritičnega odseka.
  • Semaforji so neodvisni od stroja.
  • Semaforji so implementirani v strojno neodvisno kodo mikrojedra.
  • Ne dovolijo, da več procesov vstopi v kritični del.
  • Ker je v semaforju zaseden čas in čakanje, nikoli ne pride do izgube časa in virov procesa.
  • So strojno neodvisni, ki bi se morali izvajati v strojno neodvisni kodi mikrojedra.
  • Omogočajo fleksibilno upravljanje virov.

Slabost semaforjev

Semaforji imajo tudi nekaj slabosti, kot so:

  • Ena največjih omejitev semaforja je prednostna inverzija.
  • Operacijski sistem mora spremljati vse klice čakanja in signalizirati semafor.
  • Njihova uporaba ni nikoli vsiljena, ampak samo po dogovoru.
  • Operaciji Čakaj in Signal morata biti izvedeni v pravilnem vrstnem redu, da se izognemo zastojem v semaforju.
  • Programiranje semaforja je zapletena metoda, zato obstaja možnost, da medsebojna izključitev ne bo dosežena.
  • Prav tako ni praktična metoda za uporabo v velikem obsegu, saj njihova uporaba povzroči izgubo modularnosti.
  • Semafor je bolj nagnjen k programerskim napakam
  • , in lahko povzroči zastoj ali kršitev medsebojnega izključevanja zaradi napake programerja.

Razlika med Mutexom in Semaforjem

Osnovna razlika med semaforjem in muteksom je v tem, da je semafor signalni mehanizem, tj. procesi izvajajo operacijo wait() in signal(), da pokažejo, ali pridobivajo ali sproščajo vir. V nasprotju s tem je mutex mehanizem za zaklepanje in proces mora pridobiti zaklepanje objekta mutexa, če želi pridobiti vir. Tu je še nekaj razlik med semaforjem in muteksom, kot so:

Mutex proti Semaforju
Pogoji Mutex Semafor
Opredelitev Mutex je mehanizem za zaklepanje, saj mora proces za pridobitev vira zakleniti objekt mutexa, medtem ko mora proces vira odkleniti objekt mutexa. Semafor je signalni mehanizem, saj operaciji wait() in signal(), ki se izvajata na spremenljivki semaforja, kažeta, ali proces pridobiva ali sprošča vir.
Obstoj Muteks je objekt. Semafor je celoštevilska spremenljivka.
funkcija Mutex omogoča več programskim nitim dostop do enega vira, vendar ne istočasno. Semafor omogoča več programskim nitim dostop do končnega primerka virov.
Lastništvo Zaklepanje objekta mutex sprosti samo proces, ki je pridobil zaklepanje objekta mutex. Vrednost semaforja lahko spremeni kateri koli proces, ki pridobi ali sprosti vir z izvedbo operacije wait() in signal().
Kategoriziraj Mutex ni dodatno kategoriziran. Semafor lahko kategoriziramo v semafor za štetje in binarni semafor.
Delovanje Objekt mutex se zaklene ali odklene s postopkom zahtevanja ali sprostitve vira. Vrednost semaforja se poleg inicializacije spremeni z operacijo wait() in signal().
Viri zasedeni Če je objekt mutex že zaklenjen, potem proces, ki želi pridobiti vir, čaka in ga sistem postavi v čakalno vrsto, dokler se vir ne sprosti in objekt mutex ne odklene. Recimo, da proces pridobi vse vire in noben vir ni brezplačen. V tem primeru proces, ki želi pridobiti vir, izvede operacijo čakanja() na spremenljivki semaforja in se blokira, dokler število semaforja ne postane večje od 0.