Fleroppgavekjøring

Fra Wikipedia, den frie encyklopedi

Multitasking er et begrep som brukes når det tilsynelatende er mer enn én handling som utføres på en gang.

Multitasking bygger på det faktum at I/O-operasjoner tar lang tid, og at i stedet for å vente kan en kjøre andre programmer på CPU-en. Mens et program venter på overføring av data fra for eksempel harddisk, kan et annet kjøre på CPU-en. Med flere prosesser, og eventuelt tråder, inne i minnet samtidig kan en oppnå en meget effektiv utnyttelse av CPU. På de vanligste moderne interaktive operativsystemene skjer byttene mellom prosessene så ofte at brukeren oppfatter det som at alle kjører samtidig.

Kooperativ multitasking[rediger | rediger kilde]

Utdypende artikkel: kooperativ fleroppgavekjøring

Med kooperativ multitasking samarbeider programmene om å dele CPU-tid mellom seg. En prosess fortsetter å utføre instruksjoner alene på CPU-en helt til den sier at det er greit at en annen prosess overtar.

Det er opp til programmererne å sørge for at programmene deres ga fra seg CPU-en når de ikke lenger hadde noe nyttig å foreta seg på en stund, for eksempel fordi de venter på at en I/O-operasjon skal bli ferdig. Dersom et program henger seg opp eller utfører langvarige operasjoner uten å slippe til andre prosesser, vil hele systemet gå i stå.

Preemptiv multitasking[rediger | rediger kilde]

Med preemtiv multitasking sørger operativsystemet for at de ulike prosessene bare får lov til å kjøre en liten stund før de blir byttet ut. Preemtiv multitasking bygger på det at prosessorer avbryter den vanlige utførelsen av instruksjoner og overlater kontrollen til operativsystemets kjerne når den mottar et avbrudd. Når operativsystemet er ferdig med å håndtere avbruddet kan det velge å gi CPU-en tilbake til en annen prosess enn den som ble avbrutt. For å sørge for at avbrudd kommer regelmessig nok kan man benytte en klokke som sender et signal med jevne mellomrom, typisk mange ganger i sekundet.

For å velge hvilken prosess som skal overta må operativsystemet holde oversikt over alle prosessene, inkludert informasjon som når de sist kjørte, hvilken prioritet de har blitt gitt og om de venter på at et eller annet skal skje før de kan fortsette.

Som med kooperativ multitasking er det også mulig for programmer å frivillig gi fra seg CPU-en dersom de ikke trenger den på en stund.

Multithreading[rediger | rediger kilde]

I utgangspunktet gikk multitasking ut på å bytte mellom prosesser, som hver utførte sin kode uavhengig av de andre og hadde sitt eget separate minneområde. Etterhvert begynte man å lage prosesser som samarbeidet med hverandre. For eksempel kunne et program starte opp en ny prosess for å utføre bakgrunnsarbeid mens hovedprosessen fortsetter å svare på brukerens kommandoer. Det at prosessene hadde separate minneområder ble nå et problem som gjorde datautveksling vanskelig.

Løsningen ble tråder. Trådene i en prosess deler prosessens minneområde, men utfører kode uavhengig av hverandre. I stedet for å fordeler CPU-tiden mellom prosesser, vil et operativsystem som støtter tråder fordele CPU-tiden mellom trådene på samme måte.

Hybridløsning[rediger | rediger kilde]

Selv på et operativsystem med preemtiv multitasking er det mulig for en prosess å benytte kooperativ multitaksing mellom sine interne arbeidsoppgaver. Disse arbeidsoppgavene kalles fibre.

Noen operativsystemer, slik som Microsoft Windows, har innebygget støtte for fibre, men det er mulig for programmer å selv implementere fibre på operativsystemer uten støtte for dette.