Mutex vs Semaphore

enligt operativsystemets terminologi är mutex och semaforer kärnresurser som tillhandahåller synkroniseringstjänster, även kallade synkroniseringsprimitiv. Processsynkronisering spelar en viktig roll för att upprätthålla konsistensen av delade data. Både mjukvaru-och hårdvarulösningarna finns för hantering av kritiska sektionsproblem. Men hårdvarulösningar för kritiska sektionsproblem är ganska svåra att genomföra. Mutex och semaphore tillhandahåller båda synkroniseringstjänster, men de är inte desamma.

Vad är Mutex?

Mutex är ett ömsesidigt uteslutningsobjekt som synkroniserar åtkomst till en resurs. Det skapas med ett unikt namn i början av ett program. Mutex-låsmekanismen säkerställer att endast en tråd kan förvärva mutex och gå in i den kritiska sektionen. Den här tråden släpper bara mutex när den går ut i det kritiska avsnittet.

Mutex vs Semaphore

det är en speciell typ av binär semafor som används för att styra åtkomst till den delade resursen. Den innehåller en prioriterad arvsmekanism för att undvika utvidgade prioriterade inversionsproblem. Det gör att nuvarande högre prioriterade uppgifter kan hållas i blockerat tillstånd under kortast möjliga tid. Prioriterat arv korrigerar dock inte prioriterad inversion utan minimerar bara dess effekt.

exempel

detta visas med hjälp av följande exempel,

användning av Mutex

en mutex ger ömsesidig uteslutning, antingen producent eller konsument som kan ha nyckeln (mutex) och fortsätta med sitt arbete. Så länge producenten fyller bufferten måste användaren vänta och vice versa. I Mutex lock kan hela tiden bara en enda tråd fungera med hela bufferten.

när ETT program startar begär det systemet att skapa ett mutex-objekt för en given resurs. Systemet skapar mutex-objektet med ett unikt namn eller ID. När programtråden vill använda resursen upptar den lås på mutex-objekt, använder resursen och efter användning släpper den låset på mutex-objekt. Då får nästa process förvärva låset på mutex-objektet.

under tiden har en process förvärvat låset på mutex-objektet, och ingen annan tråd eller process kan komma åt den resursen. Om mutex-objektet redan är låst måste processen som önskar förvärva låset på mutex-objektet vänta och köas upp av systemet tills mutex-objektet är upplåst.

fördelar med Mutex

här är följande fördelar med mutex, såsom:

  • Mutex är bara enkla lås som erhållits innan den går in i sin kritiska sektion och sedan släpper den.
  • eftersom endast en tråd är i sin kritiska sektion vid varje given tidpunkt finns det inga rasförhållanden och data förblir alltid konsekventa.

nackdelar med Mutex

Mutex har också vissa nackdelar, såsom:

  • om en tråd får ett lås och går och lägger sig eller är förhindrad, kan den andra tråden inte gå framåt. Detta kan leda till svält.
  • det kan inte låsas eller låsas upp från ett annat sammanhang än det som förvärvade det.
  • endast en tråd bör tillåtas i det kritiska avsnittet åt gången.
  • den normala implementeringen kan leda till ett upptagen vänteläge, vilket slösar bort CPU-tid.

Vad är Semafor?

Semaphore är helt enkelt en variabel som är icke-negativ och delas mellan trådar. En semafor är en signalmekanism, och en annan tråd kan signalera en tråd som väntar på en semafor.

Mutex vs Semafor

en semafor använder två atomoperationer,

1. Vänta: vänta-operationen minskar värdet på argumentet S om det är positivt. Om S är negativ eller noll, utförs ingen operation.

2. Signal för processsynkronisering: signaloperationen ökar värdet på dess argument S.

en semafor tillåter eller avvisar åtkomst till resursen, beroende på hur den är inställd.

användning av Semafor

vid en enda buffert kan vi separera 4 KB-bufferten i fyra buffertar på 1 KB. Semafor kan associeras med dessa fyra buffertar, så att användare och producenter kan arbeta på olika buffertar samtidigt.

typer av Semafor

Semafor kännetecknas av operativsystemet i två kategorier som räknar semafor och binär semafor.

1. Räkna Semafor: semaforens värde initieras till antalet resurser som finns i systemet. När en process vill komma åt resursen utför den vänta () – operationen på semaforen och minskar semaforvärdet med en. När den släpper ut resursen utför den signal () – operationen på semaforen och ökar semaforvärdet med en.

