Gestione della memoria
logica e fisica degli
elaboratori x86
Prof. Marco Mezzalama –All rights reserved
In modo reale gli indirizzi, determinati a
livello di istruzioni, indirizzano
direttamente la memoria fisica, seppur
mediante un modello di segmentazione
della memoria fisica stessa, mediante
20 bit (1MB)
Reg.Seg.(16)
0000
Offset(16)
Prof. Marco Mezzalama –All rights reserved
Modello di memoria – la gerarchia
Memoria logica
Memoria lineare
Prof. Marco Mezzalama –All rights reserved
Memoria fisica
Modello di memoria – la gerarchia
Memoria logica: spazio di memoria visibile
dall’architettura del processore, a livello di registri
(assembler)
Memoria lineare: spazio di memoria gestito
dall’architettura mediante un indirizzamento lineare
(può coincidere con la memoria logica in alcuni
processori)
Memoria fisica: spazio di memoria direttamente
indirizzabile dal ABUS
Memoria reale: la memoria fisica realmente disponibile
Prof. Marco Mezzalama –All rights reserved
Il modo
protetto è un
gran cas..o!
In modo protetto gli indirizzi,
determinati a livello di istruzioni, sono
espressi su 46 bit (64TB)
segmentazione della memoria logica
(virtuale)
Reg.Seg.(14)
Prof. Marco Mezzalama –All rights reserved
Offset (32/16)
Il modo
protetto è un
gran cas..!
In modo protetto ogni segmento risulta
essere pari a 4 GB:
• Il registro di segmento (selettore)
specifica il segmento
• L’offset determina l’indirizzo
all’interno del segmento
Prof. Marco Mezzalama –All rights reserved
Offset (32/16)
Reg.Seg.(14)
Seg. 0
Seg. 1
Seg. 2
Esistono 214 (pari a 16K)
segmenti, ciascuno da 4
GB (offset su 32 bit)
Seg. 3
Prof. Marco Mezzalama –All rights reserved
Reg.Seg.(14)
Offset (32/16)
Indirizzo logico (46)
segmentazione
Indirizzo lineare (32)
paginazione
Indirizzo fisico (32)
Prof. Marco Mezzalama –All rights reserved
Seg. 0
Seg. 1
Seg. 2
Seg. 3
Memoria logica
(virtuale)
Prof. Marco Mezzalama –All rights reserved
Memoria lineare
Seg. 0
Seg. 1
descrittore
Seg. 2
Seg. 3
Memoria logica
(virtuale)
Prof. Marco Mezzalama –All rights reserved
Memoria lineare
Descrittori
Ad ogni segmento è associato un descrittore, contenente:
1. Mapping tra ind. Logico e ind. Lineare
2. Attributi del segmento (code/data, R/W, etc.)
3. Il livello di privilegio del segmento (0-3)
Un descrittore è composto da 8 byte
Tutti i descrittori sono contenuti in due tabelle:
1. i primi 8k nella Global Description Table (GDT)
2. I secondi 8K nella Local Descrioption Table (LDT)
Prof. Marco Mezzalama –All rights reserved
Seg. 0
Descrittore
Seg. 0
Seg. 1
Descrittore
Seg. 1
Seg. 2
Descrittore
Seg. 2
Seg. 3
Descrittore
Seg. 3
Memoria logica
(virtuale)
Tabella dei descrittori
Prof. Marco Mezzalama –All rights reserved
Mapping tra indirizzo logico e lineare
Reg.Seg.(14)
Offset (32/16)
descrittore
Indirizzo di base
(32 bit)
Prof. Marco Mezzalama –All rights reserved
+
Indirizzo
lineare
(32 bit)
Mapping tra indirizzo logico e lineare
Seg. 0
Seg. 1
Seg. 0
Seg. 2
Indirizzo di base
(32 bit)
Seg. 3
Memoria logica
(virtuale – 46 bit ind.)
Prof. Marco Mezzalama –All rights reserved
Memoria lineare
(32 bit ind.)
limite
Mapping tra indirizzo logico e lineare
Nel descrittore sono memorizzati:
1. Indirizzo di base (che corrisponde all’indirizzo di testa
del segmento nella memoria lineare, su 32 bit)
2. Limite (che indica il n° di byte effettivamente utilizzati
del segmento, in termini di indirizzo di fine segmento
nella memoria lineare, sono memorizzati solo i primi
20 bit più significativi)
3. Attributi (10 bit)
4. Livello di privilegio (2 bit)
Prof. Marco Mezzalama –All rights reserved
Privilegi
Ad ogni entità (processo, codice, segmento dati, tabelle di
sistema, …) è attribuito un livello di privilegio variabile tra 0 e
3,con 0 il massimo livello.
0
2
1
3
Prof. Marco Mezzalama –All rights reserved
0
Privilegi (il modello gerarchico)
2
1
3
Prof. Marco Mezzalama –All rights reserved
Privilegi (le leggi generali)
R1. Qualità dei dati
Un processo può accedere a dati (segmenti) allo stesso livello o
a livelli più bassi (logicamente, numericamente più elevati).
PLprocesso >= Pldati(logicamente)
PLprocesso <= PLdati (numericamente)
R2. Affidabilità del codice
Un segmento di codice può accedere ad un altro segmento solo
se allo stesso livello o a livelli più alti (logicamente,
numericamente inferiori).
Prof. Marco Mezzalama –All rights reserved
Paginazione
Seg. 0
Seg. 1
Seg. 2
Seg. 3
Memoria logica
(virtuale)
Memoria lineare
Memoria fisica
Prof. Marco Mezzalama –All rights reserved
Paginazione
Pag. 0
Ogni pagina è di 4KB:
Pag. 1
Pag. 2
Pag. 3
Memoria fisica
1. L’indirizzo di testa della pagina è
calcolato dal sistema di paginazione a
partire dai 20 bit più significativi
dell’indirizzo lineare e produce i 20 bit
più significativi dell’indirizzo fisico
2. L’offset nella pagina è prelevato
direttamente dall’indirizzo lineare (12
bit)
Nel Pentium è possibile configurare il
sistema di paginazione con pagine da
4MB
Prof. Marco Mezzalama –All rights reserved
Paginazione
Indirizzo lineare
(32 bit)
I livello(10)
II livello(10)
Offset (12)
Due livelli di tabelle
di paginazione
Indirizzo fisico
(32 bit)
Indirizzo inizio pagina(20)
Prof. Marco Mezzalama –All rights reserved
Offset (12)
Paginazione
Indirizzo lineare
(32 bit)
Indirizzo fisico
(32 bit)
I livello(10)
II livello(10)
Indirizzo inizio pagina(20)
Prof. Marco Mezzalama –All rights reserved
Offset (12)
Offset (12)
Paginazione
Ogni tabella :
1. È costituita da 1024 elementi,
2. Ogni elemento è costituito da 8 byte
3. Ogni elemento contiene:
• 20 bit di indirizzo (al primo livello l’indirizzo di
testa della tabella di secondo livello, al secondo
livello l’indirizzo di testa della pagina nella
memoria fisica)
• un certo numero di bit di attributo
4. Si hanno un totale di 1024 tabelle di secondo livello
per un totale max di 8K*K = 8MB
5. L’indirizzo di testa della tabella di primo livello è
contenuto nel registro di cpu CR2
Prof. Marco Mezzalama –All rights reserved
Paginazione
Indirizzo inizio pagina(20)
S/U
R/W
A
S/U = livello di privilegio della pagina System (pari ai
livelli 0,1,2 della Segmentazione), User (livello 3)
R/W = accessibilità in lettura/scrittura della pagina in
Memoria
A = accessed, indica se una pagina nella memoria fisica
è stata modificata, utile negli algoritmi di swapping
Prof. Marco Mezzalama –All rights reserved
Memoria paginata lineare
Seg. 0
Seg. 1
Seg. 2
Seg. 3
Memoria logica
(virtuale – 46 bit ind.)
Prof. Marco Mezzalama –All rights reserved
Memoria lineare
(32 bit ind.)
Memoria paginata lineare
Reg.Seg.(14)
Offset (32/16)
Facendo puntare tutti i segmenti all’inizio della memoria,
si elimina di fatto la segmentazione, realizzando una
memoria lineare paginata (gestita a livello
programmazione dai soli offset)
I registri di segmento CS,DS, SS, …. ( ed i relativi
descrittori) vengono inizializzati una sola volta al boot
del sistema operativo
Prof. Marco Mezzalama –All rights reserved
Segmentazione e Paginazione
Ai fini della velocità di esecuzione i controlli e le traduzioni
tra ind. Logico ed ind. Fisico devo essere fatte in un tempo di
pipeline ) i descrittori dei segmenti attivi e gli elementi delle
tabelle di paginazione più frequentemente usati sono
contenuti in apposite cache on chip, di cui la seconda è
indicata come TLB
I livello(10)
II livello(10)
Offset (12)
TLB cache
Indirizzo inizio pagina(20)
Prof. Marco Mezzalama –All rights reserved
Offset (12)
Esempio
Si consideri l’istruzione in modo protetto:
MOV AX, (EBX)
Si supponga che DS = 200 e EBX = 155
L’indirizzo logico(virtuale) risulta:
DS: EBX = 200:155
DS(14 bit) = 200
Prof. Marco Mezzalama –All rights reserved
EBX = 155
Esempio
Si consideri l’istruzione in modo protetto:
MOV AX, (EBX)
Si supponga che DS = 200 e EBX = 155
L’indirizzo logico(virtuale) risulta:
DS: EBX = 200:155
Viene pertanto selezionato il 200-esimo descrittore nella
tabella dei descrittori
Si supponga che tale descritto contenga come Indirizzo
di base (che corrisponde all’indirizzo di testa del
segmento nella memoria lineare, su 32 bit) il valore
10000 (BA = 10000).
Prof. Marco Mezzalama –All rights reserved
DS(14 bit) = 200
EBX = 155
Seg. 0
…………….
Seg. 200
Descrittore
200
BA=10000
…………….
Seg. 214
Memoria logica
(virtuale)
Prof. Marco Mezzalama –All rights reserved
Memoria lineare
Esempio
L’Indirizzo di base viene sommato al valore dell’offset
(BX) determinando l’indirizzo lineare effettivo del dato da
leggere dalla memoria.
il valore ottenuto risulta:
10000 (BA) + 155 (EBX) = 10155 (indirizzo dato in
memoria lineare)
Tale indirizzo se NON è abilitata la paginazione è inviato
allo ABUS
In caso contrario all’unità di paginazione
Prof. Marco Mezzalama –All rights reserved
DS(14 bit) = 200
EBX = 155
Seg. 0
…………….
Seg. 200
Descrittore
200
BA=10000
Byte di
Indirizzo
10155
…………….
Seg. 214
Memoria logica
(virtuale)
Prof. Marco Mezzalama –All rights reserved
Memoria lineare
Paginazione
L’indirizzo lineare su 32 bit viene tradotto in indirizzo fisico
dalle tabelle di paginazione ed inviato su ABUS.
10155
Tabelle PAG. (TLB cache)
Xxxx (ABUS)
Prof. Marco Mezzalama –All rights reserved
CONSIDERAZIONI
Nei sistemi operativi odierni, la segmentazione è di fatto
“disabilitata”, nel senso che si definiscono
all’attivazione segmenti molto ampi e sovrapposti. Al
contrario la gestione dei processi e dei privilegi viene
fatta, seppur in modo meno preciso a livello di
paginazione.
Il modo reale è attivato solo in fase di avvio-reset, al fine
di eseguire il POST del BIOS e il bootstrap del SO.
Questo in alcune versioni contiene un suo BIOS
proprietario, compatibile con il modo protetto, che
rende più facile la gestione fisica dei periferici in un
contesto multi task
Prof. Marco Mezzalama –All rights reserved
Scarica

Memoria lineare