La memoria virtuale è un’area dello spazio di archiviazione della memoria secondaria di un sistema informatico (come un disco rigido o un’unità a stato solido) che si comporta come se fosse una parte della RAM o della memoria primaria del sistema.
In genere, i dati necessari per eseguire le applicazioni sono memorizzati nella RAM, dove possono essere consultati rapidamente dalla CPU. Ma quando vengono eseguite applicazioni di grandi dimensioni, o quando molte applicazioni sono in esecuzione contemporaneamente, la RAM del sistema può diventare piena.
Per aggirare questo problema, alcuni dati memorizzati nella RAM che non sono attivamente utilizzati possono essere temporaneamente spostati nella memoria virtuale (che si trova fisicamente su un disco rigido o altro dispositivo di memorizzazione). Questo libera spazio nella RAM, che può quindi essere usato per ospitare dati a cui il sistema ha bisogno di accedere immediatamente.
Scambiando i dati tra la RAM e la memoria virtuale quando non sono necessari e dalla memoria virtuale alla RAM quando sono necessari, un sistema può continuare a lavorare senza problemi con molta meno RAM fisica di quanta ne richiederebbe altrimenti.
La memoria virtuale permette a un sistema di eseguire applicazioni più grandi o di eseguire più applicazioni allo stesso tempo senza esaurire la RAM. In particolare, il sistema può funzionare come se le sue risorse totali di RAM fossero uguali alla quantità di RAM fisica, più la quantità di RAM virtuale.
- Perché c’è bisogno di memoria virtuale?
- Memoria Virtuale vs Memoria Fisica
- Come funziona la memoria virtuale?
- Come aumentare la memoria virtuale in un sistema
- Tipi di memoria virtuale: Paging e Segmentazione
- Paging della memoria virtuale
- Segmentazione della memoria virtuale
- Svantaggi e svantaggi della memoria virtuale
- Svantaggi della memoria virtuale
- Disadvantages of Virtual Memory
Perché c’è bisogno di memoria virtuale?
La memoria virtuale è stata sviluppata quando la RAM fisica era molto costosa, e la RAM è ancora più costosa per gigabyte rispetto ai supporti di archiviazione come i dischi rigidi e le unità a stato solido. Per questo motivo è molto meno costoso usare una combinazione di RAM fisica e memoria virtuale piuttosto che dotare un sistema di computer di più RAM.
Siccome usare la memoria virtuale (o aumentare la memoria virtuale) non ha costi finanziari aggiuntivi (perché usa lo spazio di archiviazione esistente) offre un modo per un computer di usare più memoria di quella fisicamente disponibile sul sistema.
Un altro fattore chiave per l’uso della memoria virtuale è che tutti i sistemi di computer hanno un limite (dettato da hardware e software) sulla quantità di RAM fisica che può essere installata. L’uso della memoria virtuale permette al sistema di continuare a funzionare oltre i limiti della RAM fisica.
Memoria Virtuale vs Memoria Fisica
Siccome la RAM è più costosa della memoria virtuale, sembrerebbe – a parità di condizioni – che i computer dovrebbero essere equipaggiati con meno RAM e più memoria virtuale possibile.
Ma in effetti le caratteristiche della memoria virtuale sono diverse da quelle della memoria fisica. La differenza chiave tra la memoria virtuale e la memoria fisica è che la RAM è molto più veloce della memoria virtuale.
Quindi un sistema con 2 GB di RAM fisica e 2 GB di memoria virtuale non offrirà le stesse prestazioni di un sistema simile con 4 GB di RAM fisica. Per capire perché, è necessario capire come funziona la memoria virtuale.
Come funziona la memoria virtuale?
Quando un’applicazione (compreso il sistema operativo) è in esecuzione, memorizza la posizione dei thread del programma e altri dati ad un indirizzo virtuale, mentre i dati sono effettivamente memorizzati ad un indirizzo fisico nella RAM. Se più tardi quello spazio nella RAM è richiesto più urgentemente da un altro processo, allora i dati possono essere scambiati fuori dalla RAM e nella memoria virtuale.
La responsabilità di tenere traccia di tutti questi dati mentre vengono scambiati tra la memoria fisica e virtuale ricade sul gestore della memoria del computer. Il gestore della memoria mantiene una tabella che mappa gli indirizzi virtuali usati dal sistema operativo e dalle applicazioni agli indirizzi fisici in cui i dati sono effettivamente memorizzati. Quando i dati vengono scambiati tra la RAM e la memoria virtuale, la tabella viene aggiornata in modo che un dato indirizzo virtuale punti sempre alla posizione fisica corretta.
Un computer può solo eseguire thread e manipolare dati che sono memorizzati nella RAM piuttosto che nella memoria virtuale. E ci vuole una quantità non trascurabile di tempo per scambiare i dati che sono necessari nella RAM. Di conseguenza, ne consegue che l’uso della memoria virtuale comporta un impatto sulle prestazioni.
In un altro modo, un sistema con 4 GB di RAM offrirà generalmente prestazioni più alte di un sistema con 2 GB di RAM e 2 GB di memoria virtuale a causa dell’impatto sulle prestazioni causato dallo swapping, e per questa ragione si dice che la memoria virtuale è più lenta della RAM.
Un potenziale problema con la memoria virtuale è che se la quantità di RAM presente è troppo piccola rispetto alla quantità di memoria virtuale allora un sistema può finire per spendere una grande parte delle sue risorse della CPU scambiando dati avanti e indietro. Nel frattempo, le prestazioni del lavoro utile si bloccano quasi del tutto – un processo noto come thrashing.
Per prevenire il thrashing è solitamente necessario ridurre il numero di applicazioni in esecuzione simultanea, o semplicemente aumentare la quantità di RAM nel sistema.
I sistemi operativi, come la maggior parte delle versioni di Windows, generalmente raccomandano agli utenti di non aumentare la memoria virtuale oltre 1,5 volte la quantità di RAM fisica presente. Quindi un sistema con 4 GB di RAM non dovrebbe avere più di 6 GB di memoria virtuale.
Per ridurre al minimo l’impatto sulle prestazioni causato dallo swapping tra memoria fisica e virtuale, è meglio utilizzare il dispositivo di archiviazione più veloce collegato al sistema per ospitare la memoria virtuale, e localizzare l’area di archiviazione della memoria virtuale su una propria partizione.
La memoria virtuale può agire in concerto con la memoria principale di un computer per consentire operazioni più veloci e fluide.
Come aumentare la memoria virtuale in un sistema
La maggior parte dei sistemi operativi permette agli utenti di aumentare la memoria virtuale da una pagina di configurazione.
- In Windows, gli utenti possono anche permettere al sistema di gestire la quantità di memoria virtuale fornita dinamicamente.
- Similmente, nel Mac OS, gli utenti possono usare il pannello delle preferenze per assegnare la memoria virtuale.
Tipi di memoria virtuale: Paging e Segmentazione
La memoria virtuale può essere gestita in diversi modi dal sistema operativo di un sistema, e i due approcci più comuni sono il paging e la segmentazione.
Paging della memoria virtuale
In un sistema che usa il paging, la RAM è divisa in un numero di blocchi – di solito 4k – chiamati pagine. I processi vengono poi assegnati solo le pagine sufficienti a soddisfare le loro esigenze di memoria. Questo significa che ci sarà sempre una piccola quantità di memoria sprecata, tranne nel caso insolito in cui un processo richiede esattamente un numero intero di pagine.
Durante il normale corso delle operazioni, le pagine (cioè blocchi di memoria di 4K di dimensione) sono scambiate tra la RAM e un file di pagina, che rappresenta la memoria virtuale.
Segmentazione della memoria virtuale
La segmentazione è un approccio alternativo alla gestione della memoria, dove invece di pagine di una dimensione fissa, ai processi sono assegnati segmenti di lunghezza diversa per soddisfare esattamente le loro esigenze. Questo significa che, a differenza di un sistema a pagine, nessuna memoria viene sprecata in un segmento.
La segmentazione permette anche alle applicazioni di essere divise in spazi di indirizzo logicamente indipendenti, il che può renderle più facili da condividere e più sicure.
Ma un problema con la segmentazione è che, poiché ogni segmento ha una lunghezza diversa, può portare alla “frammentazione” della memoria. Questo significa che quando i segmenti vengono allocati e deallocati, piccoli pezzi di memoria possono essere lasciati sparsi in giro che sono troppo piccoli per essere utili.
Come questi piccoli pezzi si accumulano, sempre meno segmenti di dimensioni utili possono essere allocati. E se il sistema operativo inizia a usare questi piccoli segmenti, allora ce ne sono un numero enorme da tenere sotto controllo, e ogni processo avrà bisogno di usare molti segmenti diversi, il che è inefficiente e può ridurre le prestazioni.
Svantaggi e svantaggi della memoria virtuale
Anche se la RAM è ora relativamente poco costosa rispetto al suo costo quando la memoria virtuale fu sviluppata per la prima volta, è ancora estremamente utile ed è ancora impiegata in molti, forse la maggior parte, dei sistemi informatici. Il problema chiave con la memoria virtuale riguarda le prestazioni.
Svantaggi della memoria virtuale
- Consente l’esecuzione di più applicazioni allo stesso tempo.
- Consente l’esecuzione di applicazioni più grandi in sistemi che non hanno abbastanza RAM fisica per eseguirle.
- Fornisce un modo per aumentare la memoria che è meno costoso che comprare più RAM.
- Provides a way to increase memory in a system which has the maximum amount of RAM that its hardware and operating system can support.
Disadvantages of Virtual Memory
- Does not offer the same performance as RAM.
- Can negatively affect the overall performance of a system.
- Takes up storage space which could otherwise be used for long term data storage.