Semaphore vs. Mutex

introduktion

ett operativsystem (OS) process interagerar med andra processer som körs i samma system för att slutföra en gemensam uppgift. Processer som interagerar med andra processer kallas samarbetsprocesser.

baserat på ipc-strategier (Inter-Process Communication) implementerade av en process kan den antingen dela sitt adressutrymme med andra processer eller kommunicera genom meddelandeutbyte. I den tidigare tekniken är det viktigt att kontrollera kommunikationen eftersom båda processerna delar ett gemensamt adressutrymme.

denna styrning av processkommunikation kallas synkronisering. Utan korrekt synkronisering kan processer läsa föråldrade data eller skriva över andra processdata.

Semaphore och mutex är två mekanismer genom vilka vi kan implementera synkronisering och hantera processkoordinering. I den här artikeln kommer vi att titta på dessa två synkroniseringsverktyg och jämföra olika egenskaper.

förstå kritisk sektion

innan vi diskuterar semaphore och mutex, låt oss förstå problemet med kritisk sektion.

låt oss anta att vi har ett system som innehåller N-processer. Var och en av dessa processer har ett segment av kod där processen kan utföra en gemensam variabel Uppdatering, en tabelluppdatering, eller skriva in en fil. Detta segment av kod kallas den kritiska delen av en process.

2.1. Egenskaper för ett kritiskt Sektionsproblem

det väsentliga kännetecknet för det kritiska avsnittet är att när en process börjar utföra sin kritiska sektion får ingen annan process utföra sin kritiska sektion. Det vill säga inga två processer kan utföra sin kritiska sektion samtidigt. Detta kritiska sektionsproblem är att utforma ett protokoll så att processer kan använda samarbete.

varje process måste få tillstånd för att komma in i dess kritiska avsnitt. Koden som implementerar tillståndet kallas inmatningsavsnittet. På samma sätt är kodstycket som implementerar utgången från den kritiska sektionen känd som utgångssektionen.

2.2. Kriterier för ett kritiskt Sektionsproblem

lösningen på ett kritiskt sektionsproblem måste uppfylla följande kriterier:

  • ömsesidig uteslutning: om en process kör sin kritiska sektion, kan ingen annan process utföra sin kritiska sektion
  • framsteg: om ingen process kör sin kritiska sektion, kan andra processer besluta att utföra sin kritiska sektion. Baserat på lösningen och implementeringen väljs en process som kan utföra sin kritiska sektion. De anmärkningsvärda egenskaperna är att processer har förmågan att fortsätta till en urvalsprocess för att utföra sin kritiska sektion
  • begränsad väntan: det bör finnas en begränsad väntan på en process när den har begärt för sin kritiska sektionsinmatning och antalet gånger en annan process utför sin kritiska sektion

Mutex-Lås

det finns flera verktyg för att lösa det kritiska sektionsproblemet i ett operativsystem. Mutual exclusion (mutex) lås eller mutex är den enklaste lösningen. Vi använder mutex-lås för att skydda den kritiska sektionen och förhindra tävlingsförhållandena. En process måste förvärva låset innan det kommer åt sin kritiska sektion, och det släpper låset när det är klart att exekveringen av den kritiska sektionen är klar.

3.1. Hur fungerar ett Mutex-Lås?

dessa två funktioner för att förvärva och släppa lås representeras genom två funktioner-acquire () och release (). Acquire-funktionen förvärvar låset och frigöringen släpper låset. Ett mutex-lås har en boolesk variabel som avgör om låset är tillgängligt eller inte. Om låset är tillgängligt lyckas metoden acquire() och låset anses inte vara tillgängligt. Alla processer som försöker komma åt ett otillgängligt lås blockeras tills låset släpps.

följande pseudokod visar metoden acquire() :

gjord av QuickLaTeX.com

följande pseudokod visar metoden release() :

gjord av QuickLaTeX.com

3.2. Nackdelar med Mutexes

den stora nackdelen med ett mutex-lås är att det låter tråden snurra om låset inte är tillgängligt.

