La paginazione

Materie:Appunti
Categoria:Informatica

Voto:

2.5 (2)
Download:125
Data:03.04.2001
Numero di pagine:8
Formato di file:.doc (Microsoft Word)
Download   Anteprima
paginazione_1.zip (Dimensione: 6.72 Kb)
trucheck.it_la-paginazione.DOC     20.5 Kb
readme.txt     59 Bytes


Testo

4.1 LA PAGINAZIONE

4.1.1 IL SISTEMA DELLA PAGINAZIONE

L' IntelDX4 usa 2 livelli di tabelle per traslare l' indirizzo lineare (proveniente dalla unita' di segmentazione) in un indirizzo fisico.
L’indirizzo lineare e’composto di 3 parti: l' indice generale delle tabelle di pagina, la tabella delle pagine e la pagina stessa. Tutti questi elementi, residenti in memoria sono di lunghezza 4 Kb per semplificare il meccanismo di allocazione e deallocazione della memoria ed evitare il problema della frammentazione. La fig. 4.19 illustra il meccanismo di paginazione.

4.1.2 IL REGISTRO BASE DEL DESCRITTORE DI PAGINA

CR2 e' il registro che contiene l' Indirizzo Lineare di Pagina Mancante, cioe' l'indirizzo che ha generato un Fault Page.
CR3 e' il registro che contiene l' indirizzo fisico di base della tabella indice generale delle pagine.
I 13 bits meno significativi di CR3 sono posti a zero, cosicche' l' indirizzo e' multiplo di 4 Kb.

4.1.3 INDICE GENERALE DELLE TABELLE DI PAGINA

E' lungo 4 Kb e puo' avere fino a 1024 elementi ciascun dei quali contiene un puntatore ad una tabella delle pagine ed informazioni sulla tabella stessa. Il suo contenuto e' visualizzato in fig. 4.20.
I 10 bits piu' significativi di un indirizzo lineare sono utilizzati per individuare l' elemento nella tabella.

4.1.4 TABELLA DELLE PAGINE

Ogni tabella di pagine e' lunga 4 Kb e puo’avere fino a 1024 elementi ciascuno dei quali contiene l' indirizzo fisico di inizio pagina e informazioni statistiche riguardanti la pagina (vedi fig. 4.21). Per individuare un elemento della tabella vengono utilizzati i bits A12-A21.
Le tabelle delle pagine possono essere condivise tra vari tasks e possono essere scaricate su disco se non utilizzate.

4.1.5 INDICE GENERALE DELLE PAGINE/ELEMENTI DELLA TABELLA

I 12 bits meno significativi degli elementi della tabella indice generale e della tabella indice di pagina contengono informazioni statistiche sulla tabella di pagine e sulla pagina.
Il bit P (Presente) indica se la tabella generale o di pagine possono essere utilizzate per la conversione dell' indirizzo (P=1) oppure no (P=0, in tal caso tutti gli altri bits possono essere usati dal software, ad esempio possono indicare dove e' memorizzata su disco la pagina).
Il bit A (Acceduta) viene impostato dal processore prima di una operazione di lettura o scrittura.
Il bit D (Imbrattato) viene impostato prima di una scrittura ad un indirizzo raggiungibile da quella entrata di pagina. Il bit D non e' definito in un elemento della tabella generale.
Quando i bits P, A e D vengono modificati, il processore genera un ciclo Read-Modify-Write che blocca il bus ed evita conflitti con altri processori o periferiche. Il software che usa questi bits dovrebbe usare il prefisso LOCK per assicurare l' integrita' delle tabelle in un sistema multi-master.
I 3 bits riservati al sistema operativo (fig. 4.20 e 4.21) sono definibili dal software. I sistemi operativi possono usarli per i loro scopi, ad esempio per informazioni sul tempo trascorso dall’ultimo accesso alla pagina, cosicche' il sistema operativo puo' implementare una tecnica di sostituzione Last Recently Used (mantiene in memoria quella usata piu’recentemente).
I bits U/S (Utente/Supervisore) e R/W (lettura/Scrittura) sono usati per fornire attributi di protezione alle singole pagine.

4.1.6 OPERAZIONE DI PAGINAZIONE

L' unita' di paginazione riceve un indirizzo lineare di 32 bits dalla unita' di segmentazione.
I 20 bits piu' significativi vengono confrontati con tutti i 32 elementi della TLB per controllare se vi e' una coincidenza. Se cio' si verifica, viene calcolato l' indirizzo fisico di 32 bits ed esso viene inviato all' address bus. Se invece non e' presente nella TLB il processore legge l' elemento appropriato della PDE. Se P=1, la tabella delle pagine e' in memoria, allora il processore legge l' appropriato elemento nella PTE e imposta il bit A. Se P=1, nella tabella delle pagine, la pagina e' presente in memoria il processore aggiorna il bit A e D ed accede in memoria. I 20 bits piu' significativi dell' indirizzo lineare, letti dalla tabella delle pagine, e' memorizzato nella TLB per accessi futuri.
Se invece il bit P=0, nell' elemento della tabella generale o in quello della tabella delle pagine, il processore genera un page fault, una Eccezione 14. La stessa eccezione la genera se il riferimento alla locazione di memoria viola gli attributi di protezione (U/S e R/W, ad esempio cercando di scrivere su una pagina di tipo a sola lettura). CR2 contiene l' indirizzo lineare che ha causato la page fault. CS:EIP puntano all' istruzione che ha causato la page fault.

