Kelneren: En studie i fleroppgavekjøring med avbruddshåndtering

Moderne datamaskiner trenger å håndtere mange arbeidsoppgaver samtidig.
    Skriverhåndtering er et eksempel på det. De fleste skrivere kan bare håndtere en en brøkdel av de tegnene datamaskinen kan sende til den pr. sekund - skriveren er mye langsommere enn datamaskinen. For at du skal slippe å sitte og vente på at skriveren skal bli ferdig, kan du starte et program som går parallelt med det programmet du selv bruker. (I MS-DOS starter du et slikt program med PRINT-kommandoen.) Dette programmet ser etter filer som skal skrives ut på platelageret, og sender dem til skriveren i en hastighet som passer til det tempoet skriveren kan ta unna tegn med. I dette tilfellet kjører maskinen to programmer samtidig
    Det finnes mange andre eksempler på nytten av at maskiner kan kjøre mange programmer samtidig. For eksempel er mange av de personlige maskinene som du ser i dag vindusorienterte. De gir deg mulighet for å bruke ett program (for eksempel en tekstbehandler) i ett vindu og et annet program (for eksempel et regneark) i et annet. Du kan velge hvilket program du vil bruke ved å peke på vinduet til programmet med musa. I tillegg kan du ha gående programmer i maskinen som sender filer til utskrift, og kanskje andre programmer som håndterer nettverksforbindelser. Atter andre maskiner kan ha mange brukere tilknyttet samme prosessor fra terminaler, og hver bruker kjører ett eller flere programmer.
   Alle disse tilfellene der datamaskinen utfører flere oppgaver samtidig er eksempler på fleroppgavekjøring eller multiprogrammering.
    For å få bedre grep på hvordan maskinen utfører fleroppgavekjøring, skal vi se i litt detalj på et eksempel fra arbeidslivet: En kelner som betjener gjestene i sin restaurant.* I dette tilfellet er kelneren "prosessoren". Han/hun har som oppgave å betjene kundene som kommer inn. Hver kunde har ideer om hva som skal inngå i måltidet og hvilken rekkefølge rettene skal inntas i. Vi kan si at hver kunde representerer et "program" som "prosessoren" skal utføre.
    Til å hjelpe seg har kelneren en "ytre enhet", nemlig kjøkkenet, som tar i mot beskjeder han/hun formidler fra kundene og omsetter dem i mat som han bringer tilbake fra kjøkkenet. Kelnerens jobb ligner på jobben mange prosessorer utfører når de håndterer flere oppgaver samtidig, slik som i eksemplene ovenfor. La oss innledningsvis anta at restauranten nettopp har åpnet, og er tom mens kelneren venter på at noe skal skje. I framstillingen nedenfor representerer numrene til de avbruddene som inntreffer i løpet av kundens besøk i restauranten. For enkelhets skyld presenterer vi ikke særlig krevende kunder i det som følger.

1) En kunde kommer inn døra. For kelneren er dette et avbrudd - han avbryter ventingen og går bort til kunden for å finne hva kunden ønsker. Kunden ønsker et bord og en meny. Kelneren finner et sted i lokalet til kunden, og henter en meny. Så kan kelneren vente en stund igjen.inntil kunden rekker fingeren i været

2) som tegn på at han ønsker kontakt med kelneren - nok et avbrudd fra programmet til prosessoren! Kelneren går bort til kunden, klar til å notere seg hans ønsker. Kunden oppgir hvilke retter han vil ha, kelneren noterer seg dem og gir ordren til

3) kjøkkenet for å sette tilberedningen i gang. Nå må både kelner og kunde vente til neste avbrudd, som er at

4) kjøkkenet har gjort seg ferdig med prosesseringen av ordren, slik at retten kan bringes til kundens bord. Kelnerens venting avbrytes, han henter retten og bringer den til kunden.

5) Kundens venting avbrytes, han begynner å spise mens kelneren venter igjen. Når kunden er ferdig,

6) avbryter han kelnerens venting med nok et signal: han vil betale. Kelneren går til kassaapparatet for å beregne totalen, mens kunden venter.

7) Så kommer kelneren med regningen, kunden betaler og forlater lokalet mens kelneren gir seg til å vente på neste kunde.

    La oss oversette dette hendelsesforløpet til edb-språket slik vi kjenner det. Avbrudd 1) forteller prosessoren at den skal begynne å utføre instruksjonene i et program. 2) er et indre avbrudd fra programmet om at det ønsker prosessorens oppmerksomhet. 3) er et indre avbrudd fra prosessoren til en ytre enhet om at tjenester fra den ytre enheten er ønsket. 4) er et ytre avbrudd fra denne enheten til prosessoren om at tjenesten er utført, og at resultatet er klar til bruk. 5) er et
