Почему 64-разрядная ОС не может запустить 16-разрядное приложение?
Если быть более конкретным, у меня есть 64-разрядный процессор (Intel Core 2 Duo). Когда у меня были установлены Windows XP и Windows 7 (оба 32-разрядные), они могли запускать старые DOS и 616-разрядные Windows приложения.
теперь я установил 64-разрядную версию Windows 7. Почему он больше не может запускать те же приложения?
6 ответов
от моего понимания, это потому, что при работе в длинном режиме (x64 родной), сам процессор не поддерживает переход в 16-битный режим. См.Википедия. Таким образом, для поддержки 16-битного режима NTVDM (16-битный уровень в Windows) должен полностью эмулировать 16-битный процессор.
Я полагаю, что они взвесили повторную реализацию уровня эмуляции против использования уже существующего программного обеспечения виртуализации (VirtualPC, VirtualBox) для обработки этого, и было решено сократить VDM.
, потому что 64-разрядные ручки 32 бит:
обратите внимание, что 64-разрядная версия Windows не поддерживает запуск 16-разрядных приложений Windows.
Основная причина заключается в том, что дескрипторы имеют 32 значащих бита в 64-разрядной версии Windows.
Поэтому дескрипторы не могут быть усечены и переданы 16-разрядным приложениям без потери данных.
в Windows, программы проходят вокруг «ручки» к ОС и наоборот (которые являются числами, которые ОС использует для уникальной идентификации конкретного ресурса, например окна).
для поддержки 16-битных программ, 32-битная Windows только генерирует дескрипторы, которые имеют 16 значащих битов — 16 верхних битов игнорируются ОС (даже если программы не должны использовать этот факт). Поэтому программа не может взаимодействовать с более чем 2 16 объекты, что на самом деле довольно низко.
однако, улучшить это 64-разрядная версия Windows увеличила число значащих битов в дескрипторе до 32. Но теперь это означает, что хэндлы не могут быть переданы 16-битным программам без потери информации. Так что 16-битные программы не запускаются на 64-битной Windows.
для Windows, это потому, что x86 версии операционной системы включает в себя 16-разрядную эмуляцию, которая позволяет им запускать эти старые процессы DOS. В версиях x64 они уже должны эмулировать выполнение x86 (они называют это WoW64), чтобы позволить 32-разрядным процессам работать, и я думаю, что использование Wow64 для дальнейшей эмуляции 16-разрядного эмулятора вызвало слишком много проблем.
несколько распознанных 16-битных процессов будут запущены, потому что эмуляция жестко запрограммирована для их обработки, но остальные не работают, потому что эмуляция не включена в x64.
поправьте меня, если я ошибаюсь, но, насколько я понимаю, именно из-за специфической для Windows проблемы NTVDM использует виртуальный режим 8086. Режим совместимости на процессорах x64 (работает в длинном режиме) поддерживает полный «чистый» защищенный режим, 16 и 32 бит от того, что я нашел здесь:http://en.wikipedia.org/wiki/Long_mode, но не некоторые из 386 дополнений, таких как виртуальный режим 8086. Таким образом, он не поддерживается, скорее всего, потому, что он не окупается для Microsoft, чтобы перепрограммировать NTVDM, что, вероятно, потребует добавления дополнительной эмуляции, поскольку некоторые 16-разрядные приложения защищенного режима могут использовать virtual 8086, даже если большинство из них этого не делают. Я полагаю, что с достаточным трудом можно написать что-то быстрее, чем dosbox, работающий в длинном режиме, так как есть аппаратная поддержка 16-битных приложений.
Я думаю, что наиболее вероятной причиной является то, что лишь небольшой процент владельцев ПК на самом деле хотят иметь возможность запускать старые 16-битные приложения на их новом 64-битном оборудовании. Microsoft, вероятно, полагал, что это не стоило их, продолжая поддерживать 16-битные приложения.
ситуация отличается для приложений Dos и 16-битных приложений windows.
для Dos приложений проблема в том, что режим virtual 8086 недоступен в режиме long. Это ограничение архитектуры ЦП.
для 16-битных приложений Windows (которые работают в 16-битном защищенном режиме) причина в том, что MS не была готова выполнить работу по реализации подходящего уровня совместимости. Забавно вино прекрасно работал с 16 битных Windows приложений на 64-разрядных Linux.
КАК ВКЛЮЧИТЬ 16 — КАК — 2022
Видео: Как перейти с 32 на 64 битную Windows? Легко и без потерь! (Июнь 2022).
Windows 10 включает ряд параметров для запуска старых программ, не предназначенных для операционной системы. Ранее мы рассматривали использование инструментов для устранения проблем совместимости приложений, позволяющих изменить программу, чтобы она думала, что она устанавливается в поддерживаемой версии Windows. Гораздо более старые приложения, которые предшествуют Windows 95, иногда требуют немного больше работы. В частности, 16-разрядные приложения не поддерживаются в 64-разрядной версии Windows 10, поскольку в операционной системе отсутствует 16-разрядная подсистема. Это может даже повлиять на 32-разрядные приложения, использующие 16-разрядный установщик.
Решение для такого сценария состоит в том, чтобы запустить операционную систему в более старой версии Windows, что может потребовать настройки виртуальной машины. Если вы по-прежнему используете 32-разрядную версию Windows 10, вы можете получить лучшее из обоих миров, включив 16-разрядную подсистему. Поскольку будущее Microsoft направлено на 64-разрядные вычисления, компания сводит к минимуму свою поддержку многих устаревших компонентов в Windows. Лучший способ добавить 16-битную поддержку в Windows 10 требует работы с командной строкой.
Настройка поддержки 16-битных приложений в Windows 10
16-битная поддержка потребует включения функции NTVDM. Для этого нажмите клавишу Windows + R, затем введите: optionfeatures.exe и нажмите Enter. Разверните Legacy Components, затем отметьте NTVDM и нажмите OK.

