Il modello segmentato in protected mode





Come sappiamo, nel funzionamento in modo reale il processore vede la memoria come composta di segmenti la cui dimensione massima è fissata a 64K. Una locazione di memoria viene individuata tramite una coppia di numeri che costituisce quello che viene chiamato l'indirizzo logico (Logical Address, LA), composto di un indirizzo base ( Base Address, BA), e di un offset. Per ottenere dal LA l'indirizzo fisico, il processore moltiplica il BA per 16 (…"aggiunge" uno 0hex) e lo somma all'offset.

Riassumendo quindi, nel funzionamento real mode:

Le caratteristiche generali del modello segmentato protected mode si possono riassumere nei seguenti punti:
Ogni Descrittore di Segmento contiene i seguenti campi:

BASE ADDRESS (32 BIT)
LIMIT (20 BIT)
ATTRIBUTE 12 BIT)
Descrittore di segmento

Sono previsti due tipi di Tabelle di Descrittori :
La GDT è unica nel sistema. Essa non è allocata in un “segmento” nel senso che per essa non esiste alcun descrittore di segmento. Il suo indirizzo base e la sua dimensione sono contenuti in un registro speciale del processore, il GDTR (Global Descriptor Table Register). GDTR è un registro di 48 bit e contiene l’indirizzo base (32 bit) e la dimensione (16 bit) della GDT
Viceversa è possibile avere più LDT ognuna delle quali allocata in un segmento. I descrittori di segmento delle LDT sono contenuti nella GDT.
L'accesso ad un segmento avviene come nel modo reale tramite un registro segmento
Vediamo il meccanismo d'accesso. Il selettore è composto da tre campi

INDICE

TI

RPL

Selettore di segmento (CS,DS,SS etc..)

Un indirizzo virtuale  è un numero di 48 bit composto della forma

selettore:offset


con selettore di 16 bit e offset di 32 bit, mentre un indirizzo fisico invece è un unico numero a 32 bit.
In figura è schematizzato il processo di conversione

La conversione da virtuale e fisico viene effettuata in fase di esecuzione e non quando il programma viene caricato in memoria.  

 Esempio:

00000 0100 1000 0 10
Selettore di segmento

Il descrittore di segmento potrebbe essere:

BA=0004 0000

 LIMIT=3FF

         XXXXXXXXXXXX

Se l'indirizzo virtuale della prima istruzione del programma è 0000 001D, l'indirizzo fisico risulterebbe 0004 0000 + 0000 001D = 0004 001D

La virtualizzazione della memoria si realizza nel momento in cui un SD fa riferimento ad un segmento non esistente in memoria.
In altre parole, un segmento, benché il suo descrittore sia allocato in una DT, può anche non essere presente in memoria. La presenza o meno del segmento viene segnalata dal bit P degli attributi di segmento.


Gli attributi di segmento

Gli attributi del segmento sono specificati da una serie di campi, i più importanti dei quali sono