Next: Nucleo
Up: FAQ di Calcolatori Elettronici
Previous: Architettura
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
, basta leggere (o scrivere) all'indirizzo
virtuale
. Se la memoria fisica è, ad es., di
, questa finestra
finisce all'indirizzo virtuale
.
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
fino all'indirizzo
).
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
, presente in RAM
nella pagina di memoria fisica di indirizzo fisico
, sarà accessibile al
processore da due indirizzi virtuali:
(tramite la memoria virtuale) e
(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à:
- il contenuto della tabella
viene ricopiato in memoria di massa, come per le normali
pagine
- le tabelle delle pagine non vengono mai
rimpiazzate (come in Linux).
Next: Nucleo
Up: FAQ di Calcolatori Elettronici
Previous: Architettura
2012-09-14