Esercizio - Traduzione degli indirizzi con la tabella delle pagine (eserciziario, esercizi 34, 37, 59, 62 e 86)
In questa pagina 6
Testo (eserciziario del corso di Sistemi Operativi, Ing. Informatica UniPD).
Esercizio 37 (identico all'esercizio 59). Memoria paginata con memoria virtuale; frame da 1 KB; l'indirizzo fisico e quello logico sono di 32 bit; ogni cella di memoria è di 32 bit.
- Quanti bit servono per lo scostamento in una pagina?
- Qual è la quantità massima di memoria indirizzabile?
- Con la tabella delle pagine seguente (bit di validità 1 se la pagina è in memoria), cosa succede agli indirizzi logici (a)
0…0 0111 1101 0101, (b)0…0 0100 0001 0111, (c)0…0 1011 1101 1011? Dare gli indirizzi fisici in decimale.
pagina validità frame 0 1 739 1 1 127 2 0 3 1 91 4 0 5 1 470 6 1 2 7 1 106 8 1 495 9 0 Esercizio 62. Memoria virtuale con paginazione su richiesta: pagine da 512 parole, 16 pagine (0-15), memoria fisica da 4 frame che contiene le pagine 4, 9, 5, 1 nei frame 0, 1, 2, 3. (a) Contenuto della tabella delle pagine. (b) Indirizzi fisici corrispondenti ai logici 1628, 851, 2700, 2432. (c) Cosa succede con 1330?
Esercizio 86. Spazio logico di 8 pagine da 1024 parole, mappato su 32 frame. Da quanti bit è l'indirizzo logico? E il fisico?
Esercizio 34. Processo con 7 pagine logiche da 1 K; tabella delle pagine e TLB (4 posizioni) come sotto. Cosa succede, e come cambiano TLB e tabella, se il processo scrive alle locazioni 4000 e 5130?
pag. logica presente riferita modificata pag. fisica 0 1 1 0 512 1 0 0 0 0 2 1 0 0 102 3 0 0 0 0 4 1 0 0 428 5 1 1 0 123 6 1 1 0 812 posizione TLB valida modificata pag. virtuale pag. fisica 0 1 0 5 123 1 1 1 6 812 2 0 0 0 0 3 1 0 0 512
Teoria: Memoria centrale - allocazione contigua, paginazione e segmentazioneUn programma deve stare in memoria centrale per girare; la MMU traduce a ogni accesso l'indirizzo logico (virtuale) in indirizzo fisico, sommando un registro di rilocazione e controllando il limite; con l'allocazione contigua (partizioni fisse o variabili, first/best/worst fit) si hanno frammentazione interna ed esterna e serve la compattazione; la paginazione divide memoria logica in pagine e memoria fisica in frame della stessa dimensione (potenza di 2), elimina la frammentazione esterna, traduce (p, d) con la tabella delle pagine (PTBR, PTLR) e riduce il costo dei due accessi con il TLB (EAT = h * t + (1 - h) * 2t); le tabelle grandi si dividono in gerarchiche, hash o invertite; lo swapping sposta intere pagine o processi su disco; la segmentazione usa blocchi di lunghezza variabile con coppia (base, limite), eventualmente paginati; Intel IA-32 usa segmentazione con paginazione a due livelli (10+10+12 bit) e IA-64 quattro livelli su 48 bit.Memoria centrale - allocazione contigua, paginazione e segmentazione →, Memoria virtuale - paginazione su richiesta e sostituzione delle pagineLa memoria virtuale separa la memoria logica da quella fisica: basta che alcune pagine siano in RAM; con la paginazione su richiesta (demand paging) una pagina si carica solo al primo riferimento, e un riferimento a una pagina non residente (bit di validità = i) genera un page fault gestito dal sistema operativo in sei passi; EAT = (1 - p) * accesso + p * servizio del fault, con p minuscolo; copy-on-write rende economica la fork; se non ci sono frame liberi si sceglie una vittima con FIFO (anomalia di Belady), OPT (ottimo, irrealizzabile), LRU (algoritmo a stack), second chance (bit di riferimento, orologio) o la versione con bit di modifica; i frame si assegnano in modo uguale o proporzionale, con sostituzione globale o locale; se un processo non ha abbastanza frame va in thrashing; il modello del working set e la frequenza dei page fault lo evitano; considerazioni su prepaging, dimensione della pagina, TLB reach e struttura dei programmi; memoria del kernel con buddy system e slab.Memoria virtuale - paginazione su richiesta e sostituzione delle pagine →.
Il metodo
Dati la dimensione della pagina e un indirizzo logico :
Se la dimensione non è una potenza di 2 (512 è , 1024 è : lo sono), si usa la divisione normale. Prima si guarda il bit di validità: se è 0 c'è un page fault (la pagina esiste ma non è in memoria) oppure, se la pagina non esiste nello spazio del processo, un indirizzo non valido (trap, il processo è abortito). Per il TLB si controlla prima la memoria associativa (vedi Memoria centrale - allocazione contigua, paginazione e segmentazioneUn programma deve stare in memoria centrale per girare; la MMU traduce a ogni accesso l'indirizzo logico (virtuale) in indirizzo fisico, sommando un registro di rilocazione e controllando il limite; con l'allocazione contigua (partizioni fisse o variabili, first/best/worst fit) si hanno frammentazione interna ed esterna e serve la compattazione; la paginazione divide memoria logica in pagine e memoria fisica in frame della stessa dimensione (potenza di 2), elimina la frammentazione esterna, traduce (p, d) con la tabella delle pagine (PTBR, PTLR) e riduce il costo dei due accessi con il TLB (EAT = h * t + (1 - h) * 2t); le tabelle grandi si dividono in gerarchiche, hash o invertite; lo swapping sposta intere pagine o processi su disco; la segmentazione usa blocchi di lunghezza variabile con coppia (base, limite), eventualmente paginati; Intel IA-32 usa segmentazione con paginazione a due livelli (10+10+12 bit) e IA-64 quattro livelli su 48 bit.Memoria centrale - allocazione contigua, paginazione e segmentazione →).
Esercizio 37 (e 59)
1. Bit di scostamento. Un frame è di 1 KB byte; una cella è di 32 bit byte. In una pagina ci sono celle: 8 bit di scostamento. (L'indirizzo è di cella, non di byte.)
2. Memoria massima indirizzabile. Dei 32 bit logici, 8 sono scostamento e 24 numerano le pagine: pagine da 1024 byte, cioè byte byte . (Equivalente: celle da 4 byte.)
3. Tre indirizzi. Si separano gli 8 bit meno significativi (scostamento) dal resto (pagina):
| indirizzo | pagina (24 bit alti) | scostamento (8 bit) | tabella | risultato |
|---|---|---|---|---|
(a) 0111 1101 0101 |
0111 = 7 |
1101 0101 = 213 |
validità 1, frame 106 | fisico |
(b) 0100 0001 0111 |
0100 = 4 |
0001 0111 = 23 |
validità 0 | page fault: la pagina 4 esiste ma non è in memoria; il pager la carica |
(c) 1011 1101 1011 |
1011 = 11 |
1101 1011 = 219 |
non c'è nella tabella (la tabella ha le pagine 0-9) | indirizzo non valido: trap del gestore della memoria |
Controllo con i numeri decimali: (a) vale , (b) , (c) . Per (a) il fisico è celle, non byte (il frame 106 comincia alla cella ).
Esercizio 62
(a) Tabella delle pagine. Le pagine 4, 9, 5, 1 sono nei frame 0, 1, 2, 3; le altre 12 non sono in memoria:
| pagina | 1 | 4 | 5 | 9 | tutte le altre |
|---|---|---|---|---|---|
| frame | 3 | 0 | 2 | 1 | – (validità 0) |
| validità | 1 | 1 | 1 | 1 | 0 |
(b) Indirizzi. Si calcola e :
| logico | validità | fisico | ||
|---|---|---|---|---|
| 1628 | 3 | 0 | page fault (la pagina 3 non è in memoria) | |
| 851 | 1 | 1, frame 3 | ||
| 2700 | 5 | 1, frame 2 | ||
| 2432 | 4 | 1, frame 0 |
(c) 1330. con resto : pagina 2, non in memoria (validità 0): page fault.
Per 1628 non c'è nessun indirizzo fisico da calcolare: la pagina 3 non è in memoria.
Esercizio 86
pagine e parole per pagina: l'indirizzo logico ha bit. I frame sono con parole ciascuno: l'indirizzo fisico ha bit.
Esercizio 34 (TLB e tabella delle pagine)
La pagina da 1 K ha 1000 (o 1024) locazioni. La soluzione del corso numera le locazioni da 1: la pagina 0 contiene le locazioni 1-1000, la 1 le 1001-2000, ecc. In entrambi i modi di contare risulta: 4000 cade nella pagina 3, 5130 nella pagina 5 (con 1024: , ).
Accesso in scrittura a 4000 (pagina 3).
- La pagina 3 non è nel TLB (le righe valide hanno le pagine 5, 6 e 0) e non è presente nella tabella delle pagine (presente = 0): page fault.
- Il sistema operativo carica la pagina in un frame libero, imposta la tabella: presente 1, riferita 1, modificata 1 (è una scrittura), frame = quello scelto (indicato con XXX: non si sa quale).
- La riga della TLB: l'unica non valida è la riga 2, che diventa valida con pagina virtuale 3, frame XXX e modificata 1.
Accesso in scrittura a 5130 (pagina 5).
- La pagina 5 è nel TLB (riga 0): TLB hit, nessun accesso alla tabella per tradurre; il frame è 123.
- Poiché è una scrittura, la riga 0 diventa modificata 1; nella tabella delle pagine il bit modificato della pagina 5 si aggiorna (nel TLB subito, nella tabella al più tardi quando la riga viene sostituita).
Stato finale: tabella: pagina 3 presente (riferita e modificata, frame XXX), pagina 5 con modificata 1. TLB: riga 0 = (valida, modificata, 5, 123), riga 2 = (valida, modificata, 3, XXX).
Errori tipici
- Dimenticare che l'indirizzo è di cella (di 4 byte): la dimensione della pagina in celle è 256, non 1024.
- Confondere page fault (pagina valida ma non in memoria) con indirizzo non valido (pagina fuori dallo spazio del processo).
- Calcolare lo scostamento come con sbagliato (arrotondare per eccesso invece che per difetto).
- Usare il numero di frame come indirizzo: bisogna moltiplicare per la dimensione del frame e poi aggiungere lo scostamento.
- In (c) dire "page fault" invece di "indirizzo non valido": la pagina 11 non esiste nella tabella.
Versione ripasso
Formule. , , fisico . Validità 0: page fault (pagina esistente) o indirizzo non valido (pagina inesistente). Bit di logico ; di fisico .
Ex. 37. Frame 1 KB, celle da 4 byte 256 celle 8 bit di offset; 24 bit di pagina GB. (a) 0111|11010101: pagina 7, offset 213, frame 106 . (b) pagina 4, offset 23, validità 0 page fault. (c) pagina 11 non in tabella indirizzo non valido (trap).
Ex. 62. Frame 0-3 pagine 4, 9, 5, 1 pagina 1 , 4 , 5 , 9 . 1628: pagina 3 non presente page fault. 851: pagina 1, offset 339 . 2700: pagina 5, offset 140 . 2432: pagina 4, offset 384 . 1330: pagina 2 page fault.
Ex. 86. bit logici, bit fisici.
Ex. 34. 4000 pagina 3: né nel TLB né in memoria page fault; si carica, tabella (presente, riferita, modificata), riga TLB libera (la 2) . 5130 pagina 5: TLB hit (riga 0, frame 123), riga 0 diventa modificata.
Passaggi. 37: indirizzo a 32 bit, offset 8, pagina 24: 0111 | 11010101 pagina 7, offset 213, frame 106, ; 0100 | 00010111 pagina 4 non valida page fault; 1011 | 11011011 pagina 11 fuori tabella trap. 62: , ; 851 ; 2700 ; 2432 . 34: 4000 pagina 3 (non nel TLB, non presente): fault, riga TLB 2 ; 5130 pagina 5, hit nella riga 0, modificata.
Errori tipici: indirizzo di cella e non di byte; page fault indirizzo non valido; offset con pagina sbagliata; usare il frame senza moltiplicare per la dimensione.