logo

Mutex vs Semàfor

Segons la terminologia del sistema operatiu, mutex i semàfors són recursos del nucli que proporcionen serveis de sincronització, també anomenats primitives de sincronització . La sincronització de processos té un paper important per mantenir la coherència de les dades compartides. Tant les solucions de programari com de maquinari estan presents per gestionar problemes de seccions crítiques. Però les solucions de maquinari per a problemes de seccions crítiques són força difícils d'implementar. Mutex i semàfor ofereixen serveis de sincronització, però no són el mateix.

Què és Mutex?

Mutex és un objecte d'exclusió mútua que sincronitza l'accés a un recurs. Es crea amb un nom únic a l'inici d'un programa. El mecanisme de bloqueig del mutex garanteix que només un fil pugui adquirir el mutex i entrar a la secció crítica. Aquest fil només allibera el mutex quan surt a la secció crítica.

Mutex vs Semàfor

És un tipus especial de semàfor binari utilitzat per controlar l'accés al recurs compartit. Inclou un mecanisme d'herència de prioritats per evitar problemes d'inversió de prioritat estesa. Permet mantenir les tasques actuals de major prioritat en l'estat bloquejat durant el menor temps possible. Tanmateix, l'herència de prioritats no corregeix la inversió de prioritats sinó que només en minimitza l'efecte.

Exemple

Això es mostra amb l'ajuda de l'exemple següent,

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

Ús de Mutex

Un mutex proporciona l'exclusió mútua, ja sigui productor o consumidor que pot tenir la clau (mutex) i continuar amb el seu treball. Mentre el productor omple el buffer, l'usuari ha d'esperar, i viceversa. Al bloqueig Mutex, sempre, només un fil pot funcionar amb tot el buffer.

Quan s'inicia un programa, demana al sistema que creï un objecte mutex per a un recurs determinat. El sistema crea l'objecte mutex amb un nom o identificador únic. Sempre que el fil del programa vol utilitzar el recurs, ocupa el bloqueig a l'objecte mutex, utilitza el recurs i després de l'ús, allibera el bloqueig a l'objecte mutex. A continuació, es permet el següent procés per adquirir el bloqueig de l'objecte mutex.

Mentrestant, un procés ha adquirit el bloqueig a l'objecte mutex i cap altre fil o procés pot accedir a aquest recurs. Si l'objecte mutex ja està bloquejat, el procés que vol adquirir el bloqueig a l'objecte mutex ha d'esperar i el sistema posa a la cua fins que l'objecte mutex es desbloqueja.

Avantatges de Mutex

Aquests són els següents avantatges del mutex, com ara:

  • Mutex és només simples panys obtinguts abans d'entrar a la seva secció crítica i després alliberar-lo.
  • Com que només un fil es troba a la seva secció crítica en un moment donat, no hi ha condicions de carrera i les dades sempre es mantenen coherents.

Desavantatges de Mutex

Mutex també té alguns desavantatges, com ara:

  • Si un fil obté un bloqueig i s'apaga o és preempt, és possible que l'altre fil no avanci. Això pot conduir a la fam.
  • No es pot bloquejar ni desbloquejar des d'un context diferent del que l'ha adquirit.
  • Només s'ha de permetre un fil a la secció crítica alhora.
  • La implementació normal pot conduir a un estat d'espera ocupat, que malgasta temps de CPU.

Què és el semàfor?

El semàfor és simplement una variable que no és negativa i que es comparteix entre fils. Un semàfor és un mecanisme de senyalització, i un altre fil pot senyalitzar un fil que està esperant en un semàfor.

Mutex vs Semàfor

Un semàfor utilitza dues operacions atòmiques,

1. Espera: L'operació d'espera disminueix el valor del seu argument S si és positiu. Si S és negatiu o zero, no es realitza cap operació.

 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);>

Un semàfor permet o rebutja l'accés al recurs, depenent de com estigui configurat.

Ús del semàfor

En el cas d'un sol buffer, podem separar el buffer de 4 KB en quatre buffers d'1 KB. El semàfor es pot associar amb aquests quatre buffers, permetent als usuaris i productors treballar en diferents buffers simultàniament.

Tipus de semàfor

Semàfor es distingeix pel sistema operatiu en dues categories Semàfor de recompte i Semàfor binari .

1. Semàfor de recompte: El valor S del semàfor s'inicialitza a nombre de recursos present al sistema. Sempre que un procés vol accedir al recurs, funciona l'espera () operació sobre el semàfor i disminueix el valor del semàfor en un. Quan allibera el recurs, funciona el senyal () operació sobre el semàfor i increments el valor del semàfor en un.

