logo

Мутекс против Семафора

Према терминологији оперативног система, мутекс и семафори су ресурси кернела који пружају услуге синхронизације, такође тзв. примитиви за синхронизацију . Синхронизација процеса игра важну улогу у одржавању конзистентности заједничких података. И софтверска и хардверска решења су присутна за решавање проблема критичних секција. Али хардверска решења за проблеме са критичним секцијама је прилично тешко имплементирати. Мутек и семафор обезбеђују услуге синхронизације, али нису исте.

Шта је Мутек?

Мутек је објекат узајамног искључивања који синхронизује приступ ресурсу. Креира се са јединственим именом на почетку програма. Механизам за закључавање мутекса осигурава да само једна нит може добити мутекс и ући у критични одељак. Ова нит ослобађа мутекс само када изађе у критичну секцију.

Мутекс против Семафора

То је посебан тип бинарног семафора који се користи за контролу приступа дељеном ресурсу. Укључује механизам наслеђивања приоритета да би се избегли проблеми проширене инверзије приоритета. Омогућава да се тренутни задаци вишег приоритета држе у блокираном стању у најкраћем могућем року. Међутим, наслеђивање приоритета не исправља инверзију приоритета, већ само минимизира њен ефекат.

Пример

Ово је приказано уз помоћ следећег примера,

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

Употреба Мутек-а

Мутекс обезбеђује међусобно искључивање, било произвођача или потрошача који могу да имају кључ (мутекс) и да наставе са својим радом. Докле год произвођач попуњава бафер, корисник треба да чека, и обрнуто. У Мутек закључавању, све време, само једна нит може да ради са целим бафером.

Када се програм покрене, он захтева од система да креира мутекс објекат за дати ресурс. Систем креира мутекс објекат са јединственим именом или ИД-ом. Кад год програмска нит жели да користи ресурс, она заузима закључавање на мутек објекту, користи ресурс и након употребе отпушта закључавање на мутек објекту. Затим је следећем процесу дозвољено да стекне закључавање на мутекс објекту.

У међувремену, процес је стекао закључавање на мутекс објекту и ниједна друга нит или процес не може приступити том ресурсу. Ако је мутек објекат већ закључан, процес који жели да добије закључавање на мутек објекту мора да сачека и систем га ставља у ред док се мутекс објекат не откључа.

Предности Мутек-а

Ево следећих предности мутекса, као што су:

  • Мутек су само једноставне браве које се добијају пре него што се уђе у његов критични део и затим га отпусти.
  • Пошто је само једна нит у свом критичном делу у било ком тренутку, не постоје услови трке, а подаци увек остају доследни.

Недостаци Мутек-а

Мутек такође има неке недостатке, као што су:

  • Ако нит добије закључавање и оде у стање спавања или је преузета, онда се друга нит можда неће померити напред. Ово може довести до гладовања.
  • Не може се закључати или откључати из другог контекста од оног који га је стекао.
  • Само једна нит би требало да буде дозвољена у критичном одељку истовремено.
  • Нормална имплементација може довести до стања заузетог чекања, које губи ЦПУ време.

Шта је Семафор?

Семафор је једноставно променљива која није негативна и која се дели између нити. Семафор је сигнални механизам, а друга нит може сигнализирати нит која чека на семафору.

Мутекс против Семафора

Семафор користи две атомске операције,

1. Сачекајте: Операција чекања смањује вредност свог аргумента С ако је позитиван. Ако је С негативан или нула, онда се операција не изводи.

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

Семафор дозвољава или одбија приступ ресурсу, у зависности од тога како је подешен.

Употреба семафора

У случају једног бафера, можемо одвојити бафер од 4 КБ у четири бафера од 1 КБ. Семафор се може повезати са ова четири бафера, омогућавајући корисницима и произвођачима да раде на различитим баферима истовремено.

Врсте семафора

Семафор се разликује по оперативном систему у две категорије Семафор за бројање и Бинарни семафор .

1. Семафор за бројање: Вредност семафора С је иницијализована на број ресурса присутна у систему. Кад год процес жели да приступи ресурсу, он обавља чекати() операција на семафору и декрементима вредност семафора за један. Када ослободи ресурс, он ради сигнал() операција на семафору и инкременти вредност семафора за један.