Следующим шагом является установка функции через командную строку. Нажмите клавишу Windows + X, затем нажмите « Командная строка» («Администратор»). В командной строке введите следующую команду:
Запустится мастер добавления функций для NTVDM. Нажмите Установить эту функцию, чтобы завершить установку. Затем перезагрузите компьютер, если требуется.

Теперь поддержка 16-битных приложений включена. Вы можете продолжить установку приложения в обычном режиме.

Некоторые приложения могут требовать дополнительных разрешений. Просмотрите нашу статью о совместимости для получения дополнительной информации о настройке этих параметров.
Нам интересно, какие типы 16-битных приложений вы все еще используете. Оставьте комментарий ниже и дайте нам знать. Кроме того, если у вас возникли какие-либо проблемы с ним, обратитесь к нашим новым и улучшенным форумам по Windows 10 для дополнительной поддержки.
Как включить JavaScript в Firefox

Включите или отключите JavaScript на странице конфигурации about: Firefox. JavaScript необходим для правильной работы многих сайтов.
Как включить мониторные динамики

Использование встроенных мониторных громкоговорителей вместо автономных громкоговорителей поможет вам сэкономить деньги, рабочее место и время настройки, хотя, как правило, жертвой звука будет как минимум минимальная .
Простые вопросы: что такое trueplay, как он работает и как его включить?

