Memoria Virtuale (WIP) AXO Matteo Guarnerio
1
Memoria Virtuale
Riferimento alla slide: AXO – 03 – Memoria Virtuale.pdf
Viene gestita dalla MMU (Memory Management System), un chip implementato nella CPU.
Il parametro R, identifica il numero massimo di pagine che è possibile
memorizzare per un singolo processo nella MMU, quindi il numero massimo di righe allocate nella tabella MMU per ogni processo.
Ogni processo ha una tabella virtuale delle locazioni in memoria, la tabella MMU:
PID –
Identificativo del processo al quale
appartiene la zona di memoria allocata
NPV – Indirizzo di memoria virtuale (quindi partirà da 0x0)
NPF – Indirizzo di memoria fisico (RAM o disco)
Bit valido – Utilizzato per il controllo se la pagina risiede in RAM, valore 1, o se è mancante e quindi risiedente su disco, valore zero (Interrupt Page Fault) Per identificare una chiave di questa tabella di utilizzano insieme i campi PID e NPV.
Lo spiazzamento della memoria virtuale sarà dato da: NPF – NPV.
L’interruzione Page Fault, si verifica ogni qualvolta una pagina non sia caricata in RAM, successivamente viene eseguita l’operazione per caricarla in memoria.
La vista RAM si può schematizzare in una tabella:
Bit Accesso – Impostato a 1 quando si accede alla pagina fisica
Bit Modifica – Impostato a 1 quando si accede alla scrittura della pagina fisica
NPF – Indirizzo fisico
Contenuto – Dati memorizzati
Memoria Virtuale (WIP) AXO Matteo Guarnerio
2
Paginazione
Consiste nel dividere la memoria in blocchi di dimensione minore, detti pagine, da utilizzare come unità per caricare i dati.
Ad esempio:
Memoria virtuale (logica) di dimensione 4GB.
Memoria fisica (PHY) di dimensione 512MB.
Dimensione delle pagine 4KB.
Indirizzo virtuale
NPV – Numero di pagine virtuali Spiazzamento – Indica la dimensione della pagina
20 bit 12 bit
32 bit
2!""#$%$ = 2!"= 4096 !"#$ = 4 !"
#!"#$%& = 2!"# = 2!" ≈ 1 !"#$%&'"
Per tradurre le pagine virtuali in pagine fisiche il SO utilizza una Virtual Page Table.
Spazio memoria fisico, determinato dalla dimensione fisica della RAM.
NPF – Numero di pagine fisiche Spiazzamento – Indica la dimensione della pagina, viene impostata uguale a quella della memoria virtuale
17 bit 12 bit
29 bit
2!""#$%$ = 2!"= 4096 !"#$ = 4 !"
#!"#$%& = 2!"# = 2!" = 128 !"
I problemi legati alla progettazione della memoria virtuale sono:
• Strategia di caricamento delle pagine: Demand Paging / Working Set
• Politica di sostituzione: Nel caso la memoria centrale non abbia pagine disponibili bisognerà scegliere quali pagine sostituire per far posto alla nuova pagina.
• Dimensione delle pagine: è strettamente correlata alla velocità di trasferimento delle pagine tra disco rigido e RAM e tra RAM e MMU.
Demand Paging: Le pagine vengono caricate su richiesta, quindi in seguito ad un interrupt di Page Fault.
Working Set: Vengono caricate solo le pagine che in ogni istante delle ultime k richieste a memoria sono state utilizzate. Quindi con k molto grande, l’insieme di lavoro di un programma varia molto lentamente.
Il numero di pagine residenti in MMU per un processo si può ottenere da una stima dell’insieme di lavoro.
Memoria Virtuale (WIP) AXO Matteo Guarnerio
3
Se il parametro R<k, il Working Set non risiederà tutto in memoria MMU, e quindi si verificheranno spesso Page Fault, con conseguente perdita di tempo nel caricare le pagine in memoria MMU.
Politica di sostituzione: La distribuzione degli accessi a memoria e nello spazio non è omogenea, ma presenta la caratteristica di località.
• Località temporale: un programma tende ad accedere agli stessi indirizzi di memoria cui ha già acceduto di recente (cicli di istruzioni, solitamente quelli più interni).
• Località spaziale: un programma accede con maggior probabilità agli indirizzi vicini a quelli a cui ha già acceduto in passato (strutture dati lineari, media file).
Tra le politiche di sostituzione troviamo:
• Casuale: viene estratta una pagina casuale.
• Algoritmo LRU (Last Recently Used): il SO cerca di determinare la pagina meno utile in un futuro prossimo, ovvero quella utilizzata meno di recente (principio di località), quindi con bassa probabilità di appartenere all’insieme di lavoro corrente.
Si basa sul Bit Accesso, che viene posto a 1 quando la pagina viene acceduta e periodicamente viene posto a 0 dal SO. Quando il bit è a 0, viene incrementato un contatore.
Verrà cancellata la pagina con Bit Accesso a 0 e contatore più elevato.
• FIFO (First In First Out): viene sostituita sempre la pagina caricata meno di recente, indipendentemente da quando si sia fatto riferimento a tale pagina.
• LIFO (Last In First Out): viene sostituita sempre la pagina caricata più di recente, indipendentemente da quando si sia fatto riferimento a tale pagina.
Quando ci sono più possibilità di scelta tra le pagine da espellere, andrebbe scelta la pagina non modificata, cosicché non bisogna riscriverla su disco. Per fare questo si utilizza il Bit Modifica, che se è impostato a 0 significa che la pagina non è stata modificata.
Memoria Virtuale (WIP) AXO Matteo Guarnerio
4
Segmentazione
I segmenti sono spazi di memoria virtuali indipendenti.
Il processo viene diviso in tre segmenti: codice, dati e pila.
Queste tre pagine sono messe in corrispondenza con la memoria fisica.
I vantaggi di utilizzare i segmenti sono:
• Possibilità di ridimensionarli dinamicamente con il programma in esecuzione.
• Possibilità di condividere aree di memoria “logiche” tra più processi.
• Possibilità di assegnare privilegi e diritti d’accesso ad ogni segmento.
La struttura di un segmento è composta da
N. Pagina Virtuale nel Segmento Spiazzamento Pagina
Per tradurre l’indirizzo virtuale in indirizzo fisico sono necessarie:
1. Una tabella dei segmenti del processo:
Composta da una riga per ogni segmento contenente la pagina virtuale d’inizio del segmento stesso.
2. La tabella delle pagine complessiva per ogni processo:
Composta da una riga per ogni pagina dello spazio di indirizzamento virtuale del processo. Ha la stessa struttura della tabella utilizzata per la paginazione.
NOTA: Quando un segmento viene condiviso da più processi, nella tabella della MMU dovrò aggiungere un record per ogni processo che lo utilizza.