Када број семафора иде на 0, то значи да процеси заузимају све ресурсе. Процес треба да користи ресурс када је број семафора 0. Он извршава чекати() операција и добија блокиран све док вредност семафора не постане већа од 0.

Мутекс против Семафора

2. Бинарни семафор: Вредност семафора се креће између 0 и 1 . Слично је закључавању мутекса, али мутекс је механизам за закључавање, док је семафор сигнални механизам. У бинарном семафору, ако процес жели да приступи ресурсу, он то ради чекати() операцију на семафору и смањује вредност семафора са 1 на 0. Када ослободи ресурс, врши сигнал () операцију на семафору и повећава његову вредност на 1. Претпоставимо да је вредност семафора 0 и процес жели да приступи ресурсу. У том случају делује чекати() операција и блокира се све док тренутни процес који користи ресурсе не ослободи ресурс.

Мутекс против Семафора

Предности Семафора

Ево следећих предности семафора, као што су:

  • Омогућава више од једне нити да приступи критичном одељку.
  • Семафори су независни од машина.
  • Семафори су имплементирани у машински независан код микрокернела.
  • Они не дозвољавају да више процеса уђе у критични одељак.
  • Пошто је у семафору заузето и чека се, никада не долази до губљења времена и ресурса процеса.
  • Они су независни од машина, који би требало да се покрећу у машинско независном коду микрокернела.
  • Они омогућавају флексибилно управљање ресурсима.

Недостаци семафора

Семафори такође имају неке недостатке, као што су:

  • Једно од највећих ограничења семафора је инверзија приоритета.
  • Оперативни систем мора да прати све позиве за чекање и сигнализира семафор.
  • Њихова употреба се никада не спроводи, већ је то само по конвенцији.
  • Операције чекања и сигнала захтевају да се изврше исправним редоследом да би се избегле застоје у семафору.
  • Програмирање семафора је сложен метод, тако да постоје шансе да се не постигне узајамно искључивање.
  • Такође није практичан метод за употребу у великим размерама јер њихова употреба доводи до губитка модуларности.
  • Семафор је склонији грешци програмера
  • , и може довести до застоја или кршења међусобног искључивања због грешке програмера.

Разлика између Мутек-а и Семапхоре-а

Основна разлика између семафора и мутекса је у томе што је семафор сигнални механизам, односно процеси изводе чекање() и сигнал() да би указали да ли преузимају или ослобађају ресурс. Насупрот томе, мутекс је механизам закључавања и процес мора да стекне закључавање на мутекс објекту ако жели да добије ресурс. Ево још неких разлика између семафора и мутекса, као што су:

Мутекс против Семафора
Услови Мутек Семафор
Дефиниција Мутекс је механизам закључавања, јер да би стекао ресурс, процес треба да закључа објекат мутекса, а док ослобађа процес ресурса мора да откључа мутекс објекат. Семафор је механизам сигнализације јер операције чекања() и сигнал() које се изводе над променљивом семафора показују да ли процес преузима или ослобађа ресурс.
Постојање Мутекс је објекат. Семафор је целобројна променљива.
Функција Мутек дозвољава вишеструким програмским нитима да приступе једном ресурсу, али не истовремено. Семафор дозвољава вишеструким програмским нитима да приступе коначној инстанци ресурса.
Власништво Закључавање мутек објекта се ослобађа само процесом који је стекао закључавање на мутек објекту. Вредност семафора се може променити било којим процесом који преузима или ослобађа ресурс извођењем операција чекања() и сигнала().
Категоризирај Мутек није даље категорисан. Семафор се може категорисати на семафор за бројање и бинарни семафор.
Операција Мутекс објекат се закључава или откључава процесом захтевања или ослобађања ресурса. Вредност семафора се мења коришћењем чека() и сигнал() операција осим иницијализације.
Ресурси заузети Ако је мутекс објекат већ закључан, онда процес који жели да добије ресурс чека и систем га ставља у ред док се ресурс не ослободи и мутекс објекат се не откључа. Претпоставимо да процес добија све ресурсе, а ниједан ресурс није бесплатан. У том случају, процес који жели да добије ресурс изводи операцију чекања() на променљивој семафора и блокира се све док број семафора не постане већи од 0.