Что такое TruePlay или игровой монитор в Windows 10? Что это делает для геймеров? Как включить это? Как работает этот режим анти-мошенничества?
Почему в 64-битных операционных системах Cant работают 16-битные приложения?
Когда компьютеры начали использовать современную 64-разрядную архитектуру, пользователи вскоре поняли, что запуск этих старых 16-разрядных приложений не будет работать. Почему 64-разрядные машины не могут запускать 16-разрядные приложения?
Ответ на этот вопрос может быть запутанным, в зависимости от того, кого вы спрашиваете. Во-первых, на самом деле невозможно запустить 16-битные приложения. Это просто сложно. Во-вторых, причина этой трудности заключается как в архитектуре процессора, так и в операционной системе.
Смущены еще? Не волнуйся, ты не один. Но к тому времени, как вы дойдете до конца этой статьи, вы больше не будете смущены.
История архитектуры процессора
Я знаю, последнее, что вы хотите прочитать, это урок истории, верно? Не волнуйтесь, это короткий. Также важно понять, почему 64-битные системы не могут запускать 16-битные приложения.
Если вы пережили 80-е и 90-е годы, то вы, вероятно, помните тех старых 16-битных динозавров, которые, как считали все, были передовыми технологиями.

В то время это было. Эти старые машины управляли Intel 8086 процессор в 1978 году. Процессор смог получить доступ к адресному пространству размером 1 Мбайт с помощью 16-битной адресации. С более ранними машинами, работающими на 64 КБ памяти, это было огромным достижением и ознаменовало начало новой эры в области персональных компьютеров.
В этом режиме (называется Реальный режим), часть была зарезервирована для ОЗУ, а остальная часть использовалась BIOS и компьютерным оборудованием, таким как графическая карта.
Чуть позже появилось еще одно усовершенствование в архитектуре ЦП с процессором 80286, способным адресовать 16 МБ с использованием 16-разрядной адресации. С архитектурой 286 появился «Защищенный режим» с функциями, которые не только позволяли адресовать больше памяти, но и многозадачны. Запуск старых 16-битных приложений в «реальном режиме» не всегда был простым, но это было возможно.
Конец 16-битного, вроде…
В 1985 году Intel представила процессор следующего поколения: Intel 386. Это был первый процессор Intel, который мог одновременно обрабатывать 32-битную память и получать доступ к 4 ГБ адресуемой памяти. В то время это показалось пользователям компьютеров большим прорывом. Компьютерные игры были на пороге своего расцвета.

Наряду с появлением 32-битной архитектуры вышла расширенная версия Защищенный режим это не только позволяло получить доступ к большему объему памяти, но и включало в себя набор функций, позволяющих программному обеспечению помечать систему как для 16-битного, так и для 32-битного кода. Это стало возможным благодаря тому, что известно как Виртуальный 86 режим, по сути, это была встроенная виртуализированная система 8086.
Как вы можете видеть, от одной эволюции архитектуры ЦП к следующей, и аппаратное обеспечение (программирование ЦП), и программное обеспечение (операционные системы и приложения) обеспечивали обратную совместимость для всех тех пользователей, у которых все еще было очень старое программное обеспечение, которое они хотели запустить. Для отдельных пользователей компьютеров это было полезно, но для многих корпораций и малых предприятий это было важно для устаревших систем.
64-битная архитектура все испортила
Ограничение в 4 ГБ адресуемой памяти оставалось опорой для 32-битных систем в течение многих лет. Однако с изобретением 64-битных процессоров произошел еще один прорыв. Эти системы включили новый режим (известный как Длинный режим) способен обрабатывать до 16 миллионов терабайт памяти. Вероятно, пройдет много времени, прежде чем это станет ограничивающим фактором для компьютерных приложений.
Тем не менее, с этим огромным прогрессом пришел значительный компромисс. Когда пользователи пытались запустить 16-разрядные приложения, для которых требовался давно поддерживаемый «реальный режим» или «виртуальный режим 8086», они обнаружили сообщение об ошибке «Program.exe не является допустимым приложением Win32».

