Intel486

Materie:Appunti
Categoria:Informatica

Voto:

2 (2)
Download:154
Data:22.03.2001
Numero di pagine:16
Formato di file:.doc (Microsoft Word)
Download   Anteprima
intel486_1.zip (Dimensione: 14.67 Kb)
trucheck.it_intel486.DOC     20.5 Kb
readme.txt     59 Bytes



Testo

IL MICROPROCESSORE INTEL 486 DX2
1.0 INTRODUZIONE
I microprocessori della famiglia Intel486 hanno una architettura a 32 bits.
Possiedono inoltre il gestore di memoria, l’ unita’ floating-poit e una cache intregrata nel chip.
Il microprocessore IntelDX4 ha le stesse caratteristiche dei processori Intel486SL e Intel486DX2 ma con migliori prestazioni: velocita’ di clock maggiore e una memoria cache piu’grande.
L’IntelDX4 mantiene la compatibilita’con i precedenti microprocessori della famiglia, e’ percio’possibile eseguire programmi scritti per processori precedenti (ad es. 8086).
Per ridurre il tempo di esecuzione di una istruzione e’stata adottata la tecnica di progettazione RISC.
L’unita’di gestione della memoria (MMU) puo’ lavorare con la tecnica della segmentazione o con quella della paginazione. Questa seconda puo’essere attivata o disattivata dal sistenma operativo.
La memoria e’ organizzata in segmenti di lunghezza variabile al massimo fino a 4 Gb (2 32).
Ad ogni segmento sono associati degli attributi, ad esempio, la posizione in memoria, la dimensione, il tipo, la protezione.
Un task puo’al massimo avere 16381 (2 14) segmenti. Quindi un task puo’ raggiungere una dimensione di 64 Tb (2 64).
L’unita’ di segmentazione fornisce livelli di protezione per isolare e proteggere il sistema operativo ed i programmi applicativi tra di loro.
L’IntelDX4 ha 4 modi operativi:
1) Modo di indirizzamento reale (Modo Reale)
Il mP opera come un veloce 8086. E’ il modo attivo quando si avvia il sistema.
2) Modo protetto e indirizzamento virtuale (Modo Protetto)
Con questo modo e’ possibile accedere a tutte le funzionalita’del sistema: protezione, paginazione ecc.
3) Modo Protetto Virtuale 8086 (Modo Virtuale 8086)
In questo modo i programmi 8086 sono eseguiti con le potenzialita’ derivanti dalle protezioni del mP.
E’cosi’possibile eseguire contemporaneamente piu’programmi 8086 come task indipendenti.
3) Modo Protetto di Sistema.
E’un modo speciale per sviluppatori di software di sistema operativo.
L’unita’ floating-point (FPU) lavora in parallelo con l’ALU. Esegue numerose funzioni matematiche come ad es. tangente, seno, ecc.
La FPU rispetta lo standard ANSI/ IEEE 754-1985 per le operazioni in virgola mobile
La memoria cache interna ha una dimensione di 16 Kb ed e’di tipo associativo a 4 vie con una tecnica di scrittura write-through. Puo’essere attivata o disattivata per memorizzare le pagine della memoria principale.
2.1 I REGISTRI
I registri possono essere suddivisi in 4 gruppi:
- Registri dell’architettura di base
.. registri generali
.. puntatore istruzioni
.. registro dei flag
.. registri di segmento
- Registri di sistema
.. registri di controllo
.. registri di indirizzamento di sistema
- Registri per le operazioni floating-point
.. registri dei dati
.. parola di segnalazione
.. parola di stato
.. puntatori a istruzioni e dati
.. parola di controllo
- Registri di debug e test
Nelle figure seguenti sono illustrati i vari registri appartenenti ai primi 2 gruppi.
2.0 ARCHITETTURA DEL MODO REALE
2.1 INTRODUZIONE
Dopo un reset o all’avviamento, il mP opera in modo reale come un 8086, ma con la potenzialita’dei registri a 32 bit.
Modo di indirizzamento, dimensioni della memoria, gestione degli interrupt sono eguali a quelle di un 80286 che opera in modo reale.
Quasi tutte le istruzioni dell’IntelDX4 sono disponibili, gli operandi sono pero’a 16 bit.
I segmenti possono avere una dimensione massima di 64 Kb. Gli indirizzi effettivi non devono quindi superare questo valore.
Lo scopo di questo modo operativo e’quello di impostare il modo protetto.
2.2 INDIRIZZAMENTO DELLA MEMORIA
In modo reale, la dimensione massima di memoria e’di 1 Mb. Non й possibile attivare la paginazione, pertanto l’indirizzo lineare e’ eguale all’indirizzo fisico.
L’indirzzo fisico si ottiene come nell’8086: E.A.= Reg. segmento * 16 + Offset.
Tutti i segmenti hanno una lunghezza di 64 Kb e possono essere scritti, letti o eseguiti.
I segmenti possono sovrapporsi in memoria in modo da ridurre la memoria occupata da un programma a quella strettamente necessaria.
2.3 LOCAZIONI RISERVATE
Ci sono 2 zone riservate:
- l’area di inizializzazione del sistema, nella zona alta della memoria (FFFFFFF0h - FFFFFFFF)
- l’area contenente la tabella degli interrupt, nella zona bassa della memoria (00000h-003FFh)
3.0 ARCHITETTURA DEL MODO PROTETTO
3.1 INTRODUZIONE
Nell ' IntelDX4, in modo protetto, un indirizzo lineare puo' spaziare fino a 232, (4 Gb) ed uno virtuale fino a 246 (64 Tb).
Tutto il software scritto per i processori 8086, 80286, Intel386 e Intel486 puo’ essere eseguito dal mP con un sofisticato sistema di gestione della memoria e un sistema di protezione hardware.
Il modo protetto fornisce alcune istruzioni specifiche ottimizzate per gestire il multitasking.
L' architettura base del microprocessore (registri, istruzioni,modi di indirizzamento) rimane la stessa dell' Intel486.
Per il programmatore, la differenza maggiore tra modo reale e modo protetto e' l' aumento dello spazio di indirizzamento e il meccanismo diverso di indirizzamento.
3.2 TECNICA DI INDIRIZZAMENTO.
Per formare l' indirizzo logico si utilizzano 2 componenti: un selettore a 16 bit per individuare l’indirizzo di base del segmento e un indirizzo effettivo a 32 bit. I due valori sono sommati assieme e producono un indirizzo lineare a 32 bit che puo’ essere usato come indirizzo fisico oppure, se e' attivo il meccanismo di paginazione , viene mappato nell' indirizzo fisico.
La differenza con il modo reale consiste nel sistema di calcolo: nel modo protetto il selettore e' usato come indice in una tabella di sistema (vedi figura 4.1) che contiene l' indirizzo di base del segmento.
L' indirizzo fisico si ottiene sommando a questo valore l' offset.
La paginazione fornisce un sistema ulteriore di gestione della memoria ed e' disponibile solo nel modo protetto. Il sistema di paginazione trasla l' indirizzo lineare che deriva dall' unita' di segmentazione in un indirizzo fisico come risulta dalla fig. 4.2
3.3 LA SEGMENTAZIONE
3.3.1 INTRODUZIONE
La segmentazione e' un sistema di gestione della memoria e fornisce i meccanismi di base per la protezione. I segmenti servono per raggruppare regioni di memoria con gli stessi attributi. Ad esempio, il codice di un programma e' contenuto in un segmento, una tabella di sistema e' contenuta in un segmento.
Tutte le informazioni su un segmento sono contenute in una struttura di 8 bytes chiamata descrittore.
I descrittori sono contenuti in strutture chiamate tabelle.
3.3.2 TERMINOLOGIA
Termini usati nel seguito:
PL: livello di privilegio, e' uno dei 4 livelli gerarchici di privilegio. Il livello 0 e' il piu' privilegiato, il 3 e' il meno privilegiato
RPL: livello di privilegio richiesto, e' il livello di privilegio richiesto nella formazione dell' indirizzo. Corrisponde ai 2 bit meno significativi del selettore.
DPL: livello di privilegio del descrittore, e' il livello minimo di privilegio con cui un task puo' accedere al descrittore e quidi al segmento associato. E' determinato dai bit 5 e 6 del byte dei diritti di accesso presente nel descrittore;
CPL: livello di privilegio corrente, e' il livello di esecuzione del task, uguale al livello di privilegio presente nei 2 bit meno significativi del CS. Unica eccezione quando un task sta eseguendo un codice di segmento conforme.
EPL: livello di privilegio effettivo, e' il minore (maggiore numericamente) tra RPL e DPL
TASK: programma in esecuzione, detto anche processo.

