Semaphore vs. Muteks

introduktion

en OS-proces interagerer med andre processer, der kører i det samme system for at udføre en fælles opgave. Processer, der interagerer med andre processer, kaldes samarbejdsprocesser.

baseret på Inter-Process Communication (IPC) strategier implementeret af en proces, kan den enten dele sit adresserum med andre processer eller kommunikere via meddelelsesudveksling. I den tidligere teknik er det afgørende at kontrollere kommunikationen, da begge processer deler et fælles adresserum.

denne styring af proceskommunikation er kendt som synkronisering. Uden korrekt synkronisering kan processer læse forældede data eller overskrive andre procesdata.

Semafor og muteks er to mekanismer, hvorigennem vi kan implementere synkronisering og styre proceskoordinering. I denne artikel vil vi undersøge disse to synkroniseringsværktøjer og sammenligne forskellige egenskaber.

forstå det kritiske afsnit

før vi diskuterer semafor og muteks, lad os forstå det kritiske afsnit problem.

lad os antage, at vi har et system, der indeholder n processer. Hver af disse processer har et kodesegment, hvor processen kan udføre en fælles variabel opdatering, en tabelopdatering eller skrive i en fil. Dette segment af kode kaldes den kritiske del af en proces.

2.1. Karakteristik af en kritisk sektion Problem

det væsentlige kendetegn ved den kritiske sektion er, at når en proces begynder at udføre sin kritiske sektion, er ingen anden proces tilladt at udføre sin kritiske sektion. Det vil sige, at ingen to processer kan udføre deres kritiske sektion samtidigt. Dette kritiske afsnitsproblem er at designe en protokol, så processer kan bruge samarbejde.

hver proces skal have tilladelse til at indtaste sin kritiske sektion. Det stykke kode, der implementerer tilladelsen, er kendt som indgangssektionen. Tilsvarende er det stykke kode, der implementerer udgangen af det kritiske afsnit, kendt som udgangssektionen.

2.2. Kriterier for et kritisk Sektionsproblem

løsningen på et kritisk sektionsproblem skal opfylde følgende kriterier:

  • gensidig udelukkelse: hvis en proces udfører sin kritiske sektion, kan ingen anden proces udføre sin kritiske sektion
  • fremskridt: hvis ingen proces udfører deres kritiske sektion, kan andre processer beslutte at udføre deres kritiske sektion. Baseret på løsningen og implementeringen vælges en proces, der kan udføre dens kritiske sektion. De bemærkelsesværdige egenskaber er, at processer har evnen til at gå videre til en udvælgelsesproces for at udføre sin kritiske sektion
  • afgrænset ventetid: Der skal være en afgrænset ventetid på en proces, når den har anmodet om sin kritiske sektion, og antallet af gange en anden proces udfører sin kritiske sektion

Mutekslåse

der er flere værktøjer til at løse det kritiske sektionsproblem i et operativsystem. Den enkleste løsning er gensidig udelukkelse (muteks) låse eller muteks. Vi bruger låsene til at beskytte den kritiske sektion og forhindre løbsforholdene. En proces skal erhverve låsen, før den får adgang til sin kritiske sektion, og den frigiver låsen, når den er færdig med udførelsen af den kritiske sektion.

3.1. Hvordan fungerer en Mutekslås?

disse to funktioner til at erhverve og frigive låse er repræsenteret gennem to funktioner – erhverve() og frigive(). Den erhverve funktion erhverver låsen, og frigivelsen frigiver låsen. En lås har en boolsk variabel, der bestemmer, om låsen er tilgængelig eller ej. Hvis låsen er tilgængelig, lykkes metoden til erhvervelse (), og låsen betragtes som ikke tilgængelig. Enhver proces, der forsøger at få adgang til en utilgængelig lås, blokeres, indtil låsen frigives.

følgende pseudokode viser anskaffelsesmetoden ():

 gengivet af QuickLaTeX.com

følgende pseudokode viser frigivelsesmetoden ():

 gengivet af QuickLaTeX.com

3.2. Ulemper ved Mutekser

den største ulempe ved en mutekslås er, at den lader tråden spinlock, hvis låsen ikke er tilgængelig.

