Tavsiye, 2023

Editörün Seçimi

Semafor ve Mutex Arasındaki Fark

İşlem senkronizasyonu, paylaşılan verilerin tutarlılığının korunmasında önemli bir rol oynar. Hem yazılım hem de donanım çözümleri kritik bölüm sorununu çözmek için mevcuttur. Ancak kritik bölüm problemi için donanım çözümlerinin uygulanması oldukça zordur. Bugünün makalesinde, Semaphore ve Mutex gibi kritik bölüm problemini ele almak için iki yazılım tabanlı çözümü tartışacağız.

Semafor ve muteks arasındaki temel fark, semaforun bir sinyalleşme mekanizması olmasıdır; yani, Mutex kilitleme mekanizmasıyken, işlemin kaynağı elde edip etmediğini veya serbest bıraktıklarını belirtmek için işlemler wait () ve signal () işlemi gerçekleştirilir. kaynak elde etmek istiyorsa mutex nesnesi. Semafor ve muteks arasında bazı farklılıklar var, bunları aşağıda gösterilen karşılaştırma tablosu yardımıyla tartışalım.

Karşılaştırma Tablosu

Karşılaştırma için temelSemaforKarşılıklı dışlama
TemelSemafor bir sinyal mekanizmasıdır.Mutex bir kilitleme mekanizmasıdır.
varoluşSemafor bir tamsayı değişkenidir.Mutex bir nesnedir.
fonksiyonSemafor, çok sayıda program dizisinin sınırlı bir kaynak örneğine erişmesine izin verir.Mutex, birden fazla program dizisinin tek bir kaynağa erişmesine izin verir ancak aynı anda değil.
sahiplikSemafor değeri, kaynağı alan veya serbest bırakan herhangi bir işlemle değiştirilebilir.Mutex nesne kilidi, yalnızca kilidi alan işlem tarafından serbest bırakılır.
sınıflandırmakSemafor semafor ve ikili semafor saymak olarak sınıflandırılabilir.Mutex daha fazla kategorize edilmemiştir.
OperasyonSemafor değeri wait () ve signal () işlemi kullanılarak değiştirilir.Mutex nesnesi, kaynağı talep eden veya serbest bırakan işlem tarafından kilitlenir veya kilidi açılır.
İşgal Edilen KaynaklarTüm kaynaklar kullanılıyorsa, kaynak talep eden süreç wait () işlemini gerçekleştirir ve semafor sayısı birden fazla hale gelinceye kadar kendini engeller.Bir mutex nesnesi zaten kilitliyse, kaynaklar için talep edilen işlem kilit serbest bırakılıncaya kadar bekler ve sistem tarafından sıraya alınır.

Semafor'un tanımı

Semafor bir işlem senkronizasyon aracıdır. Semafor tipik olarak, sistemde mevcut kaynak sayısına göre başlatılan bir tamsayı değişkeni S'dir ve semaforun değeri, başlatma dışında sadece wait () ve signal () işlevleriyle değiştirilebilir .

Wait () ve signal () işlemi semafor değerini ayrı ayrı değiştirir. Bu, bir işlem semaforun değerini değiştirirken, başka hiçbir işlemin semaforun değerini aynı anda değiştiremeyeceği anlamına gelir. Semafor, işletim sistemi tarafından semafor ve İkili semafor sayma olmak üzere iki kategoride ayrılmaktadır .

Semafor Sayımında semafor S değeri sistemde mevcut olan kaynak sayısına göre başlatılır. Bir işlem kaynağa erişmek istediğinde, semafor üzerindeki wait () işlemini gerçekleştirir ve semaforun değerini bir azaltır . Kaynağı serbest bıraktığında, semafor üzerinde signal () işlemini gerçekleştirir ve semaforun değerini bir artırır . Semafor sayısı 0 olduğunda, tüm kaynaklar işlemler tarafından işgal edilir. Bir işlem semafor sayısı 0 olduğunda bir kaynak kullanmaya ihtiyaç duyarsa, wait () komutunu çalıştırır ve semaforun değeri 0'dan büyük olana kadar engellenir .