Это было неприятно, но это был не конец света. Пользователи могут использовать эмуляторы
или установите виртуальные машины
32-разрядная архитектура и операционные системы, поддерживающие устаревшие 16-разрядные приложения.
Поэтому, хотя для 64-разрядных систем «невозможно» запускать 16-разрядные приложения MS-DOS, пользователи не могут сделать это, используя обходной путь. Но почему это случилось?
64-битная архитектура удаляет NTVDM
На протяжении многих лет 32-разрядные процессоры каждого поколения прилагали немало усилий для того, чтобы система могла обрабатывать более старые 16-разрядные приложения DOS. Это было сделано с использованием так называемой NTVDM или NT Virtual DOS Machine.
Это 32-разрядное приложение работало в операционной системе Windows и имитировало архитектуру 486, способную обрабатывать 16-разрядную адресацию с использованием виртуальной 8086. К сожалению, «длинная» адресация не смогла справиться с этим безопасно. Вместо этого потребовалось бы эмулировать полноценный процессор 8086 просто для поддержки запуска приложений DOS.

Microsoft явно приняла решение прекратить эту работу, чтобы поддержать быстрый выпуск своей первой 64-разрядной операционной системы. На своей странице поддержки Microsoft четко заявляет, что «16-разрядные утилиты MS-DOS и Microsoft Windows 3.x не запускаются».
Нет извинения. Это просто не поддерживается.
Поскольку на рынке имеется множество продуктов для виртуализации, способных достичь этого в любом случае, Microsoft явно не чувствовала, что в ее интересах было заново изобрести колесо.
Как запускать 16-битные приложения в 64-битных системах
Тот факт, что запуск 16-разрядных приложений DOS изначально не поддерживается в 64-разрядных системах Windows, не означает, что это невозможно. Вам просто нужно установить некоторые дополнительные инструменты для настройки.
Если вам нравятся классические игры для DOS
или использовать любые другие ретро-приложения из старых добрых времен вычислительной техники, есть варианты. Вот четыре способа их запуска на новом компьютере с Windows.
1. Играйте в Ретро Игры с DOSBox
Один из самых простых способов запуска старых приложений DOS на вашем компьютере — использовать эмулятор. Одним из самых популярных из них является DOSBox.
Кристиан подробно рассказал, как установить и настроить DOSBox для запуска старых ретро-игр
на вашем компьютере с Windows.

Самое замечательное в этом то, что большинство этих игр настолько стары, что их считают заброшенными
, так что вы можете легально скачать и играть в них бесплатно.
2. Запустите приложения внутри VirtualBox
Поскольку операционные системы, такие как Windows XP и Windows 7, могут запускать 16-разрядные приложения собственными силами, вы можете запускать те же приложения в своей 64-разрядной системе, создавая виртуальную машину с одной из этих операционных систем.
VirtualBox — одно из самых известных и простых в настройке приложений для этого. У нас есть полное руководство по настройке и использованию VirtualBox
Таким образом, вы можете начать использовать этот подход прямо сейчас.

Просто убедитесь, что выбрали правильную операционную систему для установки. Придерживайтесь Windows 7 или более ранней версии, и вы сможете мгновенно загрузить и установить старые приложения DOS в вашей виртуальной системе.
3. Используйте Linux
Что бы вы ни говорили о Linux, единственное, на что имеет право большинство дистрибутивов Linux, — это поддержка 16-битных приложений. В дистрибутивах с ядром PAE вы не ограничены 4 ГБ 32-битных систем, поэтому другой дистрибутив — это запуск соответствующего дистрибутива Linux в качестве двойной загрузки в вашей системе.

Для этого есть два варианта: решение с двойной загрузкой или виртуальная машина.
, Или вы можете просто полностью сбросить Windows и перейти на Linux
, Все, что работает для вас.
4. Используйте Эмуляторы
DOSBox — не единственный эмулятор, доступный для запуска старых приложений DOS. Есть много отличных эмуляторов, которые работают так же хорошо. Это особенно верно, если вы геймер.
Кристиан рассказал, как эмулировать Commodore Amiga, Raspberry Pi, Android и даже классические SNES на любом ПК.

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