Почему 64-разрядная ОС не может запустить 16-разрядное приложение?

Почему:

  • 32-разрядная ОС, при установке на 64-разрядном процессоре, может запускать старые 16-разрядные приложения,
  • но если вы устанавливаете 64-битную ОС, она не может запускать эти приложения напрямую и нуждается в какой-то эмуляции (это не всегда работает идеально)?

Если быть более конкретным, у меня есть 64-разрядный процессор (Intel Core 2 Duo). Когда у меня были установлены Windows XP и Windows 7 (оба 32-разрядные), они могли запускать старые DOS и 616-разрядные Windows приложения.

теперь я установил 64-разрядную версию Windows 7. Почему он больше не может запускать те же приложения?

9
задан fixer1234
25.04.2023 4:21 Количество просмотров материала 3064
Распечатать страницу

6 ответов

от моего понимания, это потому, что при работе в длинном режиме (x64 родной), сам процессор не поддерживает переход в 16-битный режим. См.Википедия. Таким образом, для поддержки 16-битного режима NTVDM (16-битный уровень в Windows) должен полностью эмулировать 16-битный процессор.

Я полагаю, что они взвесили повторную реализацию уровня эмуляции против использования уже существующего программного обеспечения виртуализации (VirtualPC, VirtualBox) для обработки этого, и было решено сократить VDM.

26
отвечен Matt Sieker 2023-04-26 12:09

, потому что 64-разрядные ручки 32 бит:

обратите внимание, что 64-разрядная версия Windows не поддерживает запуск 16-разрядных приложений Windows.

Основная причина заключается в том, что дескрипторы имеют 32 значащих бита в 64-разрядной версии Windows.

Поэтому дескрипторы не могут быть усечены и переданы 16-разрядным приложениям без потери данных.

в Windows, программы проходят вокруг "ручки" к ОС и наоборот (которые являются числами, которые ОС использует для уникальной идентификации конкретного ресурса, например окна).

для поддержки 16-битных программ, 32-битная Windows только генерирует дескрипторы, которые имеют 16 значащих битов -- 16 верхних битов игнорируются ОС (даже если программы не должны использовать этот факт). Поэтому программа не может взаимодействовать с более чем 216 объекты, что на самом деле довольно низко.

однако, улучшить это 64-разрядная версия Windows увеличила число значащих битов в дескрипторе до 32. Но теперь это означает, что хэндлы не могут быть переданы 16-битным программам без потери информации. Так что 16-битные программы не запускаются на 64-битной Windows.

14
отвечен Mehrdad 2023-04-26 14:26

для Windows, это потому, что x86 версии операционной системы включает в себя 16-разрядную эмуляцию, которая позволяет им запускать эти старые процессы DOS. В версиях x64 они уже должны эмулировать выполнение x86 (они называют это WoW64), чтобы позволить 32-разрядным процессам работать, и я думаю, что использование Wow64 для дальнейшей эмуляции 16-разрядного эмулятора вызвало слишком много проблем.

несколько распознанных 16-битных процессов будут запущены, потому что эмуляция жестко запрограммирована для их обработки, но остальные не работают, потому что эмуляция не включена в x64.

см. "Нет 16-разрядного кода" в МСКБ статьи: http://support.microsoft.com/kb/282423

11
отвечен SqlRyan 2023-04-26 16:43

поправьте меня, если я ошибаюсь, но, насколько я понимаю, именно из-за специфической для Windows проблемы NTVDM использует виртуальный режим 8086. Режим совместимости на процессорах x64 (работает в длинном режиме) поддерживает полный "чистый" защищенный режим, 16 и 32 бит от того, что я нашел здесь:http://en.wikipedia.org/wiki/Long_mode, но не некоторые из 386 дополнений, таких как виртуальный режим 8086. Таким образом, он не поддерживается, скорее всего, потому, что он не окупается для Microsoft, чтобы перепрограммировать NTVDM, что, вероятно, потребует добавления дополнительной эмуляции, поскольку некоторые 16-разрядные приложения защищенного режима могут использовать virtual 8086, даже если большинство из них этого не делают. Я полагаю, что с достаточным трудом можно написать что-то быстрее, чем dosbox, работающий в длинном режиме, так как есть аппаратная поддержка 16-битных приложений.

3
отвечен MichaelS 2023-04-26 19:00

Я думаю, что наиболее вероятной причиной является то, что лишь небольшой процент владельцев ПК на самом деле хотят иметь возможность запускать старые 16-битные приложения на их новом 64-битном оборудовании. Microsoft, вероятно, полагал, что это не стоило их, продолжая поддерживать 16-битные приложения.

1
отвечен Stephen C 2023-04-26 21:17

ситуация отличается для приложений Dos и 16-битных приложений windows.

для Dos приложений проблема в том, что режим virtual 8086 недоступен в режиме long. Это ограничение архитектуры ЦП.

для 16-битных приложений Windows (которые работают в 16-битном защищенном режиме) причина в том, что MS не была готова выполнить работу по реализации подходящего уровня совместимости. Забавно вино прекрасно работал с 16 битных Windows приложений на 64-разрядных Linux.

1
отвечен plugwash 2023-04-26 23:34

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх