30
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)

Memoria Virtuale - pomino.isti.cnr.itpomino.isti.cnr.it/~khast/wp-content/uploads/2015/05/TLC_Ninth.pdf · • La tabella delle pagine è salvata in memoria • 1’048’576 pagine

  • Upload
    hanhu

  • View
    212

  • Download
    0

Embed Size (px)

Citation preview

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

Terminologia• Un blocco di memoria virtuale si chiama pagina • Una cache miss si chiama page fault

Traduzione dell’indirizzo

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

Tabella delle pagine

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)

Spazio di swap

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

Esempio di TLB

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

FastMATH Read-Write

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

Miss

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)

Eccezioni e Interruzioni

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

TLB di Cortex-A8 ARM e Core i7 Intel

Cache di Cortex-A8 ARM e Core i7 Intel