logo

Mutex ve Semafor

İşletim sistemi terminolojisine göre muteks ve semaforlar, senkronizasyon hizmetlerini sağlayan çekirdek kaynaklarıdır. senkronizasyon ilkelleri . Süreç senkronizasyonu, paylaşılan verilerin tutarlılığının korunmasında önemli bir rol oynar. Kritik bölüm sorunlarının çözümü için hem yazılım hem de donanım çözümleri mevcuttur. Ancak kritik bölüm sorunlarına yönelik donanım çözümlerinin uygulanması oldukça zordur. Mutex ve semaforun her ikisi de senkronizasyon hizmetleri sağlar ancak aynı değildir.

Mutex nedir?

Mutex, bir kaynağa erişimi senkronize eden karşılıklı bir dışlama nesnesidir. Bir programın başlangıcında benzersiz bir adla oluşturulur. Muteks kilitleme mekanizması, yalnızca bir iş parçacığının muteksi alabilmesini ve kritik bölüme girebilmesini sağlar. Bu iş parçacığı muteksi yalnızca kritik bölümden çıktığında serbest bırakır.

Mutex ve Semafor

Paylaşılan kaynağa erişimi kontrol etmek için kullanılan özel bir ikili semafor türüdür. Genişletilmiş öncelik ters çevirme sorunlarını önlemek için bir öncelik devralma mekanizması içerir. Mevcut yüksek öncelikli görevlerin mümkün olan en kısa süre boyunca engellenmiş durumda tutulmasına olanak tanır. Ancak öncelik devralma, öncelik dönüşümünü düzeltmez, yalnızca etkisini en aza indirir.

Örnek

Bu, aşağıdaki örneğin yardımıyla gösterilmiştir:

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

Mutex Kullanımı

Mutex, anahtara (mutex) sahip olabilen ve çalışmalarına devam edebilen üretici veya tüketicinin karşılıklı dışlanmasını sağlar. Üretici arabelleği doldurduğu sürece kullanıcının beklemesi gerekir ve bunun tersi de geçerlidir. Mutex kilidinde her zaman yalnızca tek bir iş parçacığı tüm arabellekle çalışabilir.

Bir program başlatıldığında sistemden belirli bir kaynak için bir muteks nesnesi oluşturmasını ister. Sistem muteks nesnesini benzersiz bir ad veya kimlikle oluşturur. Program iş parçacığı kaynağı kullanmak istediğinde, mutex nesnesi üzerindeki kilidi işgal eder, kaynağı kullanır ve kullanımdan sonra mutex nesnesi üzerindeki kilidi serbest bırakır. Daha sonra bir sonraki işlemin muteks nesnesindeki kilidi almasına izin verilir.

Bu arada, bir süreç muteks nesnesindeki kilidi elde etmiştir ve başka hiçbir iş parçacığı veya süreç bu kaynağa erişemez. Muteks nesnesi zaten kilitliyse, muteks nesnesi üzerindeki kilidi elde etmek isteyen süreç beklemek zorundadır ve muteks nesnesinin kilidi açılana kadar sistem tarafından kuyruğa alınır.

Mutex'in Avantajları

Mutex'in aşağıdaki avantajları şunlardır:

  • Mutex, kritik bölümüne girmeden önce elde edilen ve daha sonra serbest bırakılan basit kilitlerdir.
  • Herhangi bir zamanda yalnızca bir iş parçacığı kritik bölümünde olduğundan, yarış koşulları yoktur ve veriler her zaman tutarlı kalır.

Mutex'in dezavantajları

Mutex'in ayrıca bazı dezavantajları da vardır:

  • Bir iş parçacığı kilitlenir ve uyku moduna geçerse veya önceden boşaltılırsa, diğer iş parçacığı ilerlemeyebilir. Bu açlığa yol açabilir.
  • Onu edinen bağlamdan farklı bir bağlamda kilitlenemez veya kilidi açılamaz.
  • Kritik bölümde aynı anda yalnızca bir iş parçacığına izin verilmelidir.
  • Normal uygulama, CPU zamanını boşa harcayan yoğun bir bekleme durumuna yol açabilir.

