Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1
2
3
4
5
Vediamo come lavora la MMU: supponiamo che l’utente esegua la seguente istruzione:
1 MOV REG, 0
La MMU riceverà l’indirizzo virtuale 0 e calcolerà la pagina che contiene l’indirizzo. Nel nostro caso la pagina in
questione è la pagina 0 (indirizzi da 0 a 4095). Successivamente si collegherà al frame associato alla pagina, che
in questo caso è sempre il frame 0.
Infine calcolerà il nuovo indirizzo fisico: 0
1 MOV REG, 0
La MMU calcolerà la pagina virtuale che contiene l’indirizzo, che in questo caso è la pagina 4 (indirizzi da 16 380
a 20 475). Il frame associato alla pagina 4 è il frame 1 (indirizzi da 4095 a 8190). A questo punto la MMU
calcolerà l’offset nella pagina e lo addizionerà al frame .
L’indirizzo fisico corrispondente è il: 4115
1 MOVE REG, 4115
Implementazione della Paginazione
Per eseguire la traduzione degli indirizzi, la Memory Management Unit deve mappare le pagine sui frame
corrispondenti. Per eseguire questa operazione in modo efficiente la MMU utilizza uno strumento noto come
tabella delle pagine o page table.
Page Fault
Riprendiamo l’esempio fatto in precedenza, consideriamo il seguente schema di page e frame page. Come si vede
dall’immagine seguente, le pagine 1, 3, 5, 6 referenziano frame dello spazio degli indirizzi presenti sul disco, e
non ancora caricati in memoria. Al contrario le pagine 0, 2, 4, 7 sono collegate a frame presenti in memoria e sono
per questo motivo accessibili.
Come dovrebbe comportarsi il sistema, e in particolare la MMU in questi casi? L’indirizzo 4096 rappresenta il
primo indirizzo della page 1, che referenzia un frame che al momento è presente solo sul disco. Per questo motivo
il bit di presenza/assenza associato alla entry in questione nella tabella delle pagine è in questo caso impostato a 0.
La MMU leggerà questo valore è scatenerà un trap verso il sistema operativo, questo trap è chiamato “page fault”
o “errore di pagina”.
Il sistema operativo dovrebbe avere una tabella delle pagine simile alla seguente:
Second Chance
Per risolvere i problemi presentati nell’algoritmo precedente, si esegue un controllo incrociato sul tempo di
ingresso della pagina e sul suo bit “referenziato”. In questo modo si possono trovare le pagine più vecchie, che
non vengono referenziate da più tempo. Se il bit “referenziato” della pagina è impostato a ‘1’ allora quest’ultima è
stata usata di recente. In questi casi il bit viene azzerato e la pagina messa in coda. Successivamente si procede
con l’analisi della pagina successiva, fino a raggiungere la cima della lista. Se il bit è impostato a ‘0’ si utilizza la
pagina in esame come spazio di rimpiazzo in caso di fault.
Clock
Molto simile al precedente. Si implementa una lista circolare con una “lancetta” che indica sempre la pagina più
vecchia. In caso di fault si controlla il bit “referenziato” e si decide se sostituire o no la pagina.
Ottimale
Un algoritmo ottimale necessiterebbe di un sistema in grado di stabile se e quando una pagina sarà utilizzata
nuovamente in futuro. In questo modo si potrebbe procedere con la sostituzione delle pagine non più referenziate,
o referenziate più in la nel tempo.
La linea A corrisponde a una frequenza di errori troppo alta, mentre la linea B corrisponde a una frequenza di
errori molto bassa. Questa funzione aiuta a distribuire equamente la memoria tra più processi, se un processo si
trova spesso sopra la riga A ha probabilmente troppa poca memoria, al contrario se si trova spesso sotto la riga B
ha sicuramente troppa memoria a disposizione.
Memoria Secondaria
Nelle sezioni precedenti abbiamo condotto un’analisi abbastanza approfondita sul sistema del page fault,
descrivendo il funzionamento dei vari algoritmi che determinano il passaggio di una pagina dal disco alla
memoria, tuttavia non abbiamo detto niente sulla zona del disco adibita al contenimento delle pagine.
Il sistema più semplice per allocare sul disco lo spazio delle pagine è avere una partizione speciale destinata allo
swapping (chiamata area di swap). In alcune circostanze questa partizione può essere rappresentata da un disco a
se stante. Questa partizione è usata specialmente nei sistemi UNIX, ed è composta da uno speciale file system in
grado di accelerare le procedure di lettura delle singole pagine.
La partizione di swap è trattata come una lista contente le pagine del processo, e nel modello più semplice è di
dimensione uguale o superiore a quest’ultimo. Ogni processo possiede un particolare indirizzo che rappresenta
l’inizio della sua memoria di swapping, a esso sommerà l’offset della pagina per determinare il punto in cui
prelevare/salvare la pagina.
Sistemi a 32 bit:
Sistemi a 64 bit:
I sistemi a 64 bit possiedono unicamente una struttura nota come tabelle delle pagine invertite, le cui voci invece
che rappresentare pagine nella memoria virtuale rappresentano frame nella memoria fisica. Per fare un esempio,
un sistema a 64 bit con 1 GB di RAM e pagine/frame di 4 KB utilizzerebbe una tabella delle pagine invertite con
voci ( ).
L’indice dell’entry nella tabella delle pagine invertita rappresenta l’indirizzo del frame. Le voci nella tabelle delle
pagine contengono il numero della pagina virtuale e l’identificativo del processo a cui il frame è assegnato. Le
tabelle delle pagine invertite hanno l’indiscusso vantaggio di portare a un notevole risparmio di spazio a parità di
memoria, se confrontate con le tabelle delle pagine multi-livello, tuttavia esse hanno un grande svantaggio:
portano a una traduzione degli indirizzi molto più complessa.
Vantaggi
La tabella delle pagine invertite permette un sostanziale risparmio di spazio nei sistemi a 64 bit.
Svantaggi
La tabella delle pagine invertite presenta due svantaggi:
• Il tempo di ricerca nella tabella è notevolmente più lungo rispetto a quello della controparte a 32 bit, per
questo motivo è essenziale l’introduzione del TLB nei sistemi a 64 bit;
• È molto complesso condividere le pagine tra due processi.