İkili semaforda semaforun değeri 0 ile 1 arasındadır. Mutex kilidine benzer, ancak mutex bir kilitleme mekanizmasıdır, oysa semafor bir işaretleme mekanizmasıdır. İkili semaforda, bir işlem semafor üzerindeki wait () işlemini gerçekleştirir ve kaynağa erişmek isterse semafor değerini 1'den 0'a düşürür. Kaynağı bıraktığında, semafor ve artımlar üzerinde bir sinyal () işlemi gerçekleştirir. değeri 1'dir. Semafor değeri 0 ise ve bir işlem kaynağa erişmek istiyorsa, wait () işlemini gerçekleştirir ve kaynakları kullanan mevcut işlem kaynağı serbest bırakana kadar kendini engeller.

Mutex'un tanımı

Karşılıklı Dışlama Nesnesi kısaca Mutex olarak adlandırılır. Karşılıklı dışlama teriminden, bir defada yalnızca bir sürecin verilen kaynağa erişebildiğini anlayabiliriz. Mutex nesnesi, birden çok program iş parçacığının aynı kaynağı, ancak aynı anda değil aynı anda kullanmasına izin verir.

Bir program başladığında, sistemin belirli bir kaynak için bir mutex nesnesi oluşturmasını ister. Sistem mutex nesnesini benzersiz bir ad veya kimliğe göre oluşturur. Program iş parçacığı, mutex nesnesindeki kilidi işgal ettiği kaynağı kullanmak istediğinde, kaynağı kullanır ve kullandıktan sonra, mutex nesnesindeki kilidi serbest bırakır. Sonra bir sonraki işlem mutex nesnesindeki kilidi elde etmesine izin verilir.

Bu arada, bir işlem mutex nesnesindeki kilidi elde etti, başka hiçbir iş parçacığı / işlemi bu kaynağa erişemiyor. Mutex nesnesi zaten kilitliyse, mutex nesnesinin kilidini almak isteyen işlemin beklemesi gerekir ve mutex nesnesinin kilidi açılana kadar sistem tarafından sıraya alınır.

Semafor ve Mutex Arasındaki Temel Farklılıklar

  1. Semafor semafor değişkeni üzerinde gerçekleştirilen wait () ve signal () işleminin bir işlemin kaynağı alıp almadığını veya kaynağı serbest bırakıp açmadığını gösterir. Diğer taraftan, muteks, bir kaynak elde etmek için, bir muteks nesnesini kilitlemek için bir işlem gerektiren bir kilitleme mekanizmasıdır ve bir kaynak işlemi serbest bırakıldığında mutex nesnesinin kilidini açmak zorundadır.
  2. Semafor tipik olarak bir tamsayı değişkeni iken mutex bir nesnedir .
  3. Semafor, çok sayıda program dizisinin kaynakların sonlu örneğine erişmesine izin verir. Öte yandan, Mutex, bir seferde bir tane olmak üzere, tek bir paylaşılan kaynağa birden fazla program dizisinin erişmesine izin verir.
  4. Semafor değişken değeri wait () ve signal () işlemi gerçekleştirerek kaynak alan veya serbest bırakan herhangi bir işlemle değiştirilebilir. Diğer yandan, mutex nesnesinde edinilen kilit yalnızca mutex nesnesinde kilidi edinen işlem tarafından serbest bırakılabilir.
  5. Semafor, mutex'e oldukça benzeyen semafor ve ikili semafor sayan iki türdendir.
  6. Semafor değişkeni değeri, başlatmanın dışında wait () ve signal () işlemi ile değiştirilir. Bununla birlikte, dilsiz nesne, kaynağın alınması veya bırakılması işlemi ile kilitlenir veya kilidi açılır.
  7. Tüm kaynaklar işlem tarafından elde edilirse ve hiçbir kaynak serbest değilse, o zaman kaynak elde etmek isteyen işlem, semafor değişkeninde wait () işlemini gerçekleştirir ve semafor sayısı 0'dan büyük hale gelinceye kadar kendini engeller. kilitlendikten sonra kaynak elde etmek isteyen işlem beklenir ve kaynak serbest bırakılıncaya ve mutex nesnesinin kilidi kaldırılıncaya kadar sıraya alınır.

Sonuç:

Semafor, birden fazla kaynak örneği olması durumunda daha iyi bir seçenektir. Tek bir ortak kaynak olması durumunda, muteks daha iyi bir seçimdir.

Top