3.3.3 TABELLE DEI DESCRITTORI
3.3.3.1 INTRODUZIONE
Le tabelle dei descrittori definiscono tutti i segmenti usati in un sistema IntelDX4.
Ci sono 3 tipi di tabelle: tabella dei descrittori globali, tabella dei descrittori locali, tabella dei descrittori di interrupt. La lunghezza di ogni tabella e' variabile da un minimo di 8 byte (1 solo descrittore) ad un massimo di 64 Kb (8192 descrittori). I 13 bits piu' significativi di un selettore sono usati come indice nella tabella.
Ad ogni tabella e' associato un registro che memorizza l' indirizzo di base a 32 bit ed il limite a 16 bit.
I registri sono: GDTR, LDTR, IDTR, vedi fig. 4.3.
Per caricare i registri con i valori di base esistono le istruzioni privilegiate LGDT, LLDT, LIDT.
Per memorizzare i valori delle basi e dei limiti esistono le istruzioni SGDT, SLDT, SIDT.
3.3.3.2 TABELLA DEI DESCRITTORI GLOBALI
Contiene i descrittori accessibili da tutti i task del sistema. Puo’ contenere descrittori di tutti i tipi di segmento ed eccezione del tipo interrupt. Ogni processore IntelDX4 contiene una GDT.
In genere la GDT contiene descrittori di segmenti codice e dati usati dal sistema operativo, descrittori dei TSS e descrittori delle LDT. Il primo elemento della GDT e' vuoto e corrisponde al selettore nullo, definisce un puntatore a nessun segmento.
3.3.3.3 TABELLA DEI DESCRITTORI LOCALI
La LDT contiene descrittori di segmenti associati ad un task. In generale i sistemi operativi prevedono che ogni task abbia una separata LDT.
La tabella puo' contenere descrittori di codice, di dati, di stack, di gate di tipo task e call.
Con la LDT si ottiene la separazione del codice e dei dati di un task dal resto del sistema operativo.
La GDT, invece, contiene descrittori di segmenti comuni a tutti i task.
Un task non puo' accedere ad un segmento di memoria se il descrittore di quel segmento non e' presente nella LDT o nella GDT.
Con questo sistema si riesce ad ottenere l' isolamento e la protezione tra task, ma anche la condivisione di dati globali.
Come per i registri GDTR e IDTR, la parte visibile dell' LDTR contiene un selettore da 16 bit che punta ad un descrittore di LDT nella GDT.
3.3.3.4 TABELLA DEI DESCRITTORI DI INTERRUPT
Contiene i descrittori delle routines di interrupt. Il numero massimo di elementi e’ di 256.
I descrittori possono essere solo di 3 tipi: gates di tipo task, interrupt o trap.
La lunghezza minima della tabella e' di 256 bytes per poter contenere i 32 interrupt riservati di Intel. Ogni interrupt usato dal sistema deve avere un descrittore in IDT. Si accede al descrittore tramite una istruzione INT, un interrupt hardware o una eccezione.
3.3.4 DESCRITTORI
3.3.4.1 BITS DEI DEGLI ATTRIBUTI
Un descrittore e' formato di 8 bytes che contengono attributi riguardanti un oggetto (il segmento).
Gli attributi sono: l' indirizzo lineare di base del segmento ( 32 bits), la lunghezza (20 bits) e la granularita' del segmento, il livello di protezione, la lunghezza di default dell' operando (16 o 32 bits) ed il tipo di segmento.
Tutti gli attributi sono contenuti in 12 bit del descrittore. La fig. 4.5 illustra il formato generale di un descrittore.
Tutti i segmenti hanno in comune 3 attributi: il bit P, il DPL ed il bit S.
Il bit P indica se il segmento e' presente in memoria, se P=0 un tentativo di accedere al segmento genera una eccezione 11.
DPL (2 bits) specifica il livello di protezione associato al segmento.
L' IntelDX4 ha 2 categorie di segmenti: segmenti di sistema e segmenti non di sistema (per codice e dati). Il bit S identifica i due tipi di segmento: se S=0, si tratta di un segmento di sistema, se S=1, si tratta di un segmento di codice o di dati.
3.3.4.2 DESCRITTORI DI TIPO CODICE E DATI (S=1)
La fig. 4.6 presenta il formato generale di un descrittore di tipo codice e dati e la tab. 4.1 riporta il significato dei bits del byte dei diritti di accesso.
I descrittori di codice e dati hanno diversi campi in comune.
Il bit di accesso A viene impostato ogni volta che si accede al segmento, cosicche’ il sistema operativo puo’ elaborare informazioni statistiche sull’uso del segmento.
Il bit G (granularita’) indica se il segmento ha una lunghezza multipla di 1 byte o di una pagina.
Il bit E (eseguibile) indica se si tratta di un segmento di dati o di codice.
Il bit R (leggibile) assieme al bit E indica se il segmento puo’essere letto o solo eseguito.
Il bit ED (direzione di espansione) indica se il segmento puo’espandersi verso l’alto (dati) o verso il basso (stack).
Il bit W (scrittura) indica se si puo’ scrivere sul segmento.
Il bit B (dimensione operando) indica se le operazioni di stack sono a 16 bit o a 32 bit.
3.3.4.3 FORMATI DEI DESCRITTORI DI SISTEMA.
I segmenti di sistema forniscono informazioni sulle tabelle di sistema, sui task e sui gates.
La fig. 4.7 presenta il formato generale dei descrittori di sistema ed i vari tipi di segmenti di sistema.
I descrittori sono eguali a quelli del mP 80286 nei primi 6 bytes e differiscono solo negli ultimi 2.
3.3.4.4 DESCRITTORE DI LDT ( S=0, TIPO=2)
Contiene informazioni sulla LDT. Sono presenti solo in GDT.
3.3.4.5 DESCRITTORE DI TSS (S=0, TIPO=1,3,9,B).
Contiene informazioni sulla posizione, lunghezza, livello di privilegio del TSS associato ad un task.
TSS e’ un segmento con un formato particolare contenente le informazioni sullo stato di un task ed un link ad un altro task . Il tipo (1,3,9,B) indica se il task e’ occupato o no, se e’ un task 286 o 486.
Il registro TR contiene il puntatore al task attivo in quel momento.
3.3.4.6 DESCRITTORE DI GATE (S=0, TIPO=4-7, C, F).
I gate sono usati per controllare l’accesso ad un segmento.
Ci sono 4 tipi di gate: call, trap, interrupt e trap.
I gates di tipo call sono usati per modificare il livello di privilegio, ad esempio richiamando una routine a livello di privilegio maggiore o eguale.
I gates di tipo task sono usati per eseguire una commutazione di task. Essi puntano solo a segmenti di tipo TSS.
I gates di tipo interrupt o trap sono usati per specificare le routines di gestione degli interrupt. La differenza tra i due tipi consiste nel fatto che i primi disabilitano gli interrupt i secondi no.
La fig. 4.8 presenta il formato dei 4 tipi di descrittori.
3.3.4.7 DIFFERENZE TRA DESCRITTORI 80286 E 80486
Per mantenere la compatibilita’ il mP IntelDX4 gestisce tutti i descrittori dell’80286.
Le differenze sono:
- nel bit di granularita’
- nel numero di bits per individuare la base del segmento (24 nel 286, 32 nel 486)
- nel numero di bits per il limite (16 nel 286, 20 nel 486).
3.3.4.8 IL SELETTORE ED I REGISTRI DI SEGMENTO
Il formato ed il significato dei campi del selettore e’lo stesso dell’80286.
Anche nell’IntelDX4 esistono dei registri di cache associati ai registri di segmento. Le informazioni contenute sono le stesse mentre la dimensione e’maggiore.
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