Petersons algoritme
Den Peterson algoritme (også kjent som de kanadiske prosesser) er en løsning av problemet med gjensidig utelukkelse ( mutex ) i desentralisert styring av prosesser ( prosess synkronisering ). Den ble formulert i 1981 av Gary L. Peterson og sørger for at bare en prosess noen gang kan nå en kritisk del ( sekvensialisering ). I skjemaet som er beskrevet her, kan det bare utelukke to prosesser gjensidig.
Flytskjema
I C- kode kan Petersons algoritme vises som følger:
#define FALSE 0
#define TRUE 1
#define N 2 // Anzahl der Prozesse
volatile int turn; // Gibt an, wer gerade an der Reihe ist
volatile int interested[N]; // Alle Werte mit 0 (FALSE) initialisieren
void enter_region(int process)
{
int other; // Prozessnummer des anderen Prozesses
other = 1 - process; // Der andere Prozess
interested[process] = TRUE; // Interesse zeigen
turn = other; // Flag setzen
while (interested[other] == TRUE && turn == other) ; // Leeranweisung (Aktives Warten)
}
void leave_region(int process) // Prozess, der die kritische Region verlässt
{
interested[process] = FALSE; // Zeigt den Ausstieg aus dem kritischen Bereich an
}
funksjonalitet
Før du går inn i en kritisk region, ringer hver prosess enter_region(int process)
med sitt eget prosessnummer, 0 eller 1, som parameter. Inntreden i den kritiske regionen blir dermed forsinket til den er trygg. Så snart en prosess forlater den kritiske regionen, kaller den opp leave_region(int process)
med sitt eget prosessnummer som parameter. En annen prosess kan nå komme inn i den kritiske regionen hvis den ønsker det.
eksempel 1
- Det er ingen prosess i den kritiske regionen.
- Prosessen med prosessnummer 0 ringer
enter_region(int process)
med prosessnummer 0 som parameter. - Ved å angi
interested[process] = TRUE
hvorprocess = 0
, viser denne prosessen sin interesse i å komme inn i den kritiske regionen. - Han
turn = other
gir den andre prosessen muligheten til å komme inn i den kritiske regionen hvis den er interessert. - Siden prosessen med prosess nummer 1 ikke er interessert i å komme inn i den kritiske regionen, returnerer funksjonen umiddelbart
enter_region(int process)
uten å utførewhile
sløyfen. Prosessen med prosessnummer 0 kommer dermed inn i den kritiske regionen. - Hvis prosessen med prosess nummer 1 nå uttrykker interesse for å komme inn i den kritiske regionen, må den vente til prosessen med prosessnummer 0
leave_region(int process)
ringer med sitt eget prosessnummer som parameter for å forlate den kritiske regionen.
Eksempel 2
- To prosesser kaller nesten samtidig
enter_region(int process)
med prosessnumrene som parametere. Begge komponentene iinterested
matrisen er dermed satt til SANT. - En av de to prosessene (la oss si prosessen med prosess nummer 1) lagrer verdien av variabelen
turn
sist og setter den dermed til 0 (turn = other
). - Prosessen med prosessnummer 0
while
utfører derfor ikke sløyfen og returnerer umiddelbart. - Prosessen med prosessnummer 0 kommer inn i den kritiske regionen.
- Prosessen med prosess nummer 1 må nå vente fordi begge er satt
interested[other]
til SANT ogturn = other
. Den venter til prosessen med prosessnummer 0 harleave_region(int process)
ringt,interested
setter komponenten tilbake til FALSE, og har dermed forlatt den kritiske regionen igjen.
betydning
Peterson-algoritmen er enklere enn Dekker-algoritmen , som også løser det gjensidige ekskluderingsproblemet. Likevel arver den den vesentlige ulempen med den desentraliserte kontrollen: Venteprosesser gir ikke opp prosessoren , men krever heller gjennom aktiv venting .
En algoritme som Peterson-algoritmen brukes faktisk bare til å implementere gjensidig ekskludering på et datasystem med to prosessorer som ikke har noen instruksjoner som test-og-sett eller sammenlign-og-bytt . Dagens prosessorer har vanligvis dette. På et høyt nivå språk brukes bare eksisterende språkelementer som semaforer eller metoder og instruksjonssekvenser som er erklært som "synkronisert". Dette har fordelen at en ventende tråd blokkerer, dvs. H. frigjør prosessoren for andre oppgaver.
Det er mulig å generalisere Petersons algoritme slik at problemet med gjensidig utelukkelse av n parallelle prosesser kan løses.
Se også
Individuelle bevis
- ^ GL Peterson: "Myter om det gjensidige utelukkelsesproblemet", Informasjonsbehandling Letters 12 (3) 1981, 115-116
- ↑ Andrew S. Tanenbaum : Modern Operating Systems . 3. oppdaterte utgave. Pearson Studies, ISBN 978-3-8273-7342-7