memoria virtuale -...
TRANSCRIPT
Memoria Virtuale• Le memorie cache forniscono un accesso veloce ai
blocchi di memoria usati più di recente • La memoria virtuale fornisce un accesso veloce ai dati
sulle memorie di massa usati più di recente. • Storicamente, la memoria virtuale serviva a consentire
una condivisione efficiente e sicura della memoria principale per più programmi, trasparente al programmatore (protezione)
0 232
RAM Frame Buffer Devices ROM
Spazio degli indirizzi fisici
0 232
Processo in esecuzione Sistema Operativo
Spazio degli indirizzi virtuali
0 232
Processo in background Sistema Operativo
Differenze progettuali• Un page fault ha una penalità di milioni di cicli di clock • Le pagine devono essere sufficientemente grandi
• Ammortizzare il lungo tempo di accesso • Tipicamente da 4 KB a 16 KB
• Tecniche full associative da preferire • Minore frequenza di page fault
• Il rimpiazzamento delle pagine è gestito via software • Tempo di accesso al disco dominante • Permette l’uso di algoritmi più intelligenti
• Write-through improponibile, bisogna usare il write-back
Tabella delle pagine• La ricerca esaustiva per schemi completamente
associativi è impraticabile • Ogni processo ha un “catalogo” in memoria principale
che indicizza la propria memoria fisica tramite il numero di pagina virtuale: viene chiamato tabella delle pagine (page table)
• La tabella delle pagine di un processo è memorizzata a un certo indirizzo fisico, determinato da un registro “speciale” del processore, il page table register (PTR)
• Ogni pagina virtuale può corrispondere a qualsiasi pagina fisica
Page fault• Quando si verifica un page fault, si genera un’eccezione.
1. Il SO prende il controllo del processore 2. Identifica la pagina mancante dalla memoria 3. Cerca “da qualche parte” la pagina mancante 4. Carica in memoria principale la pagina mancante,
eventualmente rimpiazzando una pagina esistente. • Dove stanno le pagine mancanti?
• Quando un processo viene caricato in memoria, il SO “riserva” su disco spazio sufficiente a memorizzare tutte le pagine di un processo (spazio di swap).
• Il SO memorizza l’indice delle pagine nello spazio di swap (page table o struttura dati analoga)
Dettagli • Spesso, oltre al valid bit, sono aggiunti altri bit associati alla pagine
• dirty bit • serve a sapere se una pagina è stata modificata. • grazie a questo bit è possibile sapere se la pagina deve essere
ricopiata sul livello di memoria inferiore (disco). • il bit è necessario in quanto usiamo una politica write-back
• reference bit • serve a sapere se, in un certo lasso di tempo, una certa pagina è
stata riferita. • bit azzerato periodicamente, settato ogni volta che una pagina è
riferita. • il reference bit è usato per implementare una politica di
rimpiazzo delle pagine di tipo LRU (Least Recently Used)
Problemi• Architettura a 32 bit,
con pagine di 4KB • 12 bit per offset
di pagina • 20 bit per
identificatore di pagina
Virtual AddressIdentificatore Offset
Tabella delle pagine
Riga
Pagina fisica
Indirizzo fisico
PTR
• La tabella delle pagine è salvata in memoria • 1’048’576 pagine diverse • Se una riga della tabella delle pagine è 4 byte, la tabella delle pagine
occupa 4 MB • Ogni processo ha la sua tabella delle pagine
• 256 processi occupano 1 GB di memoria solo per le tabelle delle pagine
Tabella delle Pagine Multi-LivelloIndice Livello 4
Tabella delle pagine
Riga Livello 4
PTR
Indice Livello 3 Indice Livello 2 Indice Livello 1 Offset
Tabella delle pagine
Riga Livello 3
Tabella delle pagine
Riga Livello 2
Tabella delle pagine
Riga Livello 1
Tabella delle pagine
Indirizzo fisico
• Il procedimento per determinare l’indirizzo fisico è detto “attraversamento dell’albero delle pagine” (tree page walking)
• Alcuni processori lo implementano hardware, altri hanno bisogno di aiuto dal SO • Un piccolo programma può aver bisogno di una sola riga ai livelli 4, 3 e 2, e di qualche riga a
livello 1 • 1 GB di memoria può essere indirizzato con una sola riga ai livelli 4, 3, 2 e 512 righe al livello 1
Cache di traduzione• Un accesso in memoria del programma costa come
minimo “doppio”: • un accesso alla tabella delle pagine in memoria • un accesso alla memoria fisica
• Località spaziale e temporale degli indirizzi • La traduzione degli indirizzi viene solitamente fatta in
hardware, da un componente denominato MMU (Memory Management Unit), tramite l’uso di una piccola memoria cache chiamata TLB (Translation Lookaside Buffer)
• dsd
TLB + Cache (FastMATH)• TLB completamente
associativo
• Pagine da 4 KB
• Cache diretta, acceduta con l’indirizzo fisico
• Dimensione del blocco della cache: 26 = 64 bytes
Modalità di esecuzione• Un processo in user mode:
• Non può modificare il PTR • Non può modificare le entry della TLB • Non può settare direttamente il bit che fissa la modalità di esecuzione
• Un processo in kernel mode: • Può fare tutto, come se fosse parte del SO • Esistono istruzioni speciali, eseguibili SOLO in kernel mode, per effettuare
le operazioni di cui sopra • Passaggio user → kernel tramite chiamate di sistema (syscall)
• Salva il PC corrente in EPC (Exception Program Counter) • L’istruzione ERET ripristina la modalità di esecuzione user e copia EPC in
PC • Le routine corrispondenti alle varie syscall sono prefissate, e fanno parte del
SO (l’utente non può crearsi da solo una sua syscall e invocarla)
Meccanismi di protezione• I processi utente non possono modificare la propria
tabella delle pagine • Il sistema operativo deve poter modificare la tabella delle
pagine • Due processi possono condividere informazioni tramite
l’intermediazione del sistema operativo
Tipologia di miss• Nelle varie gerarchie di memoria, i miss si possono verificare per cause diverse
• Modello delle tre C per classificare i miss • Ci riferiremo al livello cache, anche se il modello si applica anche agli altri livelli della
gerarchia di memoria • Tipi di miss
• Miss Certi (Compulsory) • miss di partenza a freddo, che si verifica quando il blocco deve essere portato
nella cache per la prima volta • Miss per Capacità
• la cache non è in grado di contenere tutti i blocchi necessari all’esecuzione del programma
• Miss per Conflitti• due blocchi sono in conflitto per una certa posizione • può verificarsi anche se la cache NON è piena • questo tipo di miss non si verifica se abbiamo una cache completamente
associativa
Memoria virtuale e miss• Per quanto riguarda la memoria virtuale, il SO viene
invocato per gestire due tipi di eccezioni • TLB miss (anche se la TLB miss può essere gestita in
hardware) • Page fault • prima della fine del ciclo di clock in cui si accede alla
memoria • In risposta ad un’eccezione/interruzione
• il processore salta alla routine di gestione del SO • effettua anche un passaggio di modalità di esecuzione
user mode → kernel mode
TLB Miss + Page Table Hit• la pagina è presente in memoria • l’eccezione può essere risolta tramite la page table • l’istruzione che ha provocato l’eccezione deve essere rieseguita
TLB Miss + Page Table Miss• la pagina non è presente in memoria, cioè l’ingresso
corrispondente della Tabella delle Pagine è NOT VALID • La pagina deve essere portata in memoria dal disco
• operazione di I/O dell’ordine di ms • è impensabile che la CPU rimanga in stallo, attendendo che il
page fault venga risolto • Context switch
• salvataggio dello stato (contesto) del programma (processo) in esecuzione
• Completamento page fault • processo bloccato diventa pronto, ed eventualmente riprende
l’esecuzione
Context Switch• Salvataggio dello stato (contesto) del programma
(processo) in esecuzione • Fanno ad esempio parte dello stato i registri generali, e
quelli speciali come il registro della Tabella delle Pagine • Il processo che ha provocato l’eccezione diventa bloccato
• Si ripristina lo stato di un altro processo pronto per essere eseguito
• Si riavvia il nuovo processo • Durante uno switch le eccezioni sono disabilitate
Eccezioni e Interruzioni• Un evento generato che distrugge la normale sequenza di istruzioni • Usato normalmente per richiamare l’attenzione della CPU su eventi I/O
asincroni • Nelle CPU pipelined interrompe il parallelismo di esecuzione delle istruzioni:
un cattivo uso delle eccezioni/interrupt può provocare cadute di performance anche notevoli.
• MIPS (distinzione tra interno ed esterno) • Exception: un evento generato all’interno della CPU che distrugge la
normale sequenza di istruzioni • Interrupt: un evento generato all’esterno della CPU che distrugge la
normale sequenza di istruzioni • INTEL (nessuna distinzione)
• Interrupt: un evento che distrugge la normale sequenza di istruzioni (interno o esterno)
Eccezione per Miss TLB• La gestione delle eccezioni è affidata al coprocessor 0
• Nei registri di questo coprocessore troviamo le informazioni che il SW necessita per gestire l’eccezione
• L’hardware salva l’indirizzo che ha causato la miss in un registro speciale, badVAddr, e solleva un’eccezione
• Il SO trasferisce il controllo all’indirizzo dell’handler per le miss TLB, e.g., 0x8000000 • L’handler consulta la Tabella delle Pagine, usando il Page Table Register e il numero di pagine
dell’indirizzo virtuale • Per velocizzare l’handler usa il registro speciale Context
• 12 bit più significativi: indirizzo tabella delle pagine • 18 bit successivi: indirizzo virtuale della pagina mancante • 2 bit meno significativi: posti a 0
Eccezione per Page Fault• La gestione delle miss TLB ignora se l’elemento della
tabella delle pagine sia valido • Riavvia subito l’esecuzione, velocizzando la situazione più
comune (usa un handler dedicato) • Se l’elemento inserito non è valido, viene generata una
seconda eccezione dovuta a page fault • Il SO trasferisce il controllo all’indirizzo dell’handler
generico per le eccezioni, e.g., 0x80000180 • Usando il registro speciale Cause il SO identifica la causa
dell’eccezione, cioè il page fault • A questo punto si ha il Context Switch