La memoria virtuale
In precedenza abbiamo visto come le cache forniscano un accesso veloce alle porzioni dei dati e del codice di un programma utilizzate più di recente. Allo stesso modo introduciamo la tecnica della memoria virtuale, con la quale utilizziamo la memoria principale come una cache per la memoria di massa.
Naturalmente, affinché diverse virtual machine possano condividere la stessa memoria, dobbiamo essere in grado di proteggerle una dall’altra, assicurando che ogni programma acceda in lettura ed in scrittura solo nelle porzioni di memoria principale che gli sono state assegnate. Non possiamo sapere però quali macchine virtuali condivideranno la stessa memoria quando le compiliamo, poiché esse cambiano dinamicamente durante l’esecuzione. A causa di questa interazione dinamica sarebbe opportuno compilare ogni programma nel rispettivo spazio di indirizzamento privato, nel quale viene poi fatta la traduzione da indirizzo virtuale ad indirizzo fisico che garantisce quella protezione di cui si parlava poco prima.
Sebbene cache e memoria virtuale condividano le stesse “idee”, a causa delle diverse origini storiche si è giunti all’utilizzo di una diversa terminologia. Ad esempio un blocco della cache nella memoria virtuale viene detto pagina e le miss nella cache sono dei page fault (“mancanza di pagina”).
Quando si utilizza la memoria virtuale, il processore genera degli indirizzi virtuali che vengono poi tradotti da una combinazione di hardware e software in un indirizzo fisico, con il quale poi accedere ad una specifica locazione nella memoria principale. Questo processo viene chiamato traduzione degli indirizzi o mappatura degli indirizzi.
Caricamento e rilocazione
La memoria virtuale semplifica anche la procedura di caricamento di un programma prima della sua esecuzione, fornendo un meccanismo di rilocazione. Questa mappa gli indirizzi virtuali nei corrispettivi indirizzi fisici prima ancora che questi vengano effettivamente utilizzati per accedere alla memoria principale.
Struttura degli indirizzi
In una memoria virtuale un indirizzo viene suddiviso in due parti:
- Il numero della pagina; che verrà tradotto nel corrispettivo numero di pagina fisica
- L’offset della pagina; la dimensione della pagina che durante la procedura di traduzione non viene cambiato
Non è necessario che il numero di pagine indirizzabili attraverso l'indirizzo virtuale corrisponda al numero di quelle indirizzabili attraverso l'indirizzo fisico: avere un numero di pagine virtuali maggiore di quelle fisiche è alla base della concezione che la memoria virtuale deve risultare illimitata all'utente o più in particolare al programmatore.
Nei sistemi di memoria virtuale molte scelte di progettazioni sono dovute dall’elevato costo di un miss (page fault).
-
Architettura degli elaboratori - Appunti
-
architettura degli elaboratori
-
Esercitazioni Architettura degli Elaboratori
-
Architettura degli elaboratori