logo

Mutex vs Semaforas

Pagal operacinės sistemos terminologiją, mutex ir semaforai yra branduolio ištekliai, teikiantys sinchronizavimo paslaugas, dar vadinamus sinchronizacijos primityvai . Proceso sinchronizavimas atlieka svarbų vaidmenį palaikant bendrinamų duomenų nuoseklumą. Yra tiek programinės, tiek aparatinės įrangos sprendimai, skirti tvarkyti svarbias skyriaus problemas. Tačiau aparatinės įrangos sprendimus kritinėms sekcijų problemoms įgyvendinti gana sunku. „Mutex“ ir „semaforas“ teikia sinchronizavimo paslaugas, tačiau jie nėra vienodi.

Kas yra Mutex?

Mutex yra abipusio išskyrimo objektas, kuris sinchronizuoja prieigą prie šaltinio. Programos pradžioje jis sukuriamas unikaliu pavadinimu. Mutex fiksavimo mechanizmas užtikrina, kad tik vienas siūlas gali įgyti mutex ir patekti į kritinę sekciją. Ši gija išleidžia mutex tik tada, kai ji išeina iš kritinės dalies.

Mutex vs Semaforas

Tai specialus dvejetainių semaforų tipas, naudojamas prieigai prie bendrinamų išteklių valdyti. Tai apima prioritetinio paveldėjimo mechanizmą, kad būtų išvengta išplėstų prioritetų inversijos problemų. Tai leidžia dabartines aukštesnio prioriteto užduotis išlaikyti užblokuotose trumpiausią įmanomą laiką. Tačiau prioritetinis paveldėjimas nepataiso prioriteto inversijos, o tik sumažina jos poveikį.

Pavyzdys

Tai parodyta naudojant šį pavyzdį,

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

Mutex naudojimas

Mutex suteikia abipusę atskirtį, tiek gamintoją, tiek vartotoją, kuris gali turėti raktą (mutex) ir tęsti savo darbą. Kol gamintojas užpildo buferį, vartotojas turi laukti ir atvirkščiai. Naudojant „Mutex lock“, visą buferį gali veikti tik viena gija.

Kai programa paleidžiama, ji prašo sistemos sukurti tam tikro šaltinio mutex objektą. Sistema sukuria mutex objektą su unikaliu pavadinimu arba ID. Kai programos gija nori naudoti išteklius, ji užima užraktą ant mutex objekto, panaudoja išteklius ir po naudojimo atleidžia užraktą ant mutex objekto. Tada kitam procesui leidžiama įgyti mutex objekto užraktą.

Tuo tarpu procesas užrakino mutex objektą ir jokia kita gija ar procesas negali pasiekti šio šaltinio. Jei mutex objektas jau užrakintas, procesas, norintis gauti mutex objekto užraktą, turi palaukti ir sistema jį pastato į eilę, kol mutex objektas bus atrakintas.

Mutex privalumai

Štai šie „mutex“ pranašumai, tokie kaip:

  • „Mutex“ yra tik paprastos spynos, gautos prieš įeinant į kritinę dalį ir ją atleidžiant.
  • Kadangi bet kuriuo metu kritinėje dalyje yra tik viena gija, lenktynių sąlygų nėra, o duomenys visada išlieka nuoseklūs.

Mutex trūkumai

Mutex taip pat turi tam tikrų trūkumų, tokių kaip:

  • Jei sriegis užsifiksuoja ir užmigs arba yra iš anksto užblokuotas, kitas siūlas gali nejudėti į priekį. Tai gali sukelti badą.
  • Jo negalima užrakinti arba atrakinti iš kito konteksto nei tas, kuris jį įsigijo.
  • Vienu metu kritinėje dalyje turėtų būti leidžiama tik viena gija.
  • Įprastas diegimas gali sukelti užimtą laukimo būseną, o tai eikvoja procesoriaus laiką.

Kas yra Semaforas?

Semaforas yra tiesiog kintamasis, kuris yra neneigiamas ir dalijamasi tarp gijų. Semaforas yra signalizacijos mechanizmas, o kita gija gali signalizuoti giją, kuri laukia semafore.

Mutex vs Semaforas

Semaforas naudoja dvi atomines operacijas,

1. Palaukite: Laukimo operacija sumažina argumento S reikšmę, jei jis teigiamas. Jei S yra neigiamas arba nulis, tada jokia operacija neatliekama.

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

Semaforas leidžia arba atmeta prieigą prie šaltinio, atsižvelgiant į tai, kaip jis nustatytas.

Semaforo naudojimas

Vieno buferio atveju 4 KB buferį galime atskirti į keturis 1 KB buferius. Semaforas gali būti susietas su šiais keturiais buferiais, todėl vartotojai ir gamintojai gali dirbti su skirtingais buferiais vienu metu.

Semaforo tipai

Semaforas pagal operacinę sistemą išsiskiria dviem kategorijomis Skaičiavimo semaforas ir Dvejetainis semaforas .

1. Semaforo skaičiavimas: Semaforo S reikšmė inicijuojama į išteklių skaičius esančios sistemoje. Kai procesas nori pasiekti išteklius, jis atlieka laukimas () operacija ant semaforo ir mažėjimai semaforo reikšmę vienu. Kai jis išleidžia išteklius, jis veikia signalas () operacija ant semaforo ir prieaugiais semaforo reikšmę vienu.

