En förenklad beskrivning:
En process har ett virtuellt adressutrymme som den fyller med program och data. Det maximala adressutrymmet på en 32-bits maskin är <4GB medans en 64-bitsmaskin kan ha mycket större adressutrymme.
Programdelen i processen består (naturligtvis) av programmet i sig, men framför allt (och särskilt under OS X) så finns en stor mängd delade bibliotek (frameworks). Poängen är här att om två program använder t.ex. SQLite eller Core Graphics, så behöver de läsas in i RAM-minnet endast en gång. Båda processerna kan dela på samma RAM-minne. Detta sparar RAM.
Dessa delar av adressutrymmet är skrivskyddade. Ett av programmen kan alltså inte skriva och ändra i Core Graphics och störa något annat program som använder den delen.
Ett program behöver också data. Denna del av minnet kan både läsas och skrivas och är (normalt) endast åtkomligt från en process.
Om man går in i terminalen kan man titta på det virtuella adressutrymmet för en process.
$ vmmap pid
Anta nu att du avslutar iPhoto. Den har en del privata data-areor. Dessa minnesareor kan inte återanvändas utan lämnas tillbaka som ledigt minne.
Vi antar också att iPhoto använde Core Graphics och hade laddat detta i RAM. Ingen annan process använder Core Graphics för tillfället. Då iPhoto avslutas kommer RAM-minnet som innehåller Core Graphics att vara inaktivt. Poängen med detta är att om något annat program skulle börja behöva Core Graphics så ligger det redan i minnet och behöver inte läsas in. Det inaktiva minnet är alltså mer värdefullt än det lediga minnet eftersom det innehåller data som kan återanvändas.
Anta nu att du startar ett annat program som behöver mer minne än vad du har ledigt minne. Vi blir nu tvugna att ta av det inaktiva minnet, kanske den del som hade Core Graphics inladdat. Observera att vi inte nödvändigtvis behöver "swappa" i detta läge eftersom RAM-minnet var skrivskyddat; innehållet i RAM är identiskt med förlagan på hårddisken. Vi kan alltså ta detta RAM-minne precis lika enkelt som vi kan ta ledigt minne. Men nackdelen är att vi nu inte längre har Core Graphics i RAM längre och nästa process som behöver Core Graphics blir nu tvungen att ladda in från hårddisken.
Kan iPhoto ta 1500MB?
Ja, varför inte? De gränser som finns är:
- 32-bits-processer kan ta max 4GB
- En process kan inte ta mer RAM än vad den har virtuellt minne.
Annars kan en process i princip ta hela ditt tillgängliga RAM