Prosess Synchronisering: Kritisk seksjonsproblem i OS
⚡ Smart oppsummering
Prosess SyncHronisering er oppgaven med å koordinere prosessutførelse slik at ingen to prosesser får tilgang til de samme delte dataene eller ressursene samtidig. Det forhindrer datainkonsekvens i flerprosesssystemer ved å kontrollere tilgang til den kritiske delen.
Hva er prosess Synchronisering?
Prosess Synchronisering er oppgaven med å koordinere gjennomføringen av prosesser på en måte at ingen to prosesser kan ha tilgang til de samme delte dataene og ressursene.
Det er spesielt nødvendig i et flerprosesssystem når flere prosesser kjører sammen, og mer enn én prosess prøver å få tilgang til den samme delte ressursen eller dataene samtidig.
Dette kan føre til inkonsekvens i delte data. Så endringen som gjøres av én prosess gjenspeiles ikke nødvendigvis når andre prosesser får tilgang til de samme delte dataene. For å unngå denne typen inkonsekvens i data, må prosessene synkroniseres med hverandre.
Hvordan prosess SyncVirker hronisering?
For eksempel endrer prosess A dataene på en minneplassering mens en annen prosess B prøver å lese dataene fra samme minneplassering. Det er stor sannsynlighet for at data som leses av den andre prosessen vil være feil.
Deler av et program
Her er fire viktige elementer i den kritiske delen:
- Inngangsseksjon: Det er en del av prosessen som bestemmer inngangen til en bestemt prosess.
- Kritisk del: Denne delen lar én prosess legge inn og endre den delte variabelen.
- Avslutt seksjon: Avslutningsseksjonen lar andre prosesser som venter i inngangsseksjonen gå inn i den kritiske seksjonen. Den kontrollerer også at en prosess som har fullført utførelsesprosessen, skal fjernes gjennom denne seksjonen.
- Resten seksjon: Alle andre deler av Code, som ikke er i den kritiske, inngangs- og utgangsseksjonen, er kjent som restseksjonen.
Hva er kritisk seksjonsproblem?
En kritisk seksjon er et kodesegment som kan nås av en enkelt prosess på et bestemt tidspunkt. Seksjonen består av delte dataressurser som må nås av andre prosesser.
- Inngangen til den kritiske delen håndteres av wait()-funksjonen, og den er representert som P().
- Utgangen fra en kritisk seksjon styres av signal()-funksjonen, representert som V().
I den kritiske delen kan bare en enkelt prosess utføres. Andre prosesser, som venter på å utføre sin kritiske del, må vente til den nåværende prosessen fullfører utførelsen.
Regler for kritisk seksjon
Den kritiske delen må håndheve alle tre reglene:
- Gjensidig utelukkelse: Gjensidig ekskludering er en spesiell type binær semafor som brukes til å kontrollere tilgangen til den delte ressursen. Den inkluderer en prioritert arvemekanisme for å unngå problemer med utvidet prioritet inversjon. Ikke mer enn én prosess kan utføres i den kritiske delen om gangen.
- Progress: Denne løsningen brukes når ingen er i den kritiske seksjonen, og noen vil inn. Da bør de prosessene som ikke er i sin resterende seksjon, bestemme hvem som skal inn, innen en begrenset tid.
- Innbundet venter: Når en prosess ber om å komme inn i den kritiske seksjonen, er det en spesifikk grense for antall prosesser som kan komme inn i den kritiske seksjonen. Så når grensen er nådd, må systemet tillate forespørselen til prosessen om å komme inn i den kritiske seksjonen.
Løsninger til den kritiske delen
Igang SyncVed kronisering spiller den kritiske delen hovedrollen, slik at problemet må løses.
Her er noen mye brukte metoder for å løse det kritiske seksjonsproblemet.
Peterson løsning
Petersons løsning er en mye brukt løsning på kritiske seksjonsproblemer. Denne algoritmen ble utviklet av en informatiker ved navn Peterson, og det er derfor den heter Petersons løsning.
I denne løsningen, når en prosess kjører i en kritisk tilstand, kjører den andre prosessen bare resten av koden, og det motsatte kan skje. Denne metoden bidrar også til å sikre at bare en enkelt prosess kjører i den kritiske delen på et bestemt tidspunkt.
Eksempel
PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
- Anta at det finnes N prosesser (P1, P2, … PN) og at hver prosess på et tidspunkt må gå inn i den kritiske seksjonen.
- En FLAG[]-matrise av størrelse N opprettholdes, som som standard er usann. Så når en prosess krever å gå inn i den kritiske seksjonen, må den sette flagget sitt som sant. Hvis for eksempel Pi vil gå inn, vil den sette FLAG[i]=SANN.
- En annen variabel kalt TURN indikerer prosessnummeret som for øyeblikket venter på å bli lagt inn i CS.
- Prosessen som går inn i den kritiske delen mens du avslutter, vil endre TURN til et annet nummer fra listen over ferdige prosesser.
- Eksempel: tur er 2, så går P2 inn i den kritiske seksjonen, og mens man går ut av tur = 3, bryter P3 derfor ut av ventesløyfen.
Synchronisering maskinvare
Noen ganger løses problemene i den kritiske seksjonen også av maskinvare. Noen operativsystemer tilbyr en låsefunksjonalitet der en prosess får en lås når den går inn i den kritiske seksjonen og opphever låsen etter å ha forlatt den.
Så når en annen prosess prøver å gå inn i den kritiske delen, vil den ikke kunne gå inn ettersom den er låst. Den kan bare gjøre det hvis den er gratis ved å skaffe seg selve låsen.
Mutex-låser
SyncKronisering av maskinvare er ikke en enkel metode å implementere for alle, så en streng programvaremetode kjent som Mutex Locks ble også introdusert.
I denne tilnærmingen, i inngangsdelen av koden, oppnås en LÅS over de kritiske ressursene som brukes inne i den kritiske delen. I utgangsseksjonen frigjøres den låsen.
Semaphore Oppløsning
Semaphore er rett og slett en variabel som er ikke-negativ og deles mellom tråder. Det er en annen algoritme eller løsning på problemet med kritisk seksjon. Det er en signalmekanisme, og en tråd som venter på en semafor kan signaliseres av en annen tråd.
Den bruker to atomoperasjoner: 1) venting og 2) signal for prosesssynkronisering.
Eksempel
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;