Semafor nedir?

Semafor, negatif olmayan ve iş parçacıkları arasında paylaşılan bir değişkendir. Bir semafor bir sinyalleşme mekanizmasıdır ve başka bir iş parçacığı, bir semafor üzerinde bekleyen bir iş parçacığının sinyalini verebilir.

Mutex ve Semafor

Bir semafor iki atomik işlemi kullanır,

1. Bekleyin: Bekleme işlemi, eğer pozitifse, S argümanının değerini azaltır. S negatif veya sıfır ise hiçbir işlem yapılmaz.

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

Bir semafor, nasıl kurulduğuna bağlı olarak kaynağa erişime izin verir veya erişimi reddeder.

Semafor Kullanımı

Tek arabellek durumunda, 4 KB'lık arabelleği 1 KB'lik dört arabelleğe ayırabiliriz. Semafor bu dört tamponla ilişkilendirilebilir, böylece kullanıcıların ve yapımcıların aynı anda farklı tamponlar üzerinde çalışmasına olanak sağlanır.

Semafor Türleri

Semafor işletim sistemi tarafından iki kategoriye ayrılır Semafor sayma Ve İkili semafor .

1. Semaforu Saymak: Semafor S değeri şu şekilde başlatılır: kaynak sayısı sistemde mevcut. Bir süreç kaynağa erişmek istediğinde aşağıdaki işlemleri gerçekleştirir: bekleyiş() semaforda işlem ve azalmalar semafor değerini birer birer artırın. Kaynağı serbest bıraktığında, gerçekleştirir sinyal() semaforda işlem ve artışlar semafor değerini birer birer artırın.

Semafor sayısının 0'a çıkması süreçlerin tüm kaynakları meşgul ettiği anlamına gelir. Semafor sayısı 0 olduğunda bir işlemin bir kaynak kullanması gerekir. Beklemek() operasyon ve alır engellendi semafor değeri 0'dan büyük olana kadar.

Mutex ve Semafor

2. İkili semafor: Bir semaforun değeri arasında değişir 0 Ve 1 . Muteks kilidine benzer, ancak muteks bir kilitleme mekanizmasıdır, semafor ise bir sinyalleşme mekanizmasıdır. İkili semaforda, bir süreç kaynağa erişmek istiyorsa aşağıdaki işlemleri gerçekleştirir: bekleyiş() semafor üzerinde işlem yapar ve semaforun değerini 1'den 0'a düşürür. Kaynağı serbest bıraktığında, bir işlem gerçekleştirir. sinyal () semafor üzerinde işlem yapar ve değerini 1'e çıkarır. Semaforun değerinin 0 olduğunu ve bir işlemin kaynağa erişmek istediğini varsayalım. Bu durumda, gerçekleştirir Beklemek() kaynakları kullanan mevcut süreç kaynağı serbest bırakana kadar işlemi gerçekleştirir ve kendisini engeller.

Mutex ve Semafor

Semaforun Avantajları

Semaforun aşağıdaki avantajları şunlardır:

  • Birden fazla iş parçacığının kritik bölüme erişmesine izin verir.
  • Semaforlar makineden bağımsızdır.
  • Semaforlar, mikro çekirdeğin makineden bağımsız kodunda uygulanır.
  • Kritik bölüme birden fazla prosesin girmesine izin vermezler.
  • Semaforda yoğunluk ve bekleme olduğu için işlem zamanı ve kaynak israfı asla yaşanmaz.
  • Bunlar makineden bağımsızdır ve mikro çekirdeğin makineden bağımsız kodunda çalıştırılması gerekir.
  • Kaynakların esnek yönetimine izin verirler.

