Esercizio - Segmentazione e traduzione degli indirizzi (eserciziario, esercizi 49, 78 e 90)
In questa pagina 5
Testo (eserciziario del corso di Sistemi Operativi, Ing. Informatica UniPD).
Esercizio 90. Tabella dei segmenti: segmento 0 base 219 lunghezza 600; segmento 1 base 2300 lunghezza 14; segmento 2 base 90 lunghezza 100; segmento 3 base 1327 lunghezza 580; segmento 4 base 1952 lunghezza 96. Indirizzi fisici corrispondenti ai logici ⟨0,430⟩, ⟨1,10⟩, ⟨2,500⟩, ⟨3,400⟩, ⟨4,112⟩.
Esercizio 78. Memoria virtuale con segmentazione, parola da un byte, indirizzi logici di 10 bit di cui i 4 più significativi indicano il segmento. (a) Dimensione massima di un segmento? (b) Quanti segmenti al massimo per un processo? Il processo ha 5 segmenti S0…S4 con tabella: S0 (lunghezza 10, base 200), S1 (20, 100), S2 (6, 252), S3 (32, 720), S4 (32, 683). Tradurre gli indirizzi logici 9, 132, 79, 64, 259, 135, 320.
Esercizio 49. Data l'allocazione in memoria dei segmenti 0-4 (figura dell'eserciziario), determinare gli indirizzi fisici degli indirizzi virtuali ⟨0,1984⟩, ⟨1,18⟩, ⟨2,250⟩, ⟨3,1400⟩, ⟨4,112⟩.
L'indirizzo logico è la coppia ⟨s,d⟩ (segmento, scostamento). Per ognuno:
si cerca la riga s della tabella (base Bs, lunghezza Ls); se il segmento non esiste, l'indirizzo non è valido;
si controlla d<Ls: se d≥Ls c'è un errore di segmentazione (trap);
se è valido, l'indirizzo fisico è Bs+d.
A differenza della paginazione il limite del controllo cambia a ogni segmento.
Esercizio 90
logico
base
lunghezza
controllo
fisico
⟨0,430⟩
219
600
430<600 valido
219+430=649
⟨1,10⟩
2300
14
10<14 valido
2300+10=2310
⟨2,500⟩
90
100
500≥100
illegale (trap)
⟨3,400⟩
1327
580
400<580 valido
1327+400=1727
⟨4,112⟩
1952
96
112≥96
illegale (trap)
Esercizio 78
(a) Con 10 bit logici e 4 per il segmento, restano 10−4=6 bit di scostamento: un segmento è lungo al massimo 26=64 byte.
(b) I 4 bit del segmento dànno 24=16 segmenti al massimo.
Traduzione. Il segmento è ⌊a/64⌋ e lo scostamento amod64:
logico
binario (10 bit)
⟨s,d⟩
controllo
fisico
9
0000 001001
⟨0,9⟩
9<10
200+9=209
132
0010 000100
⟨2,4⟩
4<6
252+4=256
79
0001 001111
⟨1,15⟩
15<20
100+15=115
64
0001 000000
⟨1,0⟩
0<20
100+0=100
259
0100 000011
⟨4,3⟩
3<32
683+3=686
135
0010 000111
⟨2,7⟩
7≥6
errore di segmentazione
320
0101 000000
⟨5,0⟩
il processo ha solo 5 segmenti (0-4)
segmento non valido
Ogni segmento ha dimensione massima 64 byte (punto a), ma la lunghezza reale è quella della tabella: per questo l'indirizzo 135 cade nel segmento 2 (lunghezza 6) e non è valido.
Esercizio 49
La figura dell'eserciziario mostra i segmenti in memoria; dalla soluzione si ricavano base e lunghezza dei segmenti usati:
segmento
base
lunghezza
0
(non serve)
1536
1
8960
20
2
144
256
3
4903
1408
4
6482
150
logico
controllo
fisico
⟨0,1984⟩
1984≥1536
errore: indirizzo illegale
⟨1,18⟩
18<20
8960+18=8978
⟨2,250⟩
250<256
144+250=394
⟨3,1400⟩
1400<1408
4903+1400=6303
⟨4,112⟩
112<150
6482+112=6594
Errori tipici
Dimenticare il controllo d<Ls e tradurre comunque.
Confrontare con ≤ invece che con < (se la lunghezza è L, i byte validi sono 0…L−1).
Confondere la dimensione massima di un segmento (2bit di offset) con la sua lunghezza reale nella tabella.
Non controllare che il numero di segmento esista nel processo.
Sommare la lunghezza invece della base.
Versione ripasso
Metodo.⟨s,d⟩: segmento esistente? d<Ls? Allora fisico =Bs+d; altrimenti trap (errore di segmentazione o segmento non valido).