Por que é isso:
- um sistema operacional de 32 bits, quando instalado em uma CPU de 64 bits, pode executar aplicativos antigos de 16 bits,
- mas se você instalar um sistema operacional de 64 bits, ele não poderá executar esses aplicativos diretamente e precisará de algum tipo de emulação (que nem sempre funciona perfeitamente)?
Para ser mais específico, tenho um processador de 64 bits (Intel Core 2 Duo). Quando eu tinha o Windows XP e o Windows 7 (ambos de 32 bits) instalados, eles podiam executar aplicativos antigos do DOS e de 616 bits do Windows.
Agora eu instalei a edição de 64 bits do Windows 7. Por que ele não pode mais executar esses mesmos aplicativos?
Respostas:
Pelo que entendi, é porque, ao executar no Modo Longo (nativo x64), a própria CPU não suporta entrar no modo de 16 bits. Veja Wikipedia . Portanto, para oferecer suporte ao modo de 16 bits, o NTVDM (a camada de 16 bits no Windows) precisaria emular totalmente um processador de 16 bits.
Suponho que eles pesaram na reimplementação de uma camada de emulação vs usando um software de virtualização já existente (VirtualPC, VirtualBox) para lidar com isso, e foi decidido cortar o VDM.
fonte
Como os identificadores de 64 bits possuem 32 bits significativos :
No Windows, os programas passam "alças" para o sistema operacional e vice-versa (que são números que o sistema operacional usa para identificar exclusivamente um recurso específico, como uma janela).
Para oferecer suporte a programas de 16 bits, o Windows de 32 bits gera apenas identificadores com 16 bits significativos - os 16 bits superiores são ignorados pelo sistema operacional (mesmo que os programas não estejam tirando proveito desse fato). Portanto, nenhum programa pode interagir com mais de 2 16 objetos, o que é realmente bastante baixo.
No entanto, para melhorar isso, o Windows de 64 bits aumentou o número de bits significativos em um identificador para 32. Mas agora isso significa que os identificadores não podem ser passados para programas de 16 bits sem perda de informações. Portanto, os programas de 16 bits não podem ser executados no Windows de 64 bits.
fonte
EnumWindows
e há mais de 2 ^ 16 janelas no sistema?Para Windows, é porque as versões x86 do sistema operacional incluem emulação de 16 bits que lhes permite executar os processos DOS mais antigos. Nas versões x64, eles já precisam emular a execução x86 (eles chamam de WoW64) para permitir a execução de processos de 32 bits, e acho que usar o Wow64 para emular ainda mais o emulador de 16 bits causou muitos problemas.
Um punhado de processos reconhecidos de 16 bits será executado porque a emulação é codificada para lidar com eles, mas o restante não funciona porque a emulação não está incluída no x64.
Consulte "Nenhum código de 16 bits" no artigo do MSKB: http://support.microsoft.com/kb/282423
fonte
Corrija-me se estiver errado, mas, pelo que entendi, é apenas por causa do problema específico do Windows que o NTVDM está usando o modo 8086 virtual. O modo de compatibilidade nos processadores x64 (executando no modo longo) suporta o modo protegido "limpo" completo, de 16 e 32 bits do que encontrei aqui: http://en.wikipedia.org/wiki/Long_mode , mas não alguns dos 386 adições, como o modo 8086 virtual. Portanto, provavelmente não há suporte para isso porque não vale a pena reprogramar o NTVDM, o que provavelmente exigiria a adição de mais emulação, porque alguns aplicativos em modo protegido de 16 bits podem usar o 8086 virtual, mesmo que a maioria não o faça. Suponho que com bastante trabalho é possível escrever algo mais rápido que o dosbox em execução no modo longo, pois há suporte de hardware para aplicativos de 16 bits.
fonte
A situação é diferente para aplicativos Dos e aplicativos Windows de 16 bits.
Para aplicativos Dos, o problema é que o modo 8086 virtual não está disponível no modo longo. Essa é uma limitação da arquitetura da CPU.
Para aplicativos do Windows de 16 bits (que são executados no modo protegido de 16 bits), o motivo é que a MS não estava preparada para fazer o trabalho para implementar uma camada de compatibilidade adequada. O Wine é perfeitamente capaz de executar aplicativos Windows de 16 bits no Linux de 64 bits.
fonte
Acho que o motivo mais provável é que apenas uma pequena porcentagem dos proprietários de PCs realmente deseja executar aplicativos antigos de 16 bits em seu novo hardware de 64 bits. A Microsoft provavelmente achou que não valia a pena continuar a suportar aplicativos de 16 bits.
fonte