Kai semaforų skaičius pasiekia 0, tai reiškia, kad procesai užima visus išteklius. Procesas turi naudoti išteklius, kai semaforų skaičius yra 0. Jis vykdo laukti() operaciją ir gauna užblokuotas kol semaforo reikšmė tampa didesnė už 0.

Mutex vs Semaforas

2. Dvejetainis semaforas: Semaforo vertė svyruoja tarp 0 ir 1 . Jis panašus į mutex užraktą, tačiau mutex yra fiksavimo mechanizmas, o semaforas yra signalizacijos mechanizmas. Dvejetainiame semafore, jei procesas nori pasiekti išteklius, jis atlieka laukimas () operaciją su semaforu ir sumažina semaforo reikšmę nuo 1 iki 0. Kai jis išleidžia išteklius, jis atlieka signalas () operaciją semafore ir padidina jo reikšmę iki 1. Tarkime, kad semaforo reikšmė yra 0 ir procesas nori pasiekti išteklius. Tokiu atveju jis atlieka laukti() operaciją ir blokuoti save tol, kol dabartinis procesas, naudojantys išteklius, išleis išteklius.

Mutex vs Semaforas

Semaforo privalumai

Štai šie semaforo pranašumai, tokie kaip:

  • Tai leidžia daugiau nei vienai gijai pasiekti kritinę sekciją.
  • Semaforai yra nepriklausomi nuo mašinos.
  • Semaforai yra įdiegti nuo mašinos nepriklausomame mikrobranduolių kode.
  • Jie neleidžia keliems procesams patekti į kritinę sekciją.
  • Kadangi esate užsiėmę ir laukiate semafore, niekada nereikia švaistyti proceso laiko ir išteklių.
  • Jie yra nepriklausomi nuo mašinos, o tai turėtų būti vykdoma nuo mašinos nepriklausomame mikrobranduolių kode.
  • Jie leidžia lanksčiai valdyti išteklius.

Semaforų trūkumas

Semaforai taip pat turi tam tikrų trūkumų, tokių kaip:

  • Vienas iš didžiausių semaforo apribojimų yra prioritetinė inversija.
  • Operacinė sistema turi sekti visus skambučius laukti ir signalizuoti semaforą.
  • Jų naudojimas niekada nėra privalomas, bet tik pagal susitarimą.
  • Laukimo ir signalo operacijos turi būti vykdomos teisinga tvarka, kad būtų išvengta aklavietės semafore.
  • Semaforo programavimas yra sudėtingas metodas, todėl yra tikimybė, kad nebus pasiekta abipusės atskirties.
  • Tai taip pat nėra praktiškas metodas dideliam naudojimui, nes naudojant juos prarandamas moduliškumas.
  • Semaforas yra labiau linkęs į programuotojo klaidas
  • , ir tai gali sukelti aklavietę arba abipusio išskyrimo pažeidimą dėl programuotojo klaidos.

Skirtumas tarp Mutex ir Semaforo

Pagrindinis skirtumas tarp semaforo ir mutex yra tas, kad semaforas yra signalizacijos mechanizmas, ty procesai atlieka laukimo () ir signalo () operacijas, kad parodytų, ar jie įsigyja, ar išleidžia išteklius. Priešingai, mutex yra užrakinimo mechanizmas, o procesas turi įgyti mutex objekto užraktą, jei jis nori gauti išteklių. Štai keletas skirtumų tarp semaforo ir mutex, pavyzdžiui:

Mutex vs Semaforas
Sąlygos Mutex Semaforas
Apibrėžimas Mutex yra užrakinimo mechanizmas, nes norint gauti išteklių, procesas turi užrakinti mutex objektą, o atlaisvindamas išteklius, procesas turi atrakinti mutex objektą. Semaforas yra signalizacijos mechanizmas, nes semaforo kintamajam atliekamos operacijos laukti () ir signalas () rodo, ar procesas įgyja, ar išleidžia išteklius.
Egzistavimas Muteksas yra objektas. Semaforas yra sveikasis kintamasis.
Funkcija Mutex leidžia kelioms programos gijomis pasiekti vieną šaltinį, bet ne vienu metu. Semaforas leidžia kelioms programos gijomis pasiekti baigtinį išteklių egzempliorių.
Nuosavybė Mutex objekto užraktas atleidžiamas tik procese, kuris įgavo mutex objekto užraktą. Semaforo reikšmę gali pakeisti bet koks procesas, įgyjantis arba atleidžiantis išteklius, atliekant laukimo () ir signalo () operacijas.
Suskirstyti į kategorijas Mutex toliau nėra skirstoma į kategorijas. Semaforas gali būti suskirstytas į skaičiavimo semaforą ir dvejetainį semaforą.
Operacija „Mutex“ objektas užrakinamas arba atrakinamas dėl išteklių užklausos arba atleidimo proceso. Semaforo reikšmė modifikuojama naudojant laukimo () ir signalo () operacijas, išskyrus inicijavimą.
Užimti ištekliai Jei mutex objektas jau yra užrakintas, procesas, norintis gauti išteklių, laukia ir sistema patenka į eilę, kol išteklius bus paleistas ir mutex objektas bus atrakintas. Tarkime, kad procesas įgyja visus išteklius ir joks išteklius nėra nemokamas. Tokiu atveju procesas, norintis gauti išteklių, atlieka laukimo () operaciją semaforo kintamajam ir blokuoja save, kol semaforų skaičius tampa didesnis nei 0.