**Prosess** er innenfor informatikken eksekvering av et program.

I operativsystemer som er av typen multitasking vil det eksistere mange prosesser til enhver tid. Da en prosessor bare kan gjøre én ting av gangen, vil operativsystemet fordele prosessortid til de forskjellige prosessene etter en bestemt algoritme (såkalt scheduling).

Operativsystemet vil også sørge for at de forskjellige prosessene ikke kan ødelegge for hverandre. Prosessene vil få tildelt adskilte minnesegmenter, som prosessen selv har eksklusiv tilgang til. De fleste operativsystemer tilbyr likevel måter for flere prosesser å dele bestemte minneområder, for å la flere prosesser kunne kommunisere på en effektiv måte.

Prosesser i UNIX
----------------

I UNIX skapes en prosess av at en allerede eksisterende prosess kaller en rutine kalt *fork*. UNIX skaper da en kopi av den allerede eksisterende prosessen. Denne nye prosessen sies da å være *barnet* (*barneprosessen*) til *foreldreprosessen*, prosessen som gjorde kallet på fork.

Hver prosess i UNIX får tildelt et spesielt prosessnummer, kalt pid (*process id*). Foreldreprosessen får tilgang til dette prosessnummeret, mens barneprosessen oppfatter det slik at den selv har prosessnummer 0. 

Ofte vil foreldreprosessen vente («sove») til barneprosessen er ferdig med å kjøre. Da vil forelderen si fra til systemet om at den ikke trenger prosessortid før barnet har kjørt seg ferdig. Dette kalles *seriellprosessering*. Enkelte applikasjoner (for eksempel et shell) ønsker imidlertid at foreldreprosessen skal fortsette å kjøre, parallelt med barneprosessen. Dette kalles da *parallellprosessering*. I motsetning til i mange andre operativsystemer er det i UNIX små forskjeller i hvordan man skaper serielle og parallelle prosesser.

UNIX bruker en *prosesstabell* til å holde rede på de forskjellige prosessene. En *anførsel* (engelsk: entry) skapes i denne tabellen når en ny prosess skapes. Denne plassen frigjøres igjen når prosessen har kjørt seg ferdig. Hver anførsel i tabellen inneholder de data UNIX trenger å holde rede på når prosessen *ikke* er aktiv. Hver anførsel i tabellen har en *prioritet*, og når en prosess har avsluttet eller brukt opp prosessorkvoten sin vil den prosessen i listen med høyest prioritet bli valgt som ny aktiv prosess.

Prosesser i Microsoft Windows
-----------------------------

Microsoft Windows er et såkalt *preemtive multitasking* operativsystem, det støtter altså flere prosesser og tråder av gangen. Hver prosess får en gitt mengde tid, kalt *kvantum*, som kan brukes til å få tilgang til prosessoren. Når kvantumet er brukt opp, avbryter Windows prosessen og gir prosessen med høyest prioritet til prosessoren.

Windows XP bruker 32 forskjellige prioritetsnivåer, nummerert fra 0 til 31. Nivåene fra 16 til 31 er reservert for operativsystemkjernen, mens nivåene 0 til 15 brukes av brukerens prosesser.

Hver brukerprosess begynner med en bestemt prioritet. Kjernen kan fortløpende manipulere disse prioritetene om den finner det nødvendig. Dette kan for eksempel være nødvendig når en interaktiv prosess venter på inndata fra brukeren, og det derfor er nødvendig å prioritere denne på bekostning av mindre viktige prosesser, eksempelvis prosesser som skriver til platelageret.

Prosesser på Mac OS X
---------------------

Mac OS Xs kjerne er en mikrokjerne. Denne mikrokjernen holder rede på forskjellige *oppgaver*, der en oppgave består av mange *tråder*. I denne sammenhengen er en tråd grunnenheten som kjernen tildeler prosessortid. Det man ville ha kalt en prosess på et annet system består altså i OS Xs kjerne av en oppgave og en eller flere tråder.

Over kjernen finnes det på Macplattformen et BSD-lag. BSD ser på det aktive programmet som en prosess, og tilordner denne til en enkelt oppgave i kjernen, samt til en eller flere tråder. 

På samme måte som Windows XP holder kjernen i OS X alle trådene i en prioritetskø, der kjernen kan manipulere prioritetene til trådene. Det finnes fire forskjellige prioritetsnivåer, og kjernen kan flytte tråder mellom disse. 

|  |  |
| --- | --- |
| Oppslagsverk/autoritetsdata | GND
 |