mens en tråd har erhvervet låsen og er i sin kritiske sektion, er alle andre tråde, der forsøger at erhverve låsen, i en løkke, hvor tråden regelmæssigt kontrollerer, om låsen er tilgængelig. Således spinder den for låsen og spilder CPU-cyklusser, der kunne have været brugt af nogle andre tråde produktivt.

dette er et stort problem i en enkelt CPU-maskine. Spinlock er også kendt som travlt med at vente, da tråden er “optaget” og venter på låsen.

3.3. Fordele ved Mutekser

selvom mutekslåse lider af spørgsmålet om spinlock, har de en fordel. Da processen spinlocks i CPU ‘ en, eliminerer det behovet for proceskontekstkontakten, som ellers ville have krævet.

Kontekstskifte af en proces er en tidskrævende operation, da det kræver at gemme udførelse af processtatistikker i Proceskontrolblokken (PCB) og genindlæse en anden proces i CPU ‘ en. Der er multi-processor CPU ‘ er, hvor en proces kan spinde i en processorkerne, og en anden kan udføre deres kritiske sektion. Således er en spinlock af kort varighed i nogle scenarier mere nyttig end en proceskontekstkontakt.

Semaphore

en semaphore er et andet værktøj, der også giver synkroniseringsfunktioner svarende til mutekslåse, men er mere robust og sofistikeret.

en semafor er en heltalsvariabel, der bortset fra initialisering er tilgængelig gennem to standard atomoperationer – vent() og signal(). Vent () – operationen betegnes som P, og signal () – operationen betegnes som V.

lad os se på vent () – operationen:

gengivet af QuickLaTeX.com

endelig, lad os se på signal () – operationen:

gengivet af QuickLaTeX.com

!

alle operationer til heltalsværdien af semaforen i ventetiden() og signalet() udføres atomisk. Det vil sige, når en proces ændrer semaforværdien, kan ingen anden proces samtidig ændre den samme semaforværdi.

baseret på værdien af semaforen s klassificeres den i to kategorier – tæller semafor og binær semafor. Værdien af en tællesemafor kan variere over 0 til en endelig værdi. Mens værdien af en binær semafor kan være mellem 0 og 1.

4.1. Tælle semaforer

tælle semaforer kan styre n antallet af forekomster af en given ressource. Lad os forklare tællesemaforen med en analogi.

lad os antage, at der findes et bibliotek med tre studierum, og der er en bibliotekar, der har ti nøgler, hver for et andet rum. Når en læser kræver adgang til et rum, skal de få en nøgle til at bruge rummet. Når en læser er færdig med deres brug, returnerer de rumnøglen til bibliotekaren. Når alle værelser er i brug, skal en ny læser vente, indtil et værelse er forladt af en eksisterende læser.

i ovenstående eksempel er ressourcen et rum, og der er ti tilfælde af det. Disse tilfælde styres gennem en tællesemafor, der initialiseres med ti. Denne semaforværdi styres gennem Semaforens vent() og signal () metoder. Følgende diagram illustrerer dette:

4.2. Binære semaforer

en binær semafor har to mulige værdier, 0 og 1. Hvis den ressource, der administreres af semaforen, er tilgængelig, er semaforværdien 1. Ellers er den indstillet til 0, hvilket angiver, at ressourcen ikke er tilgængelig.

en binær semafor har samme funktionalitet som en mutekslås. Systemer, der ikke understøtter mutekslåse, kan udnytte binære semaforer for at opnå den samme funktionalitet.

følgende diagram illustrerer den binære semafor:

Semaphore vs. Muteks

følgende tabel opsummerer de vigtige egenskaber ved semafor og muteks låse:

gengivet af QuickLaTeX.com

konklusion

i denne artikel diskuterede vi forskellige aspekter af mutekser og semaforer.

først diskuterede vi det kritiske afsnit og behovet for en muteks eller semafor til at kontrollere kritisk sektionsudførelse. Derefter talte vi om muteks og semafor.

til sidst gav vi en sammenligning af semafor og muteks.

hvis du har et par års erfaring inden for datalogi eller forskning, og du er interesseret i at dele denne oplevelse med samfundet, kan du se vores retningslinjer for bidrag.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.