medan en tråd har förvärvat låset och är i sin kritiska sektion, är alla andra trådar som försöker förvärva låset i en slinga där tråden regelbundet kontrollerar om låset är tillgängligt. Således snurrar den för låset och slösar bort CPU-cykler som kunde ha använts av några andra trådar produktivt.

Detta är ett stort problem i en enda CPU-maskin. Spinlock är också känd som upptagen väntar som tråden är ”upptagen” väntar på låset.

3.3. Fördelar med Mutexes

även om mutex-lås lider av frågan om spinlock, har de en fördel. Som processen spinlocks i CPU, eliminerar det behovet av processen sammanhang switch, som annars skulle ha krävt.

Context switch av en process är en tidskrävande operation eftersom det kräver att spara exekverande processstatistik i processtyrning blocket (PCB) och ladda en annan process i CPU. Det finns processorer med flera processorer där en process kan snurra i en processorkärna, och en annan kan utföra sin kritiska sektion. Således är en spinlock av kort varaktighet i vissa scenarier mer användbar än en process kontextbrytare.

Semaphore

en semaphore är ett annat verktyg som också ger synkroniseringsfunktioner som liknar mutex-lås men är mer robust och sofistikerad.

en semafor är en heltalsvariabel som, förutom initialisering, nås genom två vanliga atomoperationer – vänta() och signal(). Vänta () operation kallas som P, och signal () operation kallas som V.

Låt oss ta en titt på vänta () operation:

gjord av QuickLaTeX.com

slutligen, låt oss titta på signalen () operation:

gjord av QuickLaTeX.com

!

alla operationer till heltalsvärdet för semaforen i väntan() och signalen () exekveras atomiskt. Det vill säga, när en process ändrar semaforvärdet, kan ingen annan process samtidigt ändra samma semaforvärde.

baserat på värdet av semafor s klassificeras det i två kategorier – räknar semafor och binär semafor. Värdet på en räknesemafor kan sträcka sig över 0 till ett ändligt värde. Värdet av en binär semafor kan vara mellan 0 och 1.

4.1. Räkna semaforer

räkna semaforer kan styra N antal instanser av en given resurs. Låt oss förklara räkningen semafor med en analogi.

låt oss anta att det finns ett bibliotek med tre studierum, och det finns en bibliotekarie som har Tio nycklar, var och en för ett annat rum. När en läsare behöver tillgång till ett rum måste de få en nyckel för att använda rummet. När en läsare är klar med användningen returnerar de rumsnyckeln till bibliotekarien. När alla rum är i bruk måste en ny läsare vänta tills ett rum lämnas av en befintlig läsare.

i exemplet ovan är resursen ett rum, och det finns tio instanser av det. Dessa instanser hanteras genom en räkning semafor som initieras med tio. Detta semaforvärde styrs genom semaforens wait() och signal () – metoder. Följande diagram illustrerar detta:

4.2. Binära semaforer

en binär semafor har två möjliga värden, 0 och 1. Om resursen som hanteras av semaforen är tillgänglig är semaforvärdet 1. Annars är den inställd på 0, vilket indikerar att resursen inte är tillgänglig.

en binär semafor har samma funktionalitet som ett mutex-lås. System som inte stöder mutex-lås kan utnyttja binära semaforer för att uppnå samma funktionalitet.

följande diagram illustrerar den binära semaforen:

Semaphore vs. Mutex

följande tabell sammanfattar de viktiga egenskaperna hos semafor-och mutexlås:

gjord av QuickLaTeX.com

slutsats

i den här artikeln diskuterade vi olika aspekter av mutexer och semaforer.

först diskuterade vi det kritiska avsnittet och behovet av en mutex eller semafor för att kontrollera kritisk sektionsexekvering. Vi pratade sedan om mutex och semaphore.

slutligen gav vi en jämförelse av semaphore och mutex.

om du har några års erfarenhet av datavetenskap eller forskning, och du är intresserad av att dela den erfarenheten med samhället, ta en titt på våra Bidragsriktlinjer.

Lämna ett svar

Din e-postadress kommer inte publiceras.