Foreldre- og Barneprosess

Fra IT2
Hopp til: navigasjon, søk

Det er to sentrale systemkall som er aktive i denne forbindelsen. Det er fork og exec. Systemkallet fork brukes for å opprette den nye prosessen, den prosessen som skal utføre ls-programkoden. Systemkallet utføres av skall-prosessen etter at det har mottatt ls-kommandoen fra tastaturet. Det er vanlig å kalle de to prosessene som er invovlvert for henholdsvis foreldre-prosess og barne-prosess

Metoden som fork-systemkallet benytter når det skal lage en ny prosess er følgende: Først lages det en ny prosessdeskriptor til den nye barneprosessen. Deretter kopieres innholdet fra foreldreprosessen sin prosessdeskriptor over til barneprosessen sin prosessdeskriptor. I tillegg får barneprosessen kopi av programkode, data og stakk til sine egne områder i minnet. Kopi av prosessdeskriptor innebærer også at barneprosessen får adgang til alle filene som foreldreprosessen har adgang til.

Kort sakt, det foregår altså en kloning av prosesser. Selvsagt får prosessene hvert sitt pid-nummer, de har jo forskjellige innslag i [[prosess tabell|prosesstabellen]. Barneprosessen arver alt den trenger av foreldreprosessen.

Foreldreprosess og barneprosess kjører altså i sine egne private adresserom. De har hver sin kopi av informasjon.

Fork.png

Figuren ovenfor oppsummerer opprettelsen av ny prosess ved hjelp av fork og exec. Først har vi den opprinnelige prosessen som i dette tilfellet er kommandokallet bash. Den utfører systemkallet fork og oppretter dermed en ny prosess identisk seg selv, men med annet pid-nummer. Begge prosessene, både foreldre og barn har akkurat samme programkode, som i dette tilfellet er bash sin programkode. Begge prosessene ligger i cpu-kø etter at fork-systemkallet er utført. Det første barneprosessen gjør når den kommer til cpuen er å utføre exec-systemkallet for å skifte ut den programkoden den arvet fra foreldreprosessen med noe annet. I eksemplet er det brukt programkoden til ls-kommandoen.