Prosess tabell

Fra IT2
Hopp til: navigasjon, søk

Hver prosess har sin egen prosessdeskriptor. I Linux lagres prosessdeskriptorene i en prosesstabell som er felles for hele Linux-systemet. Dette er en tabell med et bestemt antall plasser, og det er derfor ei grense for hvor mange prosesser en kan kjøre på et Linux-system.

Prosess-tabell.png

I praksis vil dette ikke oppleves som en grense. I Linux-kjerne versjon 2.6 (release date desember 2003) kan en ha inntil 1 milliard prosesser. I versjoner før 2.6 kunne en bare ha inntil 32,000 prosesser. Størrelsen på tabellen kan du selv angi når du kompilerer ny kjerne, og som oftest vil du ikke ha behov for 1 millard plasser i prosesstabellen.

Hvert innslag i denne prosess-tabellen inneholder altså en komplett prosessdeskriptor, dvs komplett informasjon om hver prosess. Eksempler på informasjon som lagres er adressen til prosessen, størrelse, prosess-ID, og ID til foreldre-prosess, navnet på brukeren som eier prosessen, klokkeslett for oppstart etc.

Prosess-tabellen blir brukt ganske mange ganger i løpet av livssyklusen til en prosess. Ved opprettelsen av en prosess lages det et nytt innslag i prosess-tabellen som skal inneholde prosessdeskriptoren til denne nye prosessen. Når tilstanden til prosessen endres, for eksempel fra kjørende til blokkert, må denne endringen registreres i prosess-tabellen. Når en prosess avsluttes må det aktuelle innslaget i prosess-tabellen frigjøres. Det betyr at prosessdeskriptoren til denne prosessen må fjernes.

Det er helt nødvendig at prosess-tabellen befinner seg i minnet til enhver tid slik at kjernen til Linux kan ta affære på vegne av prosesser, selv om disse ikke kjører akkurat nå. Det er jo mange ting som kan hende i systemet som angår en bestemt prosess. også ting som angår prosesser som ligger i ventekø. Dette er for eksempel tilfellet når en prosess ligger i I/O kø og venter på at diskblokker skal overføres fra disken til minne. Når det kommer et avbrudd til Linux om at denne overføring fra disk er ferdig, må Linux markere dette i prosessdeskriptoren til denne prosessen, det vil si endre status fra blokkert til klar, ved at prosessen flyttes prosessen fra I/O-kø til CPU-kø