next up previous
Next: Nucleo Up: FAQ di Calcolatori Elettronici Previous: Architettura

Memoria Virtuale

Q 5.1   In che senso la memoria fisica è mappata in memoria virtuale? Perché il bit P deve essere sempre uguale a 1?

Probabilmente il modo in cui ciò avviene vi sfugge perchè siete troppo legati alle astrazioni (pagine che si spostano, etc.). Volendo restare nell'astratto, potete immaginare che, all'interno della memoria virtuale, ci sia una finestra (grande quanto la memoria fisica) che permette di accedere alla memoria fisica, indipendentemente da ciò che essa (memoria fisica) contiene. Questa finestra la collochiamo a partire dall'indirizzo (virtuale) 0 in modo che, per leggere (o scrivere) alla locazione di memoria fisica $x$, basta leggere (o scrivere) all'indirizzo virtuale $x$. Se la memoria fisica è, ad es., di $512\unit{M}$, questa finestra finisce all'indirizzo virtuale $2^{29}-1$. Questa finestra non viene gestita come la normale memoria virtuale: è solo un modo (normalmente riservato al codice di sistema) per accedere a tutta la memoria fisica. Possiamo pensare che la normale memoria virtuale inizi subito dopo la fine di questa finestra (quindi, nell'esempio di prima, dall'indirizzo $2^{29}$ fino all'indirizzo $2^{32}-1$).

Come viene creata questa finestra? qui conviene che abbandoniate le astrazioni e pensiate semplicemente a cosa sono (collettivamente) il direttorio più le tabelle delle pagine: una tabella che trasforma ogni indirizzo generato dal processore, prima che questo indirizzo arrivi alla memoria (quella fisica, l'unica che esiste davvero). Il bit P, che è associato ad ogni ``pagina'' di indirizzi virtuali (una pagina, in questo contesto, è solo un insieme contiguo di indirizzi virtuali) aggiunge un meccanismo particolare alla trasformazione: se, per un certo indirizzo, P=0, la MMU non effettua la trasformazione ma, invece, solleva una eccezione. Questa trasformazione può essere usata per vari scopi, la memoria virtuale è solo uno di questi (anche se è il più significativo). Nella memoria virtuale il bit P ci serve perchè non tutti gli indirizzi sono sempre validi (appunto, sono virtuali). La nostra finestra, invece, è una applicazione particolare di questa trasformazione: in pratica, una trasformazione ``identità'', che lascia gli indirizzi così come erano. Per questi indirizzi il bit P non ci serve. Lo poniamo sempre a 1 perchè non vogliamo che vengano generate eccezioni quando il processore accede agli indirizzi dentro questa finestra.

A questo punto, vi resta da capire che queste due trasformazioni ``convivono'' nella stessa tabella: nelle prime entrate ci sono le trasformazioni (identità) relative alla finestra, con bit P sempre = 1, nelle rimanenti le trasformazioni relative alla memoria virtuale, alcune con bit P=0, altre con bit P=1, a seconda di quali pagine della memoria virtuale sono ``presenti in ram''.

Notate che una pagina virtuale di indirizzo virtuale $V$, presente in RAM nella pagina di memoria fisica di indirizzo fisico $F$, sarà accessibile al processore da due indirizzi virtuali: $V$ (tramite la memoria virtuale) e $F$ (tramite la finestra).

Q 5.2   Nel libro si dice che, poiché quando una tabella delle pagine viene scelta per essere rimpiazzata, non contiene descrittori significativi, non viene salvata su disco. Però, da un'altra parte, si dice che i descrittori con P=0 possono essere usati per memorizzare la posizione su disco della pagina corrispondente. Ma, allora, se rimpiazzo una tabella delle pagine, perdo queste informazioni?

È chiaro che le due ottimizzazioni non possono essere usate contemporaneamente. Quindi: o non usiamo i descrittori con P=0 (prevedendo una struttura dati a parte per ricordare l'associazione tra pagine virtuali e indirizzi su disco), oppure, se vogliamo usarla, abbiamo due possibilità:
  1. il contenuto della tabella viene ricopiato in memoria di massa, come per le normali pagine
  2. le tabelle delle pagine non vengono mai rimpiazzate (come in Linux).

next up previous
Next: Nucleo Up: FAQ di Calcolatori Elettronici Previous: Architettura
2012-09-14