när semaforräkningen går till 0 betyder det att processerna upptar alla resurser. En process måste använda en resurs när semaforräkningen är 0. Det utför vänta () operation och blir blockerad tills semafor värdet blir större än 0.

 Mutex vs Semafor

2. Binär semafor: värdet på en semafor varierar mellan 0 och 1. Det liknar mutex-lås, men mutex är en låsmekanism, medan semaforn är en signalmekanism. I binär semafor, om en process vill komma åt resursen, utför den vänta () – operationen på semafor och minskar värdet på semafor från 1 till 0. När den släpper ut resursen utför den en signal () – operation på semaforen och ökar dess värde till 1. Antag att värdet på semaforen är 0 och en process vill komma åt resursen. I så fall utför den vänta() operation och blockera sig tills den aktuella processen som använder resurserna släpper resursen.

 Mutex vs Semafor

fördelar med Semafor

här är följande fördelar med semafor, såsom:

  • det tillåter mer än en tråd att komma åt det kritiska avsnittet.
  • semaforer är maskinoberoende.
  • semaforer implementeras i den maskinoberoende koden för mikrokärnan.
  • de tillåter inte att flera processer går in i det kritiska avsnittet.
  • eftersom det är upptagen och väntar i semafor, det finns aldrig slöseri med processtid och resurser.
  • de är maskinoberoende, som ska köras i mikrokärnans maskinoberoende kod.
  • de möjliggör flexibel hantering av resurser.

nackdel med semaforer

semaforer har också vissa nackdelar, såsom:

  • en av de största begränsningarna av en semafor är prioriterad inversion.
  • operativsystemet måste hålla reda på alla samtal för att vänta och signalera semafor.
  • deras användning verkställs aldrig, men det är endast enligt konvention.
  • vänta-och Signaloperationerna måste utföras i rätt ordning för att undvika deadlocks i semaphore.
  • Semaforprogrammering är en komplex metod, så det finns chanser att inte uppnå ömsesidig uteslutning.
  • det är inte heller en praktisk metod för storskalig användning eftersom deras användning leder till förlust av modularitet.
  • Semaphore är mer benägna att programmeringsfel
  • , och det kan orsaka dödläge eller brott mot ömsesidig uteslutning på grund av programmeringsfel.

skillnad mellan Mutex och Semaphore

den grundläggande skillnaden mellan semaphore och mutex är att semaphore är en signalmekanism, dvs processer utför vänta() och signal() operation för att indikera om de förvärvar eller frigör resursen. Däremot är en mutex en låsmekanism, och processen måste förvärva låset på ett mutex-objekt om det vill förvärva resursen. Här är några fler skillnader mellan semaphore och mutex, till exempel:

Mutex vs Semafor

villkor Mutex Semafor
Definition mutex är en låsmekanism, för att förvärva en resurs måste en process låsa mutex-objektet, och medan man släpper en resursprocess måste man låsa upp mutex-objektet. Semaphore är en signalmekanism som vänta() och signal() operationer som utförs på semaphore variabeln indikerar om en process förvärvar eller frigör resursen.
existens en mutex är ett objekt. Semafor är en heltalsvariabel.
funktion Mutex tillåter flera programtrådar att komma åt en enda resurs men inte samtidigt. Semaphore tillåter flera programtrådar att komma åt en ändlig instans av resurser.
äganderätt Mutex object lock släpps endast av den process som har förvärvat låset på mutex-objektet. Semafor värde kan ändras genom någon process förvärva eller släppa resursen genom att utföra vänta() och signal() operation.
kategorisera Mutex kategoriseras inte vidare. semaforn kan kategoriseras i att räkna semafor och binär semafor.
Operation mutex-objektet låses eller låses upp genom processen att begära eller släppa resursen. Semafor värde ändras med hjälp av vänta() och signal() operation bortsett från initiering.
resurser ockuperade om ett mutex-objekt redan är låst, väntar processen som önskar förvärva resurs och köas av systemet tills resursen släpps och mutex-objektet låses upp. Antag att processen förvärvar alla resurser, och ingen resurs är ledig. I så fall utför processen som önskar förvärva resurs vänta() operation på semafor variabel och blockerar sig tills räkningen av semafor blir större än 0.

Leave a Reply