Virtueel geheugen is een techniek in moderne computers waarmee elke applicatie een samenhangend adresbereik lijkt te hebben, los van de fysieke ordening van het RAM of de schijf. Deze abstractielaag maakt het eenvoudiger om programma's te schrijven en tegelijk meerdere programma's veilig naast elkaar te laten draaien. De gebruikte techniek wordt doorgaans ondersteund door combinatie van hardware in de CPU en software van het besturingssysteem, en is een kernbegrip in de hedendaagse technologie.

Belangrijkste kenmerken

Het kernidee is dat een programma werkt met virtuele adressen; het systeem vertaalt die naar fysieke adressen in het werkgeheugen of naar locaties op opslagmedia. Deze vertaling maakt gebruik van tabellen (page tables) en vaak een kleine, snelle cache voor die vertaalslagen (TLB). Als een gewenst geheugenblok niet in het fysieke geheugen staat, ontstaat een page fault, waarna het besturingssysteem het benodigde blok van schijf laadt en eventueel andere pagina's terugschrijft — een proces dat meestal paging of swapping wordt genoemd.

Onderdelen en termen

  • Virtuele adressen: de adresruimte die een proces ziet.
  • Fysiek geheugen (RAM): echte chips die data tijdelijk bewaren; zie ook RAM.
  • Pagina's en frames: geheugen wordt in vaste blokken (pagina's) beheerd.
  • Page table: structuur die virtuele naar fysieke pagina's koppelt.
  • Translation Lookaside Buffer (TLB): caching van veelgebruikte vertalingen in de CPU.
  • Page fault: wanneer een gevraagde pagina niet in RAM staat.

Werking in de praktijk

Wanneer een programma geheugen aanspreekt, gebruikt de CPU het virtuele adres. De CPU en het besturingssysteem vertalen dat adres naar een fysieke locatie; vaak gebeurt dit deels door de hardware en deels door de kernel van het besturingssysteem. Als de pagina niet in hoofdgeheugen aanwezig is, pauzeert de uitvoering en wordt de pagina vanaf schijf gehaald. Dit mechanisme maakt het mogelijk dat systemen met beperkte RAM toch grote of meerdere programma's draaien door inactieve delen tijdelijk op schijf te houden.

Voordelen en nadelen

  • Voordelen:
    • Programma's krijgen elk een afgezonderde adresruimte, wat stabiliteit en veiligheid verbetert.
    • Efficiënter gebruik van RAM door alleen actief benodigde pagina's in geheugen te houden.
    • Faciliteert mechanieken als copy-on-write en geheugenallocatie zonder fragmentatieproblemen.
  • Nadelen:
    • Page faults en swapping kunnen de reactietijd sterk verhogen en leiden tot thrashing als er te veel gebruik is van schijf.
    • Voor realtime- en sommige ingebedde toepassingen is de onvoorspelbaarheid van toegangstijden problematisch.

Geschiedenis en varianten

De basisideeën van virtueel geheugen stammen uit de jaren 1950–1970, toen systemen als Multics en vroege mainframes technieken introduceerden om programma's meer geheugen te laten benutten dan fysiek aanwezig was. Sindsdien zijn verschillende varianten ontstaan: paginering (meest gebruikt), segmentatie (adressering op basis van logische segmenten) en gemengde systemen. Moderne processoren bieden hardware-ondersteuning voor snelle vertalingen en complexe privilegescheiding, wat de efficiëntie en veiligheid van virtueel geheugen verhoogt.

Toepassingen en uitzonderingen

Virtueel geheugen is standaard in desktop- en serveromgevingen en ondersteunt multitasking, geheugenisolatie en geheugenbeheer voor grote applicaties. In systemen met strikte tijdseisen of zeer beperkte hardware — bijvoorbeeld veel embedded systems — wordt het soms weggelaten omdat predictieve reactietijden belangrijk zijn. Ook in bepaalde gespecialiseerde omgevingen, zoals realtime besturing of sommige microcontrollers, gebruiken ontwerpers alternatieve technieken om determinisme te behouden.

Voor achtergrondinformatie over gerelateerde onderwerpen, zie algemene bronnen over computers, software, geheugenbeheer en geheugen. Begrippen als multiprocessing en het aantal processors beïnvloeden hoe virtueel geheugen presteert in een systeem; grotere systemen vereisen vaak verfijnde algoritmen voor paginavervanging en synchronisatie tussen meerdere kernen.