Memoria virtuale

Schema di funzionamento della memoria virtuale; nella CPU il programma lavora come se avesse a disposizione uno spazio di memoria pari a quella indirizzabile con i bit dei registri indirizzo (per esempio 4GB con registri di 32 bit); ma in realtà, se la memoria RAM è insufficiente, le zone di memoria attualmente in uso (suddivise in pagine di dimensione prefissata) sono allocate nella RAM mentre le pagine inattive sono salvate in un file gestito dal sistema operativo sul disco rigido.

In informatica, la memoria virtuale è un'architettura di sistema capace di simulare uno spazio di memoria centrale (memoria primaria) maggiore di quello fisicamente presente o disponibile, dando l'illusione all'utente di un enorme quantitativo di memoria[1].

Il sistema operativo usando una combinazione di hardware e software, mappa gli indirizzi di memoria usati da un programma, chiamati indirizzi virtuali, in indirizzi fisici. La memoria principale, dal punto di vista di un processo, appare come uno spazio di indirizzi (o una lista di segmenti) contiguo. Il sistema operativo gestisce lo spazio virtuale e l'assegnamento di memoria fisica a memoria virtuale. La traduzione di indirizzi è fatta da un hardware presente nella CPU, comunemente chiamato MMU, che traduce i vari indirizzi. Software presente all'interno del sistema operativo può estendere queste funzionalità per offrire uno spazio virtuale che eccede quello della memoria fisica, indirizzando così più memoria di quella fisicamente presente nel computer.

I vantaggi principali di quest'architettura sono una maggiore sicurezza dovuta all'isolamento della memoria, la possibilità di condividere alcune pagine di memoria fra diversi processi (in particolar modo quella delle librerie), e potere usare più memoria di quella disponibile con una tecnica chiamata swap.

Questo risultato si raggiunge utilizzando spazio di memoria secondaria su altri dispositivi o supporti di memorizzazione, di solito le unità a disco. La memoria centrale fisicamente presente diventa quindi la parte effettivamente utilizzata di quella virtuale, più grande: questo stratagemma è utile in virtù del principio di località e riuso dell'esecuzione dei programmi.

In ambiente POSIX, la memoria di massa utilizzata a questo scopo è comunemente chiamata "swap" o "spazio di swap" (verbo inglese che significa "scambiare"), mentre, in ambiente Windows, è chiamata "file di paging". Le operazioni di spostamento delle pagine dallo spazio di swap alla memoria fisica sono chiamate "swapping".

  1. ^ Virtual Memory – Paging (PDF), su users.soe.ucsc.edu.