# Virtueel geheugen

Met virtueel geheugen wordt een mechanisme bedoeld waarmee een besturingssysteem een deel van de harde schijf gebruikt om tijdelijk niet gebruikte gegevens te bewaren om zo meer werkgeheugen (RAM) vrij te houden voor belangrijkere zaken. Dit wordt het wisselbestand (swapfile) of swap-ruimte genoemd.
Tijdens de uitvoering bewaart een programma gegevens in zijn geheugenruimte. Op elk moment heeft het programma meestal slechts een klein deel van de bewaarde gegevens nodig. Daarom probeert het besturingssysteem alleen die blokken in het RAM te houden die het meest gebruikt worden. De overige geheugenblokken worden dan weggeschreven naar de swap. Als een programma een geheugenblok nodig heeft wat op de swap staat, moet dat blok eerst van de schijf gelezen worden voordat het programma verder kan gaan. Om voor dit blok ruimte te maken in het RAM, moet het besturingssysteem bovendien een ander blok naar de swap verplaatsen. Het benaderen van een uitgeswapt geheugenblok duurt dus langer dan het benaderen van een blok dat reeds in het RAM aanwezig is.
Het voordeel van virtueel geheugen is dat programma's kunnen beschikken over meer geheugenruimte dan het aanwezige RAM-geheugen. Een nadeel is dat virtueel geheugen trager is, omdat een harde schijf veel trager is dan RAM (zie ook het artikel Geheugenhiërarchie). De snelheid van virtueel geheugen is tevens afhankelijk van de regelmaat waarmee een programma gegevens nodig heeft die op dat moment uitgeswapt zijn.
Op Unix gebaseerde besturingssystemen, zoals Linux, bewaren de geswapte gegevens op een aparte partitie (de swap-partitie) of in een bestand. Microsoft Windows gebruikt altijd een speciaal bestand als swap-ruimte. Omdat het gebruik van virtueel geheugen een computersysteem sterk vertraagt of zelfs kan laten vastlopen, overwegen sommige systeemontwikkelaars aan het begin van 2017, om swap-partities geheel uit hun besturingssysteem te verwijderen.

## Werkwijze

De virtuele adresruimte van een moderne microprocessor bedraagt 64 GiB of meer. De hoeveelheid geheugen in de computer is in werkelijkheid veel minder, bijvoorbeeld 1 GiB.
De volledige adresruimte is verdeeld in blokken, pagina's, bijvoorbeeld met een grootte van 4 KiB. De processor beschikt over een tabel waarin per virtuele pagina een aantal gegevens worden bijgehouden, onder andere de bijbehorende fysieke pagina.
Stel dat een toepassingsprogramma adres E4987654 adresseert. Dat is adres 654 in virtuele pagina E4987. De adressering verloopt nu via de tabel, waarin staat dat virtuele pagina E4987 zich bevindt op ware pagina 00382. De microprocessor adresseert dus in werkelijkheid 00382654.
Deze vertaalslag verloopt binnen de microprocessor, als deel van de uitvoering van een instructie. De vertaalslag kost daardoor nauwelijks extra tijd.
Het is mogelijk dat in de tabel staat dat virtuele pagina E4987 zich niet in het geheugen bevindt. Er treedt nu een interrupt op. De interrupt wordt door het besturingssysteem opgevangen. Het besturingssysteem zorgt ervoor dat de gewenste pagina uit de harde schijf in het geheugen wordt geladen, past de tabel aan, en hervat het toepassingsprogramma. Afgezien van de vertraging merkt het toepassingsprogramma niet dat er iets gebeurd is.
Om een pagina in het geheugen te kunnen laden, is het natuurlijk nodig dat er geheugenruimte vrij is. Het besturingssysteem zal dan ook eerst een andere pagina vrijmaken. Is er naar deze pagina geschreven, dan moet hij eerst op de harde schijf worden gezet.