Prosess

En prosess er innenfor informatikken definert som et program under eksekvering. CPUen kan kun kjøre en prosess om gangen, og hver prosess har både et adresseområde i minnet, samt registre, program counter, stack pointer og andre registre.

Hovedprinsipper for prosesser

Ressursgruppering

En prosess er en måte å gruppere ressurser som hører sammen. Hver prosess har sitt eget minneområde som inneholder programkoden, globale variable, åpne filer og eventuelle signaler. Hver prosess kan ha én eller flere tråder som deler disse ressursene.

Eksekvering

Når CPUen skal kjøre kode så er det en tråden som blir kjørt – ikke prosessen. Tråden inneholder program counter, registre og stack. Det er mulig for tråder å skrive til de samme minneadressene, siden tråder innenfor samme prosess deler samme adresseområde – vi må ta hensyn til dette når vi lager programmer med flere tråder.

Multiprogrammering

Multiprogrammering er viktig dersom vi har en CPU med kun én kjerne og én tråd. CPUen er da nødt til å kjøre prosessene sekvensielt – altså etter hverandre.

La oss si at vi har en tidkrevende videokodingsprosess som kjører på datamaskinen. Da vil vi i utgangspunktet ikke kunne gjøre noe annet samtidig, som for eksempel å skrive inn nye bokstaver i kommandolinja eller flytte på musepekeren. For et moderne operativsystem rettet mot forbrukere ville dette vært uakseptabelt, derfor bruker vi multiprogrammering til å gjøre stadige bytter mellom prosesser. Dersom vi kun lar vår videokodingsprosess kjøre i noen titalls millisekunder om gangen, og deretter bytter til å lese input på kommandolinja eller flytte på musepekeren, så vil responsen fra datamaskinen være så rask at brukeren ikke opplever at datamaskinen har låst seg.

CPUen er nødt til å bytte mellom ulike prosesser raskt i et Context switch – ellers vil datamaskinen oppleves treg.

Minneområde til prosesser

I UNIX har er minnet til en prosess delt opp i tre segmenter

  1. Tekstsegmentet. Her ligger hele programkoden.
  2. Datasegmentet. Her ligger globale variabler og andre variabler som ikke endrer seg.
  3. Stacksegmentet. Her ligger stacken med lokale variabler og returadresser fra funksjonskall.

⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠ You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'

Excalidraw Data

Text Elements

Stack
Text
Data
Gap (ledig)
Minneadresse 0000
Minneadresse FFFF
Data vokser
gjennom systemkall
Stacken utvider seg
automatisk

Process control block

OSet lager en Process control block (PCB, noen ganger også kalt process table) for hver prosess som kjører. Ifølge Operating Systems Internals and Design Principles av Stallings er PCB en oversikt som gir informasjon om:

  • Prosessens ID.
  • Prosessens tilstand. For eksempel running, blocked eller ready.
  • Program Counter. Inneholder minneadressen til den neste instruksjonen som prosessen ønsker å gjennomføre
  • Registre. Detter er små minnelagre i CPU som må lagres til minnet hver gang vi gjør et kontekstbytte.
  • Informasjon om minnet. For eksempel informasjon om mappingen mellom fysisk minne og virtuelt minne.
  • I/O status. Blant annet hvilke I/O enheter som er knyttet til prosessen
  • Hvor mye CPU-tid som prosessen har brukt og hvilken prioritet prosessen har.

Process table

Modern Operating Systems av Tanenbaum bruker også begrepet process table om PCB, mens Operating Systems Internals and Design Principles av Stallings bruker process table om operativsystemets oversikt over alle prosessene som kjører.

Ifølge Operating Systems Internals and Design Principles av Stallings så har hver prosess et process image som består av prosessens process control block og de tre minnesegmentene til prosessen.

Prosesstilstander

En prosess kan befinne seg i en av tre ulike tilstander:

  1. Running
  2. Ready
  3. Blocked

Running

En prosess er running så lenge prosessoren kjører den.

Blocked

Hvis en prosess må vente på input så kan den sende et systemkallet pause for å bli blokkert. I UNIX så blir prosesser som skal lese fra pipes eller stdin automatisk blokkert

Ready

En prosess som er ready er klar til å kjøres, men OSet velger å ikke kjøre den akkurat nå – som oftest på grunn av mangel på CPU-tid. Det er Scedhuleren som styrer hvilken prosess som blir kjørt på CPUen.

{
	"versionAtEmbed": "0.2.6",
	"filepath": "_resources/Ink/Writing/2024.10.1 - 8.36am.writing"
}

Tråder

Tråder er