logo

Mutex pret semaforu

Saskaņā ar operētājsistēmas terminoloģiju mutex un semafori ir kodola resursi, kas nodrošina sinhronizācijas pakalpojumus, ko sauc arī par sinhronizācijas primitīvi . Procesu sinhronizācijai ir svarīga loma koplietoto datu konsekvences uzturēšanā. Gan programmatūras, gan aparatūras risinājumi ir pieejami kritisko sadaļu problēmu risināšanai. Bet aparatūras risinājumus kritisko sadaļu problēmām ir diezgan grūti ieviest. Gan Mutex, gan semafors nodrošina sinhronizācijas pakalpojumus, taču tie nav vienādi.

Kas ir Mutex?

Mutex ir savstarpējas izslēgšanas objekts, kas sinhronizē piekļuvi resursam. Programmas sākumā tas tiek izveidots ar unikālu nosaukumu. Mutex bloķēšanas mehānisms nodrošina, ka tikai viens pavediens var iegūt mutex un iekļūt kritiskajā sadaļā. Šis pavediens atbrīvo mutex tikai tad, kad tas iziet no kritiskās sadaļas.

Mutex pret semaforu

Tas ir īpašs binārā semafora veids, ko izmanto, lai kontrolētu piekļuvi koplietotajam resursam. Tas ietver prioritātes mantošanas mehānismu, lai izvairītos no paplašinātām prioritātes inversijas problēmām. Tas ļauj pašreizējos augstākas prioritātes uzdevumus saglabāt bloķētā stāvoklī pēc iespējas īsākā laikā. Tomēr prioritātes mantošana neizlabo prioritātes inversiju, bet tikai samazina tās ietekmi.

Piemērs

Tas ir parādīts, izmantojot šādu piemēru,

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

Mutex lietošana

Mutex nodrošina savstarpēju izslēgšanu no ražotāja vai patērētāja, kuram var būt atslēga (mutex) un turpināt savu darbu. Kamēr ražotājs aizpilda buferi, lietotājam ir jāgaida, un otrādi. Mutex lock visu laiku var darboties tikai viens pavediens ar visu buferi.

Kad programma startē, tā pieprasa sistēmai izveidot mutex objektu konkrētajam resursam. Sistēma izveido mutex objektu ar unikālu nosaukumu vai ID. Ikreiz, kad programmas pavediens vēlas izmantot resursu, tas aizņem mutex objekta bloķēšanu, izmanto resursu un pēc lietošanas atbrīvo mutex objekta bloķēšanu. Pēc tam nākamajam procesam ir atļauts iegūt mutex objekta bloķēšanu.

Tikmēr process ir bloķējis mutex objektu, un neviens cits pavediens vai process nevar piekļūt šim resursam. Ja mutex objekts jau ir bloķēts, procesam, kas vēlas iegūt mutex objekta bloķēšanu, ir jāgaida, un sistēma to ievieto rindā, līdz mutex objekts tiek atbloķēts.

Mutex priekšrocības

Šeit ir šādas mutex priekšrocības, piemēram:

  • Mutex ir tikai vienkāršas slēdzenes, kas iegūtas pirms ieiešanas tās kritiskajā sadaļā un pēc tam tās atlaišanas.
  • Tā kā jebkurā brīdī kritiskajā sadaļā ir tikai viens pavediens, nav sacensību apstākļu, un dati vienmēr ir konsekventi.

Mutex trūkumi

Mutex ir arī daži trūkumi, piemēram:

  • Ja pavediens iegūst bloķēšanu un iet miega režīmā vai tiek novērsts, otrs pavediens var nevirzīt uz priekšu. Tas var izraisīt badu.
  • To nevar bloķēt vai atbloķēt no cita konteksta, nevis tajā, kas to ieguva.
  • Kritiskajā sadaļā vienlaikus ir jāatļauj tikai viens pavediens.
  • Parasta ieviešana var izraisīt aizņemtu gaidīšanas stāvokli, kas tērē CPU laiku.

Kas ir semafors?

Semafors ir vienkārši mainīgais, kas nav negatīvs un tiek koplietots starp pavedieniem. Semafors ir signalizācijas mehānisms, un cits pavediens var signalizēt pavedienu, kas gaida semaforā.

Mutex pret semaforu

Semafors izmanto divas atomu darbības,

1. Pagaidiet: Gaidīšanas darbība samazina argumenta S vērtību, ja tā ir pozitīva. Ja S ir negatīvs vai nulle, tad darbība netiek veikta.

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

Semafors atļauj vai noraida piekļuvi resursam atkarībā no tā, kā tas ir iestatīts.

Semafora izmantošana

Viena bufera gadījumā mēs varam sadalīt 4 KB buferi četros 1 KB buferos. Semaforu var saistīt ar šiem četriem buferiem, ļaujot lietotājiem un ražotājiem vienlaikus strādāt ar dažādiem buferiem.

Semafora veidi

Semafors atšķiras ar operētājsistēmu divās kategorijās Skaitīšanas semafors un Binārais semafors .

1. Semafora skaitīšana: Semafora S vērtība tiek inicializēta uz resursu skaitu atrodas sistēmā. Ikreiz, kad process vēlas piekļūt resursam, tas darbojas gaidīšana () darbība uz semafora un samazinājumi semafora vērtību ar vienu. Kad tas atbrīvo resursu, tas darbojas signāls () darbība uz semafora un pieaugumu semafora vērtību ar vienu.