Quan el recompte de semàfors arriba a 0, vol dir que els processos ocupen tots els recursos. Un procés necessita utilitzar un recurs quan el nombre de semàfors és 0. Executa el espera () funcionament i obté bloquejat fins que el valor del semàfor sigui superior a 0.

Mutex vs Semàfor

2. Semàfor binari: El valor d'un semàfor oscil·la entre 0 i 1 . És similar al bloqueig mutex, però el mutex és un mecanisme de bloqueig, mentre que el semàfor és un mecanisme de senyalització. En el semàfor binari, si un procés vol accedir al recurs, ho fa l'espera () operació sobre el semàfor i disminueix el valor del semàfor d'1 a 0. Quan allibera el recurs, realitza una senyal () operació sobre el semàfor i n'augmenta el valor a 1. Suposem que el valor del semàfor és 0 i un procés vol accedir al recurs. En aquest cas, funciona espera () funcionament i es bloqueja fins que el procés actual que utilitza els recursos alliberi el recurs.

Mutex vs Semàfor

Avantatges de Semàfor

Aquests són els següents avantatges del semàfor, com ara:

  • Permet que més d'un fil accedeixi a la secció crítica.
  • Els semàfors són independents de la màquina.
  • Els semàfors s'implementen al codi independent de la màquina del micronucli.
  • No permeten que diversos processos entrin a la secció crítica.
  • Com que hi ha ocupat i esperant al semàfor, mai es malbarata el temps i els recursos del procés.
  • Són independents de la màquina, que s'han d'executar al codi independent de la màquina del micronucli.
  • Permeten una gestió flexible dels recursos.

Desavantatge dels semàfors

Els semàfors també tenen alguns desavantatges, com ara:

  • Una de les majors limitacions d'un semàfor és la inversió de prioritat.
  • El sistema operatiu ha de fer un seguiment de totes les trucades per esperar i senyalitzar el semàfor.
  • El seu ús mai s'aplica, però només és per convenció.
  • Les operacions d'espera i senyal s'han d'executar en l'ordre correcte per evitar bloquejos al semàfor.
  • La programació de semàfors és un mètode complex, de manera que hi ha possibilitats de no aconseguir l'exclusió mútua.
  • Tampoc és un mètode pràctic per a un ús a gran escala, ja que el seu ús comporta una pèrdua de modularitat.
  • El semàfor és més propens a errors del programador
  • , i pot provocar un bloqueig o una violació de l'exclusió mútua a causa d'un error del programador.

Diferència entre Mutex i Semàfor

La diferència bàsica entre semàfor i mutex és que el semàfor és un mecanisme de senyalització, és a dir, els processos realitzen operacions wait() i signal() per indicar si estan adquirint o alliberant el recurs. En canvi, un mutex és un mecanisme de bloqueig, i el procés ha d'adquirir el bloqueig en un objecte mutex si vol adquirir el recurs. Aquí hi ha algunes diferències més entre semàfor i mutex, com ara:

Mutex vs Semàfor
Termes Mutex Semàfor
Definició El mutex és un mecanisme de bloqueig, ja que per adquirir un recurs, un procés ha de bloquejar l'objecte mutex i, mentre allibera un recurs, el procés ha de desbloquejar l'objecte mutex. El semàfor és un mecanisme de senyalització ja que les operacions wait() i signal() realitzades a la variable semàfor indiquen si un procés està adquirint o alliberant el recurs.
Existència Un mutex és un objecte. El semàfor és una variable entera.
Funció Mutex permet que diversos fils de programa accedeixin a un sol recurs però no simultàniament. El semàfor permet que diversos fils de programa accedeixin a una instància finita de recursos.
Propietat El bloqueig de l'objecte Mutex només s'allibera pel procés que ha adquirit el bloqueig a l'objecte Mutex. El valor del semàfor es pot canviar mitjançant qualsevol procés que adquireixi o alliberi el recurs mitjançant l'operació wait() i signal().
categoritzar Mutex no es classifica més. El semàfor es pot classificar en semàfor de recompte i semàfor binari.
Funcionament L'objecte mutex està bloquejat o desbloquejat pel procés de sol·licitud o alliberament del recurs. El valor del semàfor es modifica mitjançant l'operació wait() i signal() a part de la inicialització.
Recursos Ocupats Si un objecte mutex ja està bloquejat, el procés que vol adquirir el recurs espera i el sistema posa a la cua fins que el recurs s'allibera i l'objecte mutex es desbloqueja. Suposem que el procés adquireix tots els recursos i cap recurs és lliure. En aquest cas, el procés que vol adquirir el recurs realitza l'operació wait() a la variable del semàfor i es bloqueja fins que el recompte del semàfor sigui superior a 0.