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
- Tekstsegmentet. Her ligger hele programkoden.
- Datasegmentet. Her ligger globale variabler og andre variabler som ikke endrer seg.
- Stacksegmentet. Her ligger stacken med lokale variabler og returadresser fra funksjonskall.
Prosesstilstander
En prosess kan befinne seg i en av tre ulike tilstander:
- Running
- Ready
- 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