5. AMBIENTE VIRTUALE 8086

5.1 ESECUZIONE DI PROGRAMMI 8086

L' IntelDX4 permette l' esecuzione di programmi 8086 in due modi: nel modo reale e nel modo virtuale.
Nel secondo modo si ha il vantaggio di utilizzare il meccanismo di protezione. In particolare e' permessa l' esecuzione contemporanea di sistemi operativi 8086 con le loro applicazioni. Ad esempio, un utente puo' utilizzare un programma di foglio elettronico sotto MS-DOS, un altro il sistema MS-DOS ed un altro il sistema UNIX con le sue utility ed applicazioni multiple. Ogni utente e' come se avesse il sistema a sua disposizione. La fig. 4.24 illustra il concetto.
Il sistema e' in modo virtuale quando nel registro EFLAGS il bit VM=1.
Il processore testa questo flag quando:
1. carica un registro di segmento per conoscere se deve usare la conversione dell' indirizzo di tipo 8086
2. decodifica una istruzione, per determinare quali istruzioni sono sensibili all' IOPL e quali istruzioni non sono supportate (come ad esempio nel modo reale)

5.2 REGISTRI ED ISTRUZIONI

Nel modo reale i registri disponibili sono quelli dell' 8086 ed in piu' FS e GS.
Le istruzioni sono quelle dell' 8086 piu' BSWAP, XADD, CMPXCHG e CPUID

5.3 SISTEMA DI INDIRIZZAMENTO NEL MODO VIRTUALE 8086

Una delle maggiori differenze tra il modo reale e quello protetto e' come vengono interpretati i selettori di segmento. Quando il processore e' in modo virtuale 8086 i registri di segmento vengono utilizzati come nel modo reale. Il contenuto del registro viene spostato di 4 bits e sommato all' offset per formare l' indirizzo di base lineare.
Il processore IntelDX4 permette al sistema operativo di specificare per ogni task chi usa il modo reale e chi il modo protetto. Con l' uso della paginazione lo spazio di indirizzamento di 1 Mb di un task nel modo virtuale puo' essere mappato ovunque nello spazio lineare di 4 Gb. Come nel modo reale, gli indirizzi effettivi (cioe' l' offset del segmento) che eccedono i 64 Kb causano una eccezione 13.

5.4 LA PAGINAZIONE IN MODO VIRTUALE

L' hardware di paginazione permette l' esecuzione concorrente di molti task in modo virtuale e fornisce protezione e isolamento a livello di sistema operativo. Sebbene non sia necessario abilitare la paginazione per eseguire task in modo virtuale, e' necessario per eseguire task multipli in modo virtuale o per rilocare lo spazio di indirizzamento di un task in modo virtuale in uno spazio di indirizzamento fisico piu' grande di 1 Mb.
La paginazione permette che l' indirizzo lineare di 20 bits prodotto da un programma in modo virtuale sia diviso in al massimo 256 pagine. Ciascuna di queste puo' essere allocata dovunque nello spazio di indirizzamento fisico di 4 Gb. Ed inoltre, poiche' CR3 viene caricato durante una commutazione di task, ciascun task in modo virtuale puo' usare uno schema di mappaggio differente per rilocare le pagine ad indirizzi fisici differenti.
Ed infine la paginazione permette la condivisione del codice di sistema operativo 8086 tra diverse applicazioni 8086. La fig. 4.24 illustra quanto affermato.

5.5 BITMAP DELLA PROTEZIONE E DEI PERMESSI DI I/O

Tutti i programmi in modo 8086 virtuale vengono eseguiti a livello di privilegio 3, percio' sono soggetti a tutti i controlli presenti nel modo protetto. Invece, nel modo reale e come se fossero eseguiti al livello 0. Un tentativo, in modo virtuale, di eseguire una istruzione privilegiata causa una eccezione 13.
Le istruzioni privilegiate sono: LIDT, LGDT, LMSW, ecc.
Altre istruzioni sono disponibili solo in modo protetto. Percio' un tentativo di eseguirle in modo reale o virtuale 8086, genera una eccezione 6. Le istruzioni sono: LTR, LLDT, STR, ecc.
Le istruzioni sesibili all' IOPL nel modo protetto sono: IN, OUT, STI, CLI, ecc.
Nel modo virtuale sono: INT n, PUSHF, POPF, STI, ecc.

