Banker's algoritme

Banker’s algoritme er en algoritme oppfunnet av Edsger Dijkstra. Algoritmen har som formål å unngå vranglås (deadlock) i operativsystemer. Navnet “Banker’s” kommer av at bank systemer teoretisk sett kunne dratt nytte av algoritmen for å ikke gå tom for ressurser i forhold til forespørselen fra kundene. Algoritmen vil sørge for at banker alltid har ressurser disponibelt for dem som trenger det.
Følgende opplysninger kreves for at algoritmen skal fungere:

  • MAX – Hvor mye ressurser en prosess kan kreve
  • ALLOCATED – Hvor mye ressurser en prosess har fått tildelt
  • AVAILABLE – Hvor mye ressurser som systemet har tilgjengelig

Ressurser kan bare tildeles en prosess under følgende forutsetning:
Forespørselen er mindre, eller lik AVAILABLE
Dersom forespørselen er høyere enn AVAILABLE, må prosessen vente på ledige ressurser.

Prosess ALLOCATION MAX AVAILABLE NEED
ABC ABC ABC ABC
P0 010 753 332 743
P1 200 322 122
P2 302 902 600
P3 211 222 011
P4 002 433 431

Starter med å finne NEED ved å trekke fra ALLOCATION fra MAX for alle prosessene.
Ny AVAILABLE = AVAILABLE + ALLOCATION

Prosess ALLOCATION MAX AVAILABLE NEED
ABC ABC ABC ABC
P0 010 753 332 743
P1 200 322 532 122
P2 302 902 743 600
P3 211 222 745 011
P4 002 433 755 431
1057

P0 krever 743. Er 743 mindre eller lik 332? Nei. Gå videre til neste prosess.
P1 krever 122. Er 122 mindre eller lik 332? Ja. Ny AVAILABLE blir 332 + 200 = 532
P2 krever 600. Er 600 mindre eller lik 532? Nei. Gå videre til neste prosess.
P3 krever 011. Er 011 mindre eller lik 532? Ja. Ny AVAILABLE blir 532 + 211 = 743
P4 krever 431. Er 431 mindre eller lik 743? Ja. Ny AVAILABLE blir 743 + 002 = 745
Så går vi tilbake til toppen av lista, og fortsetter med de prosessene som vi hoppet over.
P0 krever 743. Er 743 mindre eller lik 745? Ja. Ny AVAILABLE blir 745 + 010 = 755
P2 krever 600. er 600 mindre eller lik 755? Ja. Ny AVAILABLE blir 755 + 302 = 1057
Rekkefølgen blir: P1, P3, P4, P0, P2
Oppgave

Prosess ALLOCATION MAX AVAILABLE NEED
ABCD ABCD ABCD ABCD
P0 0012 0012 1520
P1 1000 1750
P2 1354 2356
P3 0632 0652
P4 0014 0656

Spørsmål: Hva er innholdet i matrisen Need (trenger/behov)?
Starter med å finne NEED for hver prosess ved å trekke fra ALLOCATION fra MAX.

Prosess ALLOCATION MAX AVAILABLE NEED
ABCD ABCD ABCD ABCD
P0 0012 0012 1520 0000
P1 1000 1750 750
P2 1354 2356 1002
P3 0632 0652 0020
P4 0014 0656 0642

P0 krever 0000. Er 0000 mindre eller lik 1520? Ja. Ny AVAILABLE blir 1520 + 0012 = 1532
P1 krever 750. Er 750 mindre eller lik 1532? Ja. Ny AVAILABLE blir 1532 + 1000 = 2532
P2 krever 1002. Er 1002 mindre eller lik 2532? Ja. Ny AVAILABLE blir 2532 + 1354 = 3886
P3 krever 0020. er 0020 mindre eller lik 3886? Ja. Ny AVAILABLE blir 3886 + 0632 = 4518
P4 krever 0642. Er 0642 mindre eller lik 4518? Ja. Ny AVAILABLE blir 4518 + 0014 = 4532

Prosess ALLOCATION MAX AVAILABLE NEED
ABCD ABCD ABCD ABCD
P0 0012 0012 1520 0000
P1 1000 1750 1532 750
P2 1354 2356 2532 1002
P3 0632 0652 3886 0020
P4 0014 0656 4518 0642
4532

Rekkefølge: P0, P1, P2, P3, P4
Hvis systemet klarer å fordele ressurser til alle prosessene, er systemet i “safe state”. Hvis systemet ikke klarer å fordele ressurser til alle prosessene i systemet, er systemet i “unsafe state”. I begge eksemplene ovenfor er systemet i “safe state” siden det klarer å fordele ressurser til alle prosessene.
Spørsmål 2: Dersom en forespørsel fra prosess P1 kommer med verdiene (0,4,2,0). Kan denne forespørselen bli gitt umiddelbart?
P1 krever 0420. Er 0420 mindre eller lik 1520? Ja. Ny AVAILABLE blir 1532 + 1000 = 2532. Forespørselen kan bli gitt umiddelbart.
Håper dette ga en bedre forståelse for hvordan Banker’s algoritme fungerer.
 
 

Leave a Comment