Назад | Перейти на главную страницу

Почему нет поддержки Win16 в 64-битной Windows?

Насколько я понимаю (из Википедии), набор инструкций x64 поддерживает выполнение 16-битного кода защищенного режима из длинного режима, но не может выполнять код реального режима без переключения из длинного режима, поскольку в длинном режиме отсутствует виртуальный режим 8086. Следовательно, очевидно, что приложения DOS реального режима не могут быть запущены в Win64 без программной эмуляции или динамического перевода. Однако почему была исключена поддержка приложений защищенного режима Win16, когда их поддержка кажется (по крайней мере, на первый взгляд) разумно реализуемой и включена в более новые версии Win32? Было ли это просто вопросом того, что спрос недостаточно высок, чтобы оправдать затраты на внедрение (а версия win32 уже была реализована), или есть веская техническая причина?

Я не думаю, что есть какие-либо реальные приложения с защищенным режимом Win16. Я понимаю, что Windows / 286 и более поздние версии работали в защищенном режиме (который Microsoft называет «стандартным режимом» или «расширенным режимом»), но технически приложения были приложениями реального режима.

Я помню, как читал, что для Microsoft стало неожиданностью, что команда Windows выяснила, как запускать код реального режима в операционной системе с защищенным режимом. Но аналогичного решения для запуска кода реального режима в длинном режиме, вероятно, не существует.

Итак, вопрос действительно сводится к а) почему бы не переключиться в защищенный режим (или реальный режим) для запуска приложений Win16 и б) почему бы не включить эмулятор (как на других платформах NT, отличных от x86).

Я думаю, что ответ на а) очевиден, потому что переключение между длинным режимом и другими режимами на самом деле не то, что ЦП поддерживает без перезагрузки. OS / 2 1.x имела ту же проблему с защищенным режимом и реальным режимом и предлагала только очень неэлегантное решение проблемы.

Ответ на б) сложнее, но я думаю, что это сводится к решению Microsoft, основанному на этих трех пунктах (мне нравятся списки):

  1. Мало кто до сих пор запускает 16-битные приложения.

  2. Те, кто это делает, могут запустить 32-битную Windows.

  3. Остальной рынок может покрыть сторонняя продукция.

И действительно, есть несколько решений для запуска 32-битной Windows (и, следовательно, 16-битных приложений) под 64-битной Windows, включая собственный Virtual PC Microsoft.

В целом, это было просто решение прекратить поддержку совместимости с (что Microsoft считает) устаревшей платформой, вроде удаления совместимости с 16-битной OS / 2 в Windows XP. (Это были 16-битные приложения в защищенном режиме.)

Ответ @ AndrewJBrehm хорош, но я бы добавил два момента: удаление поддержки 16-битных версий делает обслуживание 64-битных продуктов более простым и безопасным. Представьте себе количество тестовых примеров, созданных за годы для 16-разрядной подсистемы. Каждый раз, когда вы вносите изменения, вы должны следить за тем, чтобы ничего не сломалось. Больше подсистем, особенно (относительно) редко используемых, таких как 16-битная подсистема, являются хорошими целями для злоумышленников.

Используйте режим XP.

http://www.microsoft.com/windows/virtual-pc/download.aspx