Почему это так:
- 32-разрядная ОС, установленная на 64-разрядном процессоре, может запускать старые 16-разрядные приложения,
- но если вы устанавливаете 64-битную ОС, она не может запускать эти приложения напрямую и нуждается в какой-то эмуляции (это не всегда работает идеально)?
Если быть более точным, у меня есть 64-разрядный процессор (Intel Core 2 Duo). Когда у меня были установлены Windows XP и Windows 7 (обе 32-битные), они могли запускать старые приложения для DOS и 616-битные Windows.
Теперь я установил 64-разрядную версию Windows 7. Почему она больше не может запускать те же приложения?
Ответы:
Насколько я понимаю, это потому, что при работе в длинном режиме (собственно x64), сам процессор не поддерживает переход в 16-битный режим. Смотрите Википедию . Таким образом, для поддержки 16-битного режима NTVDM (16-битный уровень в Windows) должен полностью эмулировать 16-битный процессор.
Я предполагаю, что они взвесили повторную реализацию уровня эмуляции по сравнению с использованием уже существующего программного обеспечения для виртуализации (VirtualPC, VirtualBox), чтобы решить эту проблему, и было решено сократить VDM.
источник
Поскольку 64-битные дескрипторы имеют 32 значащих бита :
В Windows программы передают «дескрипторы» ОС и наоборот (это числа, которые ОС использует для уникальной идентификации конкретного ресурса, такого как окно).
Для поддержки 16-битных программ 32-битная Windows генерирует только дескрипторы, которые имеют 16 значащих битов - 16 старших бит игнорируются ОС (даже если программы не используют этот факт в своих интересах). Таким образом, ни одна программа не может взаимодействовать с более чем 2 16 объектами, что на самом деле довольно мало.
Однако, чтобы улучшить это, 64-битная Windows увеличила количество значащих бит в дескрипторе до 32. Но теперь это означает, что дескрипторы не могут быть переданы в 16-битные программы без потери информации. Таким образом, 16-битные программы не могут работать в 64-битной Windows.
источник
EnumWindows
системе более 2 ^ 16 окон?Для Windows это потому, что версии ОС x86 включают 16-битную эмуляцию, которая позволяет им запускать эти старые процессы DOS. В версиях x64 им уже приходится эмулировать выполнение x86 (они называют его WoW64), чтобы позволить запускаться 32-разрядным процессам, и я предполагаю, что использование Wow64 для дальнейшей эмуляции 16-разрядного эмулятора вызвало слишком много проблем.
Несколько распознанных 16-битных процессов будут работать, потому что эмуляция жестко запрограммирована, но остальные не работают, потому что эмуляция не включена в x64.
Смотрите "Нет 16-битного кода" в статье MSKB: http://support.microsoft.com/kb/282423
источник
Поправьте меня, если я ошибаюсь, но, насколько я понимаю, именно из-за проблемы Windows NTVDM использует виртуальный режим 8086. Режим совместимости на процессорах x64 (работающих в длинном режиме) поддерживает полностью «чистый» защищенный режим, 16 и 32-битный из того, что я нашел здесь: http://en.wikipedia.org/wiki/Long_mode , но не некоторые из 386 дополнений, таких как виртуальный режим 8086. Таким образом, он не поддерживается, скорее всего, потому что Microsoft не окупает перепрограммирование NTVDM, что, вероятно, потребует добавления дополнительной эмуляции, потому что некоторые приложения в 16-битном защищенном режиме могут использовать виртуальный 8086, даже если большинство этого не делают. Я полагаю, что при достаточном труде можно написать что-то быстрее, чем dosbox, работающий в длинном режиме, поскольку есть аппаратная поддержка 16-битных приложений.
источник
Ситуация отличается для приложений Dos и 16-битных приложений Windows.
Для приложений Dos проблема заключается в том, что виртуальный режим 8086 недоступен в длинном режиме. Это ограничение архитектуры процессора.
Для 16-битных приложений Windows (которые работают в 16-битном защищенном режиме) причина в том, что MS не была готова выполнить работу по реализации подходящего уровня совместимости. Забавно, что Wine прекрасно способен запускать 16-битные приложения Windows на 64-битной Linux.
источник
Я думаю, что наиболее вероятная причина в том, что лишь крошечный процент владельцев ПК действительно хотят иметь возможность запускать старые 16-битные приложения на своем новом 64-битном оборудовании. Microsoft, вероятно, полагала, что не стоит продолжать поддерживать 16-битные приложения.
источник