Magazine

Virtualizzazione della memoria, come funziona

20/10/2020
Virtualizzazione della memoria, come funziona
PartnerPMIProfessionisti
Per virtualizzazione si intende l’astrazione dalle risorse fisiche dell’IT come l’hardware, il software, i componenti di rete e la memoria.
La memoria RAM, cioè quella fisicamente disponibile su un computer, spesso non è in grado di soddisfare le richieste di memoria da parte dei processi attivi e quando succede il pc si appoggia alla memoria virtuale.
In sintesi si tratta di un meccanismo del sistema operativo che entra in azione quando la memoria fisica non è più sufficiente, dando l’illusione ai processi di avere spazio illimitato. Dunque grazie a questa tecnica è possibile l’esecuzione di programmi che richiedono più memoria RAM di quanta non ne sia disponibile.

Differenze tra memoria fisica e memoria virtuale

La memoria fisica e quella virtuale sono due forme di memoria usate per la registrazione dei dati in un computer. La memoria fisica si riferisce alla RAM e ai dischi rigidi nel computer che vengono utilizzati per memorizzare i dati, mentre la memoria virtuale è uno spazio creato dal sistema operativo quando il computer non ha abbastanza memoria fisica per eseguire un programma.
Altre differenze sono:
  • velocità, la memoria RAM infatti è più veloce di quella virtuale;
  • dimensione, se la memoria fisica è limitata alla dimensione del chip RAM, quella virtuale è limitata dalla dimensione del disco rigido.

Funzionamento della memoria virtuale

Di solito la memoria realmente installata nel sistema è frammentata in piccoli blocchi detti pagine in cui vengono ripartite le informazioni da processare.
In pratica la tecnica della paginazione consiste nel creare un’area di memoria virtuale sul disco rigido e una mappa di memoria che produce una correlazione tra gli indirizzi della memoria fisica e quelli della memoria virtuale su disco.
Questo sistema è gestito grazie alla Memory Management Unit (MMU), un’unità di calcolo presente nel processore del computer. La MMU consente di intervallare i processi in esecuzione così da poter gestire carichi di lavoro più grandi rispetto a quelli che possono essere supportati dalla memoria RAM installata sulla macchina.

Quando la memoria è quasi esaurita, le pagine di memoria riguardanti i processi non in esecuzione sono collocate su una sezione del disco rigido detta memoria di swap, in questo modo viene creato lo spazio per le pagine contenenti dati che verranno processati di lì a poco.
Se per l’esecuzione di un programma sono necessarie le pagine situate sul disco rigido, sarà compito della MMU cercarle e caricarle sulla memoria di lavoro.

In sintesi è il continuo interscambio di pagine tra la memoria RAM e la memoria di swap che consente di potenziare sensibilmente la capacità di lavoro di una macchina.
Ma se da un lato si ha a disposizione molta più memoria di quella fisicamente presente, dall’altro si assiste a un rallentamento della velocità di elaborazione.
Se ad esempio c’è un numero troppo elevato di applicativi che sta girando sul sistema e lo scambio tra la memoria RAM e memoria di swap diventa eccessivamente intenso, il computer potrebbe andare incontro a rallentamenti anche significativi che in alcuni casi potrebbero anche portare al blocco totale del sistema.

Come eseguire l’indirizzamento alla memoria virtuale

Per ampliare lo spazio disponibile in RAM pur non avendolo fisicamente disponibile, tieni presente che puoi utilizzare gli indirizzi virtuali sia per allocare pagine sul disco fisso che sulla memoria RAM. In particolare ogni processo segue uno schema generale di indirizzamento secondo il quale è data una tabella dei segmenti che definisce questi all’origine per lunghezza e punto di inizio, e una tabella delle pagine che riporta appunto le coordinate delle pagine, da cui si verifica che ogni tabella delle pagine viene indirizzata dal corrispondente segmento.

È infine utile ricordare che lo swap descritto in precedenza è una pratica “onerosa” perché pesa sulle risorse computazionali, dunque sarà opportuno prevedere delle adeguate politiche di swap per aumentare l’efficienza dell’intero processo.

Puoi muoverti con le politiche di caricamento o fetch policy, per definire il modo in cui le pagine vengono caricate nella memoria RAM. In questo senso puoi optare per un caricamento on demand oppure per un pre-caricamento, sempre allo scopo di evitare i page fault, che sono errori dovuti a risorse mancanti.

Un altro modo per amministrare lo swap è la politica di rimpiazzo o replacement policy, in base alla quale puoi definire quale pagina sostituire in caso occorra farlo. Una volta rimpiazzate, le pagine vengono poi immesse in un page buffer che funziona come un serbatoio consultato dal gestore della memoria dopo ogni page fault allo scopo di accertare o meno la presenza della stessa pagina.

In sostanza (e per concludere) la scelta dell’algoritmo viene fatta in funzione dell’ottenimento del numero minore possibile di page fault. Lo scopo di tutto è dunque ottenere il massimo delle prestazioni da un computer o in particolare da un server, prevenendo o comunque limitando gli errori, i crash oppure i rallentamenti del sistema.