Salta al contenuto
Note per Studenti Memoria virtuale

Memoria virtuale

In questa pagina 6
In questa pagina 3

Ogni processo vede uno spazio di indirizzamento virtuale proprio, grande quanto permettono gli indirizzi (32 bit → 4 GB), anche se la memoria fisica è più piccola o è condivisa con altri processi. L'hardware (MMU, Memory Management Unit) traduce ogni indirizzo virtuale in un indirizzo fisico; le parti non presenti in memoria stanno sul disco.

È il livello della gerarchia di memoriaCaratteristiche delle memorie (posizione, capacità, unità di trasferimento, metodo di accesso, prestazioni, volatilità); compromesso costo-capacità-velocità e gerarchia a livelli; località temporale e spaziale con esempi; hit, miss e tempo medio di accesso con calcolo svolto.Gerarchia di memoria e principio di località → tra memoria principale e disco, con la stessa logica della Memoria cacheBlocchi, linee ed etichette; scomposizione dell'indirizzo; associazione diretta, completamente associativa e associativa a insiemi con calcolo dei campi; politiche di rimpiazzo (LRU, FIFO, casuale); politiche di scrittura (write-through, write-back con bit sporco, write-allocate); dimensione del blocco; cache multilivello e separate; come ridurre i miss; quesiti sui campi dell'indirizzo.Memoria cache → ma termini diversi: pagina (blocco), page fault (miss).

Pagine e frame

  • Lo spazio virtuale è diviso in pagine di dimensione fissa (tipicamente 4 KB); la memoria fisica in frame (cornici) della stessa dimensione.
  • Indirizzo virtuale = | numero di pagina virtuale | offset |; l'offset ha log⁡2(dimensione pagina)\log_2(\text{dimensione pagina}) bit e non cambia nella traduzione.

Esempio: indirizzi virtuali di 32 bit, fisici di 30 bit (1 GB), pagine di 4 KB.

  • offset: log⁡24096=12\log_2 4096 = 12 bit;
  • numero di pagina virtuale: 32−12=2032 - 12 = 20 bit → 2202^{20} pagine;
  • numero di frame: 30−12=1830 - 12 = 18 bit → 2182^{18} frame.

Tabella delle pagine

Per ogni processo una tabella delle pagine in memoria, indicizzata dal numero di pagina virtuale. Ogni voce contiene: bit di validità (pagina in memoria o no), numero di frame, bit di protezione (lettura, scrittura, esecuzione, utente/supervisore), bit di riferimento e bit sporco.

Traduzione di 0x00403A7C con pagine di 4 KB: pagina virtuale 0x00403, offset 0xA7C. Se la voce 0x00403 dice frame 0x1F2, l'indirizzo fisico è 0x1F2A7C.

Dimensione della tabella dell'esempio: 2202^{20} voci da 4 byte = 4 MB per processo. Per questo si usano tabelle a più livelli (si allocano solo le parti usate).

Page fault

Se la voce non è valida, la MMU solleva un'eccezione e il sistema operativo:

  1. sceglie un frame libero, oppure una pagina da sostituire (approssimazioni di LRU con il bit di riferimento); se la pagina sostituita è sporca la scrive sul disco;
  2. legge la pagina dal disco (milioni di cicli: nel frattempo esegue un altro processo);
  3. aggiorna la tabella e fa ripartire l'istruzione che aveva causato il fault.

Poiché un fault costa milioni di cicli: pagine grandi, posizionamento completamente associativo (qualsiasi frame), scrittura sempre write-back, gestione via software.

TLB

Ogni accesso richiederebbe un accesso in più alla tabella in memoria. Il TLB (Translation Lookaside Buffer) è una piccola cache associativa delle traduzioni recenti (decine–centinaia di voci). TLB hit: traduzione in un ciclo; TLB miss: si legge la tabella e si aggiorna il TLB.

Esempio: accesso alla memoria 100 ns, TLB 1 ns, hit rate del TLB 98% (senza page fault):

T=0,98⋅(1+100)+0,02⋅(1+100+100)=98,98+4,02=103 nsT = 0{,}98 \cdot (1 + 100) + 0{,}02 \cdot (1 + 100 + 100) = 98{,}98 + 4{,}02 = 103 \text{ ns}

contro 200 ns senza TLB.

Protezione e condivisione

Errori tipici

  • Tradurre anche l'offset: cambia solo il numero di pagina.
  • Confondere la dimensione della tabella delle pagine (dipende dallo spazio virtuale) con la memoria fisica.

Versione ripasso

La MMU traduce gli indirizzi virtuali di un processo in fisici; il resto sta su disco. Come la Memoria cacheBlocchi, linee ed etichette; scomposizione dell'indirizzo; associazione diretta, completamente associativa e associativa a insiemi con calcolo dei campi; politiche di rimpiazzo (LRU, FIFO, casuale); politiche di scrittura (write-through, write-back con bit sporco, write-allocate); dimensione del blocco; cache multilivello e separate; come ridurre i miss; quesiti sui campi dell'indirizzo.Memoria cache → (gerarchiaCaratteristiche delle memorie (posizione, capacità, unità di trasferimento, metodo di accesso, prestazioni, volatilità); compromesso costo-capacità-velocità e gerarchia a livelli; località temporale e spaziale con esempi; hit, miss e tempo medio di accesso con calcolo svolto.Gerarchia di memoria e principio di località →): pagina = blocco, page fault = miss.

Pagine e tabella

  • Pagine e frame da 4 KB; indirizzo = numero di pagina, offset (log⁡2\log_2 pagina, invariato). Virtuali 32 bit, fisici 30 bit: offset 12, pagina 20 bit, frame 18 bit.
  • Tabella delle pagine (per processo): validità, frame, protezione, riferimento, sporco. 0x00403A7C: pagina 0x00403, offset 0xA7C; frame 0x1F2 ⇒\Rightarrow 0x1F2A7C. 2202^{20} voci da 4 B == 4 MB: tabelle a più livelli.

Page fault

Voce non valida: il sistema operativo sceglie un frame libero o una pagina da sostituire (approssimazione di LRU; se sporca, su disco), legge la pagina (milioni di cicli, intanto un altro processo), aggiorna la tabella e rilancia l'istruzione. Perciò: pagine grandi, posizionamento associativo, write-back.

TLB

Cache associativa delle traduzioni recenti (TLBTranslation Lookaside Buffer). Memoria 100 ns, TLB 1 ns, hit 98%: 0,98⋅101+0,02⋅201=1030{,}98 \cdot 101 + 0{,}02 \cdot 201 = 103 ns, contro 200 ns senza.

Protezione per pagina (segmentation fault), pagine condivise (Dal programma C all'eseguibile ARMCatena di traduzione compilatore, assemblatore, linker e loader; file oggetto, tabella dei simboli e rilocazione; collegamento statico e dinamico; organizzazione della memoria di un processo; chiamare funzioni assembly da C e viceversa, con esempio.Dal programma C all'eseguibile ARM →), tabelle modificabili solo in modo privilegiato (Struttura interna della CPU e registriComponenti interni della CPU (ALU, unità di controllo, banco dei registri, bus interno); registri visibili all'utente e registri di controllo e stato; flag e parola di stato (PSW) con bit di supervisore; quanti registri conviene avere; segmentazione della memoria.Struttura interna della CPU e registri →).

Errori tipici: tradurre anche l'offset; la tabella dipende dallo spazio virtuale.

Lezioni in cui compare

Teoria collegata