Perché un sistema a 64 bit non può eseguire un'applicazione a 16 bit?

Perché è che:

  • un sistema a 32 bit, quando installato su una CPU a 64 bit, può eseguire vecchie applicazioni a 16 bit,
  • ma se si installa un sistema operativo a 64 bit non è ansible eseguire direttamente queste applicazioni e necessita di una sorta di emulazione (che non sempre funziona perfettamente)?

Per essere più specifico, ho un processre a 64 bit (Intel Core 2 Duo). Quando avevo installato Windows XP e Windows 7 (entrambi 32 bit), potrebbero eseguire vecchie applicazioni Windows DOS e 616 bit.

Ora ho installato l'edizione a 64 bit di Windows 7. Perché non è più ansible eseguire quelle stesse applicazioni?

Dalla mia comprensione, è perché quando si esegue in modalità lunga (nativo x64), la CPU stessa non support l'entrata in modalità a 16 bit. Vedi Wikipedia . Quindi, per supportre la modalità a 16 bit, NTVDM (il livello a 16 bit in Windows) dovrà emulare completamente un processre a 16 bit.

Suppongo che pesavano la re-implementazione di uno strato di emulazione rispetto al software di virtualizzazione già esistente (VirtualPC, VirtualBox) per gestire questo problema e si è deciso di tagliare il VDM.

Poiché le maniglie a 64 bit hanno 32 bit significativi :

Notare che Windows a 64 bit non support l'esecuzione di applicazioni basate su Windows a 16 bit.
Il motivo principale è che le maniglie hanno 32 bit significativi su Windows a 64 bit.
Pertanto, le maniglie non possono essere troncate e passate a applicazioni a 16 bit senza perdita di dati.

In Windows, i programmi passano "maniglie" all'OS e viceversa (che sono numbers che il sistema operativo utilizza per identificare in modo univoco una risorsa particolare, ad esempio una window).

Per supportre i programmi a 16 bit, Windows a 32 bit genera solo una maniglia con 16 bit significativi – i 16 bit superiori vengono ignorati dal sistema operativo (anche se i programmi non stanno approfittando di questo fatto). Quindi nessun programma può interagire con più di 2 16 oggetti, che in realtà sono piuttosto bassi.

Tuttavia, per migliorare questo, Windows a 64 bit ha aumentato il numero di bit significativi in ​​una maniglia a 32. Ma ora ciò significa che le maniglie non possono essere trasmesse a programmi a 16 bit senza perdere informazioni. Quindi i programmi a 16 bit non possono essere eseguiti su Windows a 64 bit.

Per Windows, è perché le versioni x86 del sistema operativo comprendono l'emulazione a 16 bit che consente di eseguire i processi precedenti DOS. Nelle versioni x64, devono già emulare l'esecuzione x86 (lo chiamano WoW64) per consentire l'esecuzione di processi a 32 bit e suppongo che utilizzando Wow64 per emulare ulteriormente l'emulatore a 16 bit ha causato troppi problemi.

Una manciata di processi a 16 bit riconosciuti verrà eseguita perché l'emulazione è codificata per gestirli, ma il resto non funziona perché l'emulazione non è inclusa in x64.

Vedere "Nessun codice a 16 bit" all'articolo di MSKB: http://support.microsoft.com/kb/282423

Penso che la ragione più probabile è che solo una piccola percentuale di proprietari di PC desideri effettivamente poter eseguire vecchie applicazioni a 16 bit sul loro nuovo hardware a 64 bit. Microsoft probabilmente pensò che non valeva la pena di continuare a supportre applicazioni a 16 bit.

Correggi se sono sbagliato, ma alla mia comprensione è solo a causa di problemi specifici di Windows che NTVDM sta utilizzando la modalità 8086 virtuale. La modalità di compatibilità sui processri x64 (in esecuzione in modalità lunga) support la modalità protetta "pulita", 16 e 32 bit da quanto ho trovato qui: http://en.wikipedia.org/wiki/Long_mode , ma non alcuni dei 386 aggiunte come la modalità virtuale 8086. Quindi non è supportto molto probabilmente perché non paga per Microsoft per riprogrammare NTVDM, che probabilmente richiederà l'aggiunta di qualche ulteriore emulazione perché alcune applicazioni di modalità protetta a 16 bit possono utilizzare il virtual 8086, anche se la maggior parte non lo fa. Suppongo che con abbastanza lavoro è ansible scrivere qualcosa di più veloce di dosbox in esecuzione in modalità lunga, in quanto esiste un supporto hardware per applicazioni a 16 bit.

La situazione è diversa per le applicazioni Dos e le applicazioni a windows a 16 bit.

Per le applicazioni Dos il problema è che la modalità virtuale 8086 non è disponibile in modalità lunga. Questa è una limitazione dell'architettura CPU.

Per le appliance Windows a 16 bit (che vengono eseguite in modalità protetta a 16 bit), il motivo è che MS non è stata preparata per eseguire il lavoro per implementare un adeguato livello di compatibilità. Amusingly Wine è perfettamente in grado di eseguire applicazioni a 16 bit di Windows su 64 bit Linux.