Por que um sistema operacional de 64 bits não pode executar um aplicativo de 16 bits?

36

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 (isso nem sempre funciona perfeitamente)?

Para ser mais específico, eu 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 DOS antigos e de 616 bits do Windows.

Agora eu instalei a edição de 64 bits do Windows 7. Por que ela não pode mais rodar essas mesmas aplicações?

    
por fixer1234 13.05.2010 / 16:38

6 respostas

26

Pelo que entendi, é porque ao rodar no Modo Longo (x64 nativo), a própria CPU não suporta entrar no modo de 16 bits. Veja Wikipedia . Assim, para suportar o modo de 16 bits, o NTVDM (a camada de 16 bits no Windows) teria que emular completamente um processador de 16 bits.

Suponho que eles pesaram a reimplementação de uma camada de emulação versus o software de virtualização já existente (VirtualPC, VirtualBox) para lidar com isso, e foi decidido cortar o VDM.

    
por 13.05.2010 / 17:14
14

Porque as alças de 64 bits têm 32 bits significativos :

Note that 64-bit Windows does not support running 16-bit Windows-based applications.
The primary reason is that handles have 32 significant bits on 64-bit Windows.
Therefore, handles cannot be truncated and passed to 16-bit applications without loss of data.

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 de forma exclusiva um recurso específico, como uma janela).

Para suportar programas de 16 bits, o Windows somente de 32 bits gera alças com 16 bits significativos - os 16 bits superiores são ignorados pelo sistema operacional (embora os programas não devam ser executados) vantagem deste fato). Portanto, nenhum programa pode interagir com mais de 2 16 objetos, o que na verdade é um pouco 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 as alças não podem ser passadas 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.

    
por 20.01.2012 / 06:17
11

Para o Windows, é porque as versões x86 do sistema operacional incluem emulação de 16 bits que permite a execução desses processos do DOS mais antigos. Nas versões x64, eles já precisam emular a execução do x86 (eles chamam de WoW64) para permitir que processos de 32 bits sejam executados, e eu acho que usar o Wow64 para emular o emulador de 16 bits causou muitos problemas.

Um punhado de processos de 16 bits reconhecidos 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 em x64.

Consulte "Nenhum código de 16 bits" no artigo do MSKB: link

    
por 13.05.2010 / 16:45
3

Corrija-me se estiver errado, mas, no meu entender, é apenas por causa do problema específico do Windows que o NTVDM está usando o modo 8086 virtual. O modo de compatibilidade em processadores x64 (em execução no modo longo) suporta o modo protegido 'limpo' completo, 16 e 32 bits do que encontrei aqui: link , mas não algumas das 386 adições, como o modo virtual 8086. Portanto, isso não é suportado, pois não vale a pena para a Microsoft reprogramar o NTVDM, o que provavelmente exigiria mais emulação porque alguns aplicativos de modo protegido de 16 bits podem usar o 8086 virtual, mesmo que a maioria não o faça. Suponho que com trabalho suficiente é possível escrever algo mais rápido do que o dosbox rodando em modo longo, já que há suporte de hardware para aplicativos de 16 bits.

    
por 16.03.2012 / 14:14
1

Acho que o motivo mais provável é que apenas uma pequena porcentagem de proprietários de PCs realmente deseja executar aplicativos antigos de 16 bits em seu novo hardware de 64 bits. A Microsoft provavelmente percebeu que não valeria a pena continuar oferecendo suporte a aplicativos de 16 bits.

    
por 13.05.2010 / 16:57
1

A situação é diferente para aplicativos Dos e aplicativos de janelas de 16 bits.

Para aplicações Dos, o problema é que o modo virtual 8086 não está disponível no modo longo. Esta é uma limitação da arquitetura da CPU.

Para aplicativos de 16 bits do Windows (que são executados no modo protegido de 16 bits), o motivo é que o MS não estava preparado para fazer o trabalho de implementar uma camada de compatibilidade adequada. Amusingly Wine é perfeitamente capaz de rodar aplicativos Windows de 16 bits em linux de 64 bits.

    
por 07.04.2016 / 16:32