Modalità 8086 virtuale
# Modalità 8086 virtuale

Nei processori 80386 e successivi, la modalità 8086 virtuale (Virtual 8086 mode), chiamata anche come modalità reale virtuale (virtual real mode, o VM86), permetteva l'esecuzione di programmi in modo reale che non sono in grado di funzionare della modalità protetta, sotto il controllo di un sistema operativo in modalità protetta. È una tecnica di virtualizzazione hardware del processore 80386 che permette di emulare uno o più processori virtuali 8086, è una conseguenza dei problemi causati dalla modalità protetta del processore 80286, il quale non era in grado di eseguire correttamente e contemporaneamente applicazioni in modalità reale.

VM86 usa uno schema di segmentazione identico a quello della modalità reale (per ragioni di compatibilità), sfruttando lo stesso indirizzamento a 20 bit, ma soggetto al meccanismo di paginazione di memoria della modalità protetta.

## Panoramica

VM86 è una modalità usati dai processi eseguiti in modalità protetta. Di conseguenza, il processore può commutare tra processi VM86 e quelli non VM86, permettendo il multitasking di applicazioni DOS.

Per poter utilizzare VM86, un sistema operativo imposta un monitor in modalità VM86, che è un programma che gestisce l'applicativo in modalità reale ed emula oppure filtra l'accesso alle risorse hardware e software. Il monitor deve essere eseguito al livello di privilegio 0 e in modalità protetta. Solo l'applicativo 8086 viene eseguito nella modalità VM86 e al livello di privilegio 3. Quando l'applicativo in modalità reale tenta di fare operazioni come accedere a certe porte I/O per usare periferiche hardware, oppure accedere a certe aree di memoria, la CPU intercetta queste richieste ed invoca il monitor, il quale esamina quello che l'applicativo sta facendo e può agire da tramite con l'hardware, emulando la funzione che l'applicativo in modo reale vuole usare, oppure termina l'applicativo se sta cercando di fare qualcosa di non consentito.

## Utilizzo

Viene usato per eseguire alcuni programmi DOS in FlexOS 386 (dal 1987), Concurrent DOS 386 (dal 1987), Windows/386 2.10 (dal 1987), DESQview 386 (dal 1988), Windows 3.x (dal 1990), Multiuser DOS (dal 1991), Windows for Workgroups 3.1x (dal 1992), OS/2 2.x (dal 1992), 4690 OS (dal 1993), REAL/32 (dal 1995), nella modalità 386 avanzata su Windows 95, 98, 98 SE e ME attraverso macchine DOS virtuali, su SCO UNIX attraverso Merge, e su Linux attraverso DOSEMU.

## Indirizzamento di memoria

Il problema più comune riscontrato nell'esecuzione di codice 8086 nella modalità protetta è l'indirizzamento di memoria che è completamente diverso tra la modalità protetta e la modalità reale. Lavorando nel modo VM86 la segmentazione funziona come nel modo reale, ma con l'attivazione del meccanismo di paginazione, ed è trasparente al codice in modo reale.

## Interrupt

Quando viene eseguito un interrupt (sia hardware, software ed istruzioni iret), il processore disabilita il codice VM86 e ritorna a funzionare in modalità protetta per gestire l'interrupt.