Kad semaforu skaits sasniedz 0, tas nozīmē, ka procesi aizņem visus resursus. Procesam ir jāizmanto resurss, ja semaforu skaits ir 0. Tas izpilda gaidi () darbība un izpaužas bloķēts līdz semafora vērtība kļūst lielāka par 0.

Mutex pret semaforu

2. Binārais semafors: Semafora vērtība svārstās no 0 un 1 . Tas ir līdzīgs mutex bloķēšanai, bet mutex ir bloķēšanas mehānisms, savukārt semafors ir signalizācijas mehānisms. Binārajā semaforā, ja process vēlas piekļūt resursam, tas tiek veikts gaidīšana () darbība ar semaforu un samazina semafora vērtību no 1 līdz 0. Kad tas atbrīvo resursu, tas veic signāls () darbība ar semaforu un palielina tā vērtību līdz 1. Pieņemsim, ka semafora vērtība ir 0 un process vēlas piekļūt resursam. Tādā gadījumā tas darbojas gaidi () darbību un bloķē sevi, līdz pašreizējais process, kas izmanto resursus, atbrīvos resursu.

Mutex pret semaforu

Semafora priekšrocības

Šeit ir šādas semafora priekšrocības, piemēram:

  • Tas ļauj vairāk nekā vienam pavedienam piekļūt kritiskajai sadaļai.
  • Semafori ir neatkarīgi no mašīnas.
  • Semafori ir ieviesti no mašīnas neatkarīgā mikrokodola kodā.
  • Tie neļauj vairākiem procesiem iekļūt kritiskajā sadaļā.
  • Tā kā ir aizņemts un gaida semaforā, nekad netiek tērēts procesa laiks un resursi.
  • Tie ir no mašīnas neatkarīgi, un tie ir jāpalaiž no mašīnas neatkarīgā mikrokodola kodā.
  • Tie ļauj elastīgi pārvaldīt resursus.

Semaforu trūkums

Semaforiem ir arī daži trūkumi, piemēram:

  • Viens no lielākajiem semafora ierobežojumiem ir prioritātes inversija.
  • Operētājsistēmai ir jāseko līdzi visiem zvaniem, lai gaidītu un signalizētu par semaforu.
  • To izmantošana nekad netiek īstenota, bet tā notiek tikai pēc vienošanās.
  • Gaidīšanas un signāla darbības ir jāizpilda pareizā secībā, lai izvairītos no strupceļa semaforā.
  • Semafora programmēšana ir sarežģīta metode, tāpēc pastāv iespēja nepanākt savstarpēju izslēgšanu.
  • Tā nav arī praktiska metode liela mēroga lietošanai, jo to izmantošana noved pie modularitātes zuduma.
  • Semafors ir vairāk pakļauts programmētāja kļūdām
  • , un tas var izraisīt strupceļu vai savstarpējas izslēgšanas pārkāpumu programmētāja kļūdas dēļ.

Atšķirība starp Mutex un Semaforu

Galvenā atšķirība starp semaforu un mutex ir tāda, ka semafors ir signalizācijas mehānisms, t.i., procesi veic gaidīšanas () un signalizācijas () darbību, lai norādītu, vai tie iegūst vai atbrīvo resursu. Turpretim mutex ir bloķēšanas mehānisms, un procesam ir jāiegūst mutex objekta bloķēšana, ja tas vēlas iegūt resursu. Šeit ir vēl dažas atšķirības starp semaforu un muteksu, piemēram:

Mutex pret semaforu
Noteikumi Mutex Semafors
Definīcija Mutex ir bloķēšanas mehānisms, jo, lai iegūtu resursu, procesam ir jābloķē mutex objekts, un, atbrīvojot resursu, procesam ir jāatbloķē mutex objekts. Semafors ir signalizācijas mehānisms, jo gaidīšanas () un signāla () darbības, kas tiek veiktas semafora mainīgajam, norāda, vai process iegūst vai atbrīvo resursu.
Esamība Muteks ir objekts. Semafors ir vesels mainīgs lielums.
Funkcija Mutex ļauj vairākiem programmu pavedieniem piekļūt vienam resursam, bet ne vienlaikus. Semafors ļauj vairākiem programmu pavedieniem piekļūt ierobežotam resursu gadījumam.
Īpašumtiesības Mutex objekta bloķēšanu atbrīvo tikai process, kas ir ieguvis mutex objekta bloķēšanu. Semafora vērtību var mainīt jebkurā procesā, kas iegūst vai atbrīvo resursu, veicot gaidīšanas () un signāla () darbības.
Kategorizēt Mutex nav sīkāk klasificēts. Semaforu var iedalīt skaitīšanas semaforos un bināros semaforos.
Darbība Mutex objekts tiek bloķēts vai atbloķēts resursa pieprasīšanas vai atbrīvošanas procesā. Semafora vērtība tiek mainīta, izmantojot gaidīšanas () un signāla () darbības, izņemot inicializāciju.
Aizņemtie resursi Ja mutex objekts jau ir bloķēts, process, kas vēlas iegūt resursu, gaida un sistēma tiek ievietota rindā, līdz resurss tiek atbrīvots un mutex objekts tiek atbloķēts. Pieņemsim, ka process iegūst visus resursus un neviens resurss nav brīvs. Tādā gadījumā process, kas vēlas iegūt resursu, veic gaidīšanas () operāciju semafora mainīgajam un bloķē sevi, līdz semaforu skaits kļūst lielāks par 0.