Semaforların Dezavantajı

Semaforların ayrıca bazı dezavantajları da vardır:

  • Bir semaforun en büyük sınırlamalarından biri önceliklerin ters çevrilmesidir.
  • İşletim sistemi, semaforu beklemek ve sinyal vermek için tüm çağrıları takip etmelidir.
  • Kullanımları hiçbir zaman zorunlu kılınmaz, ancak yalnızca sözleşme gereğidir.
  • Semaforda kilitlenmeleri önlemek için Bekleme ve Sinyal işlemlerinin doğru sırada yürütülmesi gerekir.
  • Semafor programlama karmaşık bir yöntemdir, bu nedenle karşılıklı dışlamanın gerçekleşmeme şansı vardır.
  • Ayrıca büyük ölçekli kullanımlar için pratik bir yöntem değildir çünkü bunların kullanımı modülerlik kaybına yol açmaktadır.
  • Semafor programcı hatasına daha yatkındır
  • programcı hatası nedeniyle kilitlenmeye veya karşılıklı dışlamanın ihlaline neden olabilir.

Mutex ve Semafor arasındaki fark

Semafor ve muteks arasındaki temel fark, semaforun bir sinyalleşme mekanizması olmasıdır; yani işlemler, kaynağı mı aldıklarını yoksa serbest mi bıraktıklarını belirtmek için wait() ve signal() işlemlerini gerçekleştirir. Buna karşılık, muteks bir kilitleme mekanizmasıdır ve işlemin, kaynağı elde etmek istiyorsa muteks nesnesindeki kilidi alması gerekir. Semafor ve muteks arasındaki bazı farklar şunlardır:

Mutex ve Semafor
Şartlar Muteks Semafor
Tanım Muteks bir kilitleme mekanizmasıdır; bir kaynağı elde etmek için bir işlemin muteks nesnesini kilitlemesi gerekir ve bir kaynak serbest bırakılırken işlemin muteks nesnesinin kilidini açması gerekir. Semafor, semafor değişkeni üzerinde gerçekleştirilen wait() ve signal() işlemlerinin, bir işlemin kaynağı edindiğini mi yoksa serbest mi bıraktığını gösterdiği için bir sinyalleşme mekanizmasıdır.
Varoluş Mutex bir nesnedir. Semafor bir tam sayı değişkenidir.
İşlev Mutex, birden fazla program iş parçacığının tek bir kaynağa erişmesine izin verir ancak aynı anda erişmesine izin vermez. Semafor, birden fazla program iş parçacığının sınırlı bir kaynak örneğine erişmesine olanak tanır.
Mülkiyet Mutex nesne kilidi yalnızca mutex nesnesindeki kilidi edinen işlem tarafından serbest bırakılır. Semafor değeri, wait() ve signal() işlemlerini gerçekleştirerek kaynağı alan veya serbest bırakan herhangi bir işlem tarafından değiştirilebilir.
Kategorilere ayır Mutex daha fazla kategorize edilmemiştir. Semafor sayma semaforu ve ikili semafor olarak kategorize edilebilir.
Operasyon Mutex nesnesi, kaynağın talep edilmesi veya serbest bırakılması işlemiyle kilitlenir veya kilidi açılır. Semafor değeri, başlatma dışında wait() ve signal() işlemleri kullanılarak değiştirilir.
Kullanılan Kaynaklar Bir muteks nesnesi zaten kilitliyse, kaynak elde etmek isteyen süreç bekler ve kaynak serbest bırakılıncaya ve muteks nesnesinin kilidi açılana kadar sistem tarafından kuyruğa alınır. Sürecin tüm kaynakları elde ettiğini ve hiçbir kaynağın ücretsiz olmadığını varsayalım. Bu durumda kaynak elde etmek isteyen süreç, semafor değişkeni üzerinde wait() işlemini yapar ve semafor sayısı 0'dan büyük olana kadar kendisini bloke eder.