indre avbrudd fra prosessoren til programmet om at tjenesten det ba om er utført og at det kan bruke resulltatet. 6) er nok et indre avbrudd fra programmet for å få tjenester fra prosessoren, denne gang ber det om å bli avsluttet. 7) er et indre avbrudd som forteller proses.soren om at ressursene programmet opptok (bordet) er ledige for nye programmer.

    I dette tilfellet har kelneren bare en kunde å ta vare på, og eksemplet blir tilsvarende enkelt. Nå kan vi gjøre situasjonen mer komplisert: Etter at første kunde har fått bestilt, kommer nok en kunde. Vi antar videre at kundene har lik prioritet sett fra restaurantens side, mens kokken på kjøkkenet bare kan håndtere en bestilling av gangen. Det betyr at kelneren må legge bestillingene fra seg, slik at kokken kan hente neste bestilling når han er ferdig med den forrige.

    Kelneren må merke seg alle avbrudd som skjer i restauranten mens han arbeider. Kommer et avbrudd fra kunde b) mens han betjener kunde a), merker han seg dette, og kommer tilbake til kunde b) så snart han er ferdig med oppdragene fra kunde a).

De fleste kelnere vil forsøke å rasjonalisere dette arbeidet. La oss si at a) og b) har nabobord som begge ligger et stykke fra kjøkkenet og kassaapparatet. Hvis det kommer et avbrudd fra a) mens b) tar opp bestilling, kan han legge veien innom a) på vei til kjøkkenet, for å bestemme hva kunden ønsker. Hvis a) ber om regning, kan kelneren først gå til kjøkkenet med
bestillingen, så til kassaapparatet etter regningen, og så bringe regningen til a). Dermed sparer han både tid og føtter i forhold til om han først tok a)s bestilling til kjøkkenet, så gikk tilbake til b), så til kassaapparatet, så til b) igjen. Han kunne også bestemme seg for å vente litt ved kassaapparatet siden det er ved siden av kjøkkenet og b)s mat snart er klar. Dermed kan han få med seg både mat og regning tilbake til kundene i samme omgang.

* Dette eksemplet kan virke søkt. På den andre siden ligger det godt til rette for et rollespill som kan klargjøre avbruddshåndteringen for deg. Kelner-metaforen er også nokså mangetydig: den introduserer en tenkemåte som er vanlig i samband med operativsystemer på personlige datamaskiner og på større maskiner der flere prosessorer deler hovedlager. Det finnes videre en datasystemmodell som er i frammarsj, og som kalles "client-server"-modellen. Denne har navnet sitt fra kelner-metaforen. Her er det gjerne et nettverk der en større sentral ressurs tar i mot forespørsler om tjenester fra distribuerte enheter - personlige datamaskiner og andre - og returnerer svar (om den da ikke finner å måtte avvise klienten). En server kan gjerne være en større datamaskin som inneholder et databasehåndteringssystem. Og klientene kan være de enhetene som oppdaterer innholdet i databasen.
 

Temaet har mange variasjoner

Dette temaet kan varieres på mange måter. En vri er å se på en medisinsk poliklinikk, der skader og sykdommer kan klassifiseres som akutt eller ikke akutt, og der "kundene" er pasienter og "kelneren" er lege. Anta videre at b) har en akutt skade, mens det ikke har hast med å behandle a).

    Da har avbruddene fra pasient b) høyere prioritet enn avbruddene fra pasient a), noe som tilsvarer at b) i edb-termer f.eks. er en tekstbehandler der brukeren er avhengig av rask respons fra maskinen, mens a) er et program som skriver filer på en skriver. Hvis det kommer et avbrudd fra b) mens prosessoren betjener a), må han forlate a) øyeblikkelig. Han kan ikke komme tilbake før det ikke er mer han kan få gjort for b). Når han så kommer tilbake til a), må han huske hvor
langt han har kommet i å behandle a)s avbrudd, slik at han kan ta fatt der han slapp. Hvis det kommer flere avbrudd fra b) eller fordi arbeid ytre enheter skulle gjøre for b) er ferdig, må han nok en gang merke seg hvor langt han har kommet i å ta seg av a) før han går over til å ta seg av b) igjen.

    I forrige kapittel var det bare en "prosessor” som deltok i kundebehandlingen, nemlig kelneren (eller legen i dette underkapitlet). En annen variasjon er å ha to eller flere prosessorer, det vil si at det er et multiprosessorsystem. Da stilles nye krav, for eksempel fordi bare en kelner kan bruke kassaapparatet eller tappeanlegget for øl av gangen. I dette tilfellet kan kelneren som ser at kassa er opptatt effektuere en bestilling av øl i stedet, og hente sine regninger litt senere.

   Det kan virke litt kunstig at mens både gjester, kjøkkenbetjening og kelnere er mennesker som hver for seg handler på bakgrunn av de data de har, er det bare kelnerne som er den handlende parten i denne metaforen. Det er ikke noe i veien for at vi kan utvide to-kelner-metaforen slik at kelnerne har forskjellige oppgaver - noen er hovmestre som tar i mot kunder og tilviser plasser, andre tilbereder mat ved bordene, eller slik at vi tar kjøkkenbetjening og gjester inn i den og sier at de er spesialiserte prosessorer, de også.

    Dette er nokså likt alle datamaskiner. Både diskettstasjoner og platelager har prosessorer på sine kontrollere som deltar i programutførelsen, det samme gjelder tastatur, mus, serie- ogparallellporter og så videre, i tillegg til hovedprosessoren. Maskinvaren og programvaren i operativsystemet er også bygget slik at konflikter, slik som når to kelnere prøver å bruke kassa samtidig, kan unngås.



Tilbake til innholdsfortegnelsen.