5.6 TRATTAMENTO DEGLI INTERRUPT

Per mantenere l' emulazione di una macchina virtuale 8086, nel modo virtuale gli interrupt sono gestiti in un unico modo. Per riconoscere se l' interrupt proviene da un programma in modo virtuale o in modo protetto il microprocessore esamina il bit VM nel registro EFLAG. In ogni caso l' esecuzione di una routine e' al livello 0. Quando l' IntelDX4 e' in modo virtuale il bit VM viene azzerato (comunque una copia del registro EFLAG e' presente nello stack) la routine viene eseguita ed infine il controllo passa al programma 8086 che era in esecuzione.

5.7 ENTRATA E USCITA DAL MODO VIRTUALE.

Si entra nel modo virtuale eseguendo una istruzione IRET (con CPL=0), o con uno Task Switch (con CPL qualsiasi) ad un task che abbia il bit VM=1, oppure eseguendo una istruzione IRET a 32 bit a livello di privilegio 0, cosi' da caricare dallo stack una immagine del registro EFLAG con bit VM=1.
L' istruzione POPF non modifica VM, anche se il processore e' in modo protetto o a livello 0, cosicche' non puo' essere usata per entrare in modo virtuale. PUSHF pone sempre VM=0, anche se il processore e' in modo virtuale 8086, cosicche' un programma non puo' sapere se sta eseguendo in modo reale o virtuale.
Il bit VM puo' essere posto a 1 eseguendo una IRET solo a privilegio 0 , oppure da ogni istruzione o interrupt che causa uno Task Switch nel podo protetto (VM=1 nel registro dei flag) e puo' essere cancellato solo con un interrupt o una eccezione in modo virtuale.
Le istruzioni IRET e POPF eseguite in modo reale o virtuale 8086 non cambiano il bit VM.
La transizione dal modo virtuale 8086 al modo protetto avviene solo alla ricezione di un interrupt o di una eccezione.

5.7.1 TASK SWITCH VERSO E DAL MODO VIRTUALE 8086

I task eseguiti in modo virtuale devono essere descritti con un TSS con formato IntelDX4.
Il contesto complessivo del task e' percio' memorizzato nel TSS, compreso il registro EFLAG con il bit VM=1. I registri di segmento contengono gli indirizzi di base dei segmenti invece che i selettori.
Un task switch ad un task descritto con un TSS esegue un controllo addizionale per verificare se il task chiamante deve essere ripreso in modo virtuale. I task descritti con formato 80286 non possono essere rieseguiti in modo virtuale. Prima di caricare i registri di segmento si verifica nel registro dei flag il modo cosi da caricarli come registri di segmento e non selettori. IL task puo' qundi riprendere in modo virtuale 8086.

5.7.2 TRASIZIONE ATTRAVERSO GATE DI TIPO TRAP E INTERRUPT E IRET

Il task switch e' un modo per entrare e uscire dal modo virtuale 8086. Un altro modo e' tramite gate di tipo interrupt o trap o tramite una istruzione IRET.
Se il microprocessore e' in modo virtuale 8086 la sequenza delle operazioni e' la seguente:
1) viene salvato il registro EFLAG, azzerati i bit VM e TF, se l' interrupt e' servito da un gate azzera anche il bit IF
2) i gates di tipo interrupt e trap devono modificare il livello di privilegio dal 3 (livello del programma 8086) allo 0 (cosicche' IRET puo' eseguire il ritorno). Questo processo coinvolge uno stack switch a livello zero nello stack del TSS. Salva i registri SS e ESP del modo virtuale 8086. Il registro SS viene caricato con il significato di registro selettore dato che il bit VM=0;
3) i registri di segmento del modo 8086 vengono inseriti nel nuovo stack (GS,FS,ES) come registri a 32 bit con i 2 bytes piu' significativi indeterminati. I registri vengono caricati con selettori nulli;
4) il vecchio puntatore allo stack viene caricato nel nuovo stack (SS a 32 bit ) e ESP
5) salva il registro dei flag FLAG nello stack
6) salva il vecchio puntatore alle istruzioni nel nuovo stack (CS 32 bit) e EIP
7) carica dal gate interrupt il nuovo puntatore (CS:EIP) e inizia l' esecuzione della routine in modo protetto.
L' uscita dal modo virtuale 8086 esegue un cambiamento di livello e uno switch di task oltre a ritornare indietro dal modo protetto. Inoltre tutti i registri di segmenti 8086 sono salvati nello stack e caricati con selettori nulli. Cosi' da permettere il salvataggio sicuro ed il ripristino del registri DS, ES, FS e GS come selettori 80286. Le routine di gestione non si devono quindi preoccupare se l' esecuzione era in modo virtuale o protetto.
L'istruzione IRET esegue le operazioni viste precedentemente in senso inverso.

Esempio



  


  1. Frenchie

    That's relaly shrewd! Good to see the logic set out so well.