Il modello paginato in protected mode





Nel Pentium Il modo paginato viene impostato settando il bit PG del registro di controllo CR0. La dimensione delle pagine viene impostata dal bit PSE (Page Size Extension) del registro di controllo CR4 e può essere di 4K o 4M.
Inoltre, se si vuole impostare il modello paginato puro, si deve eliminare del tutto la segmentazione. A questo scopo è sufficente creare un unico segmento di 4G con BA=00000000, LIMIT=FFFFF e G=1.
Nel modo paginato i livelli di protezione sono soltanto 2, il livello User che corrisponde a 3 e il livello Superuser che corrisponde a 0,1,2.
Vediamo ora come sono fatte le tabelle delle pagine. Dobbiamo distinguere il caso di pagine di 4k e quello di pagine di 4M.


Pagine 4K

Il Pentium usa due livelli di indirizzamento delle pagine, implementato con due tipi di tabelle: la Page Directory (PD) e la Page Table (PT).

Ogni entry nella PD o nella PT è 4 byte e contiene il descrittore di pagina composto dal numero della pagina (20 bit) e dagli attributi (12 bit).
Ogni tabella, essendo allocata su una pagina, può contenere fino a 1024 entries.
La PD deve essere allocata in memoria fisica; il suo indirizzo (20 bit) è memorizzato nel registro di controllo CR3, chiamato anche PDBR (Page Directory Base Register). Pentium offre la possibilità di assegnare un'unica PD per tutti i processi o una PD per ogni processo.
La conversione da indirizzo virtuale a fisico viene effettuata convertendo prima l'indirizzo virtuale nel seguente formato (Linear Address):
DIRECTORY TABLE OFFSET


e successivamente covertendo l'indirizzo lineare nell'indirizzo fisico corrispondente (sempre che la pagina sia in memoria)
Il procedimento di conversione è illustrato nella figura seguente
Illustriamolo con un esempio
Supponiamo si dover allocare memoria per un programma di 9M. Dividendo al solito per 4K otteniamo 2304. Il SO deve quindi allocare 2304 pagine. Poichè ogni PT può contenere al massimo 1024 entry, si devono allocare 3 PT e creare tre entry nella PD come illustrato in figura
Ora supponiamo che il processore debba eseguire l'istruzione all'indirizzo virtuale 6291456 (00600000 hex) e seguiamo passo passo il meccanismo di conversione.
Dividendo 6291456 per 4096 otteniamo 1536 (600 hex) col resto di 2. Questo è il numero di pagina virtuale a cui appartiene il nostro indirizzo
Poichè 1536 è maggiore di 1024 dividiamo per 1024; otteniamo 1 col resto di 512.
Quindi il nostro indirizzo virtuale 6291456 corrisponde alla entry 1 della PD e alla entry 512 della PT 2500, mentre l'offset della pagina del è 2
Una volta trovata la pagina fisica si ottiene l'indirizzo fisico:

1500X4096+2= 6144002 (005DC002 hex)



Pagine 4M

In questo caso si usa solo la Page Directory. L'indirizzo lineare
Indice Offset

In cui il campo Indice (10 bit) punta all'entry nella PD e il campo Offset è l'offset all'interno della pagina.




Gli attributi di pagina

I bit di attributo contengono informazioni sullo stato della pagina e ne impostano il livello di protezione. Essi differiscono leggermente per una PD o una PT

                                                                Page Directory
AVAIL RS PS 0 A PCD PWD U W P


                                                                   Page Table
AVAIL 0 0 D A PCD PWD U W P