Prosess Synchronisering: Kritisk seksjonsproblem i OS
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 multiprosesssystem når flere prosesser kjører sammen, og mer enn én prosess prøver å få tilgang til samme delte ressurs eller data samtidig.
Dette kan føre til inkonsekvens av delte data. Så endringen gjort av én prosess gjenspeiles ikke nødvendigvis når andre prosesser fikk tilgang til de samme delte dataene. For å unngå denne typen inkonsekvens av data, må prosessene synkroniseres med hverandre.
Hvordan prosess SyncVirker hronisering?
For eksempel, prosess A endrer dataene på et minnested 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: Avslutt-seksjonen lar den andre prosessen som venter i inngangsseksjonen, gå inn i de kritiske seksjonene. Den sjekker også at en prosess som fullførte utførelsen skal fjernes gjennom denne delen.
- Resten seksjon: Alle andre deler av koden, som ikke er i Kritisk-, Inn- og Utgangsseksjonen, er kjent som Remainder-seksjonen.
Hva er kritisk seksjonsproblem?
En kritisk seksjon er et kodesegment som kan nås av en signalprosess på et bestemt tidspunkt. Seksjonen består av delte dataressurser som kreves for å få tilgang til 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 påminnelsesseksjonen avgjøre hvem som skal gå inn, i en begrenset tid.
- Innbundet venter: Når en prosess sender en forespørsel om å komme inn i kritisk seksjon, 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ørsel til prosessen om å komme inn i den kritiske delen.
Løsninger til den kritiske delen
Igang Synchronisering, kritisk seksjon spiller 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 mye brukt løsning på kritiske seksjonsproblemer. Denne algoritmen ble utviklet av en informatiker Peterson, det er derfor den er navngitt som en 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 er N prosesser (P1, P2, ... PN) og hver prosess på et tidspunkt krever å gå inn i den kritiske delen
- Et FLAG[]-array av størrelse N opprettholdes som som standard er falsk. Så hver gang en prosess krever å gå inn i den kritiske delen, må den sette flagget som sant. For eksempel, hvis Pi ønsker å gå inn, vil den sette FLAG[i]=TRUE.
- En annen variabel kalt TURN indikerer prosessnummeret som for øyeblikket venter på å gå 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: sving er 2, så går P2 inn i den kritiske seksjonen og mens du går ut av sving = 3 og derfor bryter P3 ut av ventesløyfen.
Synchronisering maskinvare
Noen ganger løses problemene i den kritiske delen 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 delen og frigjør 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
Synchronisering maskinvare ikke enkel metode å implementere for alle, så 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 ganske enkelt en variabel som er ikke-negativ og delt mellom tråder. Det er en annen algoritme eller løsning på det kritiske seksjonsproblemet. Det er en signalmekanisme og en tråd som venter på en semafor, som kan signaliseres av en annen tråd.
Den bruker to atomoperasjoner, 1) vent og 2) signal for prosesssynkronisering.
Eksempel
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;
Oppsummering
- Prosesssynkronisering er oppgaven med å koordinere utførelsen av prosesser på en måte som gjør at ingen to prosesser kan ha tilgang til de samme delte dataene og ressursene.
- Fire elementer av kritisk seksjon er 1) Inngangsseksjon 2) Kritisk seksjon 3) Utgangsseksjon 4) Påminnelsesseksjon
- En kritisk seksjon er et kodesegment som kan nås av en signalprosess på et bestemt tidspunkt.
- Tre må-regler som må håndheves av kritiske seksjoner er: 1) Gjensidig utestenging 2) Prosessløsning 3) Bundet venter
- Gjensidig ekskludering er en spesiell type binær semafor som brukes til å kontrollere tilgangen til den delte ressursen.
- Prosessløsning brukes når ingen er i den kritiske delen, og noen vil inn.
- I bundet venter-løsning, etter at en prosess sender en forespørsel om å komme inn i den kritiske delen, er det en grense for hvor mange andre prosesser som kan komme inn i den kritiske delen.
- Petersons løsning er mye brukt løsning på kritiske seksjonsproblemer.
- Problemer i den kritiske delen løses også ved synkronisering av maskinvare
- Synchroniseringsmaskinvare er ikke en enkel metode å implementere for alle, så den strenge programvaremetoden kjent som Mutex Locks ble også introdusert.
- Semaphore er en annen algoritme eller løsning på det kritiske seksjonsproblemet.