Виртуальная машина DOS - Virtual DOS machine

Виртуальная машина DOS (VDM) относится к запуску 16-бит / 32-бит ДОС под 32-битной Windows через COMMAND.COM.

Обзор

Виртуальные машины DOS могут работать либо исключительно через типичные программная эмуляция методы (например, динамическая перекомпиляция ) или можно положиться на виртуальный режим 8086 из Intel 80386 процессор, что позволяет реальный режим Программное обеспечение 8086 для работы в контролируемой среде путем перехвата всех операций, связанных с доступом к защищенному оборудованию, и их перенаправления в обычную операционную систему (как исключения ). Затем операционная система может выполнить эмуляцию и возобновить выполнение программного обеспечения DOS.

Модули VDM обычно также поддерживают запуск 16- и 32-битный защищенный режим программного обеспечения (Расширители DOS ), который должен соответствовать Интерфейс защищенного режима DOS (ДПМИ).[1]

Когда программе DOS, работающей внутри модуля VDM, требуется доступ к периферийному устройству, Windows либо разрешит это напрямую (редко), либо представит программе DOS драйвер виртуального устройства (VDD), который эмулирует оборудование с помощью функций операционной системы. VDM будет систематически иметь эмуляции для Intel 8259A прерывать контроллеры, 8254 микросхемы таймера, контроллер DMA 8237 и др.[1]

Одновременный режим эмуляции DOS 8086

В январе 1985 г. Цифровые исследования совместно с Intel анонсировали Параллельный DOS 286 1.0,[2] версия Параллельная DOS способен запускать программы DOS в реальном режиме в 80286 в защищенном режиме.[2] Однако метод, разработанный для процессоров степпинга B-1, прекратил работу в мае 1985 г. над C-1 и последующими степпингами процессора незадолго до того, как Digital Research собиралась выпустить продукт. Хотя со степпингом E-1 Intel начала решать проблемы в августе 1985 года, так что «режим эмуляции 8086» Digital Research снова работал с использованием недокументированных ЗАГРУЗИТЬ инструкция процессора,[3][4] это было слишком медленно, чтобы быть практичным. Микрокод Изменения для степпинга E-2 снова улучшили скорость.[5][6] Эту раннюю реализацию можно рассматривать как предшественницу реальных виртуальных машин DOS.

В конце концов, Concurrent DOS 286 был преобразован из потенциальной настольной операционной системы в FlexOS 286 для промышленного использования в 1986 г.[7][8] Он также был лицензирован IBM для них 4680 ОС в 1986 г.[9][10]

Когда Intel 80386 с его виртуальным режимом 8086 стал доступен (в виде образцов с октября 1985 г. и в количестве с июня 1986 г.), Digital Research переключилась на его использование для запуска программ DOS в реальном режиме на виртуальных машинах DOS в защищенном режиме под Параллельная DOS 386 1.0 (Февраль 1987 г.)[11] и FlexOS 386 1.0 (Июнь 1987 г.).[12] Однако архитектура этих многопользовательских и многозадачных операционных систем с защищенным режимом сама по себе не была основана на DOS.

Параллельная DOS 386 позже был разработан, чтобы стать Многопользовательская DOS (с 1991 г.) и РЕАЛЬНЫЙ / 32 (с 1995 г.). FlexOS 386 позже стал 4690 ОС в 1993 г.

VDM на базе DOS

В отличие от этих операционных систем с защищенным режимом, DOS по умолчанию является операционной системой реального режима, переключаясь в защищенный режим и режим виртуального 86 только от имени менеджеров памяти и расширителей DOS, чтобы обеспечить доступ к расширенной памяти или отображению в память в первый мегабайт, доступный для обычных программ DOS.

Модули VDM на базе DOS появились вместе с Microsoft Окна / 386 2.01 в сентябре 1987 г.[13] Виртуальные машины DOS на базе DOS также присутствовали в Windows 3.0, 3,1x и Windows для рабочих групп 3.1x работает в 386 Расширенный режим а также в Windows 95, 98, 98 SE и МНЕ. Одной из характеристик этих решений, работающих поверх DOS, является то, что структура памяти, показанная внутри виртуальных машин DOS, представляет собой виртуальные экземпляры системы DOS, а конфигурация драйвера DOS запускается до загрузки многозадачности, и что запросы, которые не могут быть обработаны в защищенном режиме. передаются в системный домен для выполнения базовой системой DOS.

Подобно расширенному режиму Windows 3.x 386 в архитектуре, EMM386 3.xx из Novell DOS 7,[1][14] Caldera OpenDOS 7.01,[14][15] DR-DOS 7.02[16] (и более поздние версии) также используют модули VDM на базе DOS для поддержки упреждающей многозадачности нескольких приложений DOS, когда EMM386 / MULTI опция используется.[14][15][16] Этот компонент находится в разработке на Цифровые исследования / Novell с 1991 года[nb 1] под кодовым названием "Владивар" (изначально отдельный драйвер устройства KRNL386.SYS[1][14] вместо модуля EMM386). Хотя в первую очередь он разработан для следующей основной версии DR DOS, выпущенной как Novell DOS 7 в 1994 году,[1][14] он также использовался в никогда не выпускавшемся ДР ДОС "Пантера" и "Звездный путь "Проект 1992/1993.

OS / 2 MVDM

VDM, называемые MVDM (Multiple Virtual DOS Machine), используются в OS / 2 2.0 а позже с 1992 г.[1][4] OS / 2 MVDM значительно мощнее, чем НТВДМ. Например, поддерживаются блочные устройства, и различные версии DOS можно загружать в OS / 2 MVDM.[17] В то время как модуль DOS OS / 2 1.x был основан на DOS 3.0, модули MVDM OS / 2 2.x эмулируют DOS 5.0.[1]

Полная интеграция Windows 3.1 и позже Win32s приложений в OS / 2 - это концепция, внешне похожая на бесшовную интеграцию Режим XP на основе Виртуальный ПК с Windows в Windows 7. Перенаправитель в «гостевом» VDM или NTVDM разрешает доступ к дискам OS / 2 или NT «хоста». Приложения в «гостевой» могут использовать именованные каналы для общения со своим «хозяином».[18]

Из-за технических ограничений приложения DOS и 16-разрядные Windows под OS / 2 не могли видеть более 2 ГБ места на жестком диске,[19] это было исправлено в ArcaOS 5.0.4.[20]

Windows NTVDM

COMMAND.COM работает в НТВДМ Windows 8

НТВДМ - системная составляющая всех IA-32 редакции Windows NT семейство с 1993 года, которое позволяет запускать 16-битные Windows и 16-битные / 32-битные приложения DOS. Он не входит в 64-битные версии. 32-разрядный исполняемый файл пользовательского режима Windows NT, который составляет основу единой DOS (или Windows 3.x ) окружающая среда называется ntvdm.exe.[1]

Для выполнения программ DOS NTVDM загружает NTIO.SYS который, в свою очередь, загружает NTDOS.SYS, который выполняет измененный COMMAND.COM для запуска приложения, переданного NTVDM в качестве аргумента командной строки. 16-битные системные файлы реального режима - это урезанные производные их MS-DOS 5.0 эквиваленты IO.SYS, MSDOS.SYS и COMMAND.COM[1] со всеми зашитыми предположениями о Файловая система FAT удален и с помощью неверный код операции 0xC4 0xC4 в боп вниз в 32-битный NTVDM для обработки запросов.[1] Первоначально NTDOS сообщала программам версию DOS 30.00,[1] но вскоре это было изменено, чтобы сообщить о версии 5.00 на ИНТ 21ч / Ач = 30ч и 5,50 при ИНТ 21ч / AX = 3306ч чтобы позволить большему количеству программ работать без изменений.[1] Это верно даже для новейших выпусков Windows; многие дополнительные функции и команды MS-DOS, представленные в версиях MS-DOS 6.x и в Windows 9x не хватает.

Все 16-битные приложения Windows по умолчанию запускаются в собственном потоке в рамках одного процесса NTVDM. Хотя сам NTVDM представляет собой 32-битный процесс и выполняет многозадачность с упреждением по отношению к остальной части системы, 16-битные приложения в нем совместно выполняют многозадачность по отношению друг к другу. Когда опция «Запускать в отдельном пространстве памяти» отмечена в Пробег box или файл ярлыка приложения, каждое 16-разрядное приложение Windows получает свой собственный процесс NTVDM и, следовательно, является многозадачным по отношению к другим процессам, включая другие 16-разрядные приложения Windows. NTVDM имитирует вызовы и таблицы BIOS, а также ядро ​​Windows 3.1 и 16-битные заглушки API.[21] 32-битный Вау слой перевода thunks 16-битные процедуры API.

32-битная эмуляция DOS присутствует для Интерфейс защищенного режима DOS (DPMI) и 32-битный доступ к памяти. Этот уровень преобразует необходимые вызовы расширенной и расширенной памяти для функций DOS в вызовы памяти Windows NT. wowexec.exe слой эмуляции, имитирующий 16-битную Windows. Windows 2000 и Windows XP добавлен Sound Blaster 2.0 эмуляция.[22] 16-битные драйверы виртуальных устройств и ДОС драйверы блочных устройств (например, RAM-диски) не поддерживаются. Межпроцессного взаимодействия с другими подсистемами может происходить через OLE, DDE и именованные каналы.

Поскольку виртуальный режим 8086 недоступен на не-x86 -процессоры (точнее, MIPS, DEC Alpha, и PowerPC ) NTVDM вместо этого был реализован как полноценный эмулятор в этих версиях NT с использованием кода, лицензированного у Insignia's SoftPC.[23][1] Вплоть до Windows NT 3.51, была доступна только эмуляция 80286. С Windows NT 4.0, 486 добавлена ​​эмуляция.[24]

Команды

Следующий список команды является частью подсистемы Windows XP MS-DOS.[18]

Проблема безопасности

В январе 2010 г. Google исследователь безопасности Тэвис Орманди выявили серьезный недостаток безопасности в реализации VDM в Windows NT, который позволил непривилегированным пользователям повышать свои привилегии до СИСТЕМА уровень, отмеченный как применимый к безопасности всех x86 версий ядра Windows NT с 1993 года. Это включало все 32-разрядные версии Windows NT, 2000, XP, Server 2003, Vista, Server 2008 и Windows 7.[25] Орманди опубликовал экспериментальный эксплойт за уязвимость.[26] До выпуска исправления безопасности Microsoft обходным путем для этой проблемы было отключение поддержки 16-битных приложений, что препятствовало запуску старых программ (написанных для DOS и Windows 3.1). 64-битные версии Windows не пострадали, поскольку подсистема NTVDM не установлена ​​по умолчанию.[27][28] После того, как исправления безопасности Microsoft были применены к уязвимым операционным системам, VDM можно было безопасно повторно включить.[nb 2]

Ограничения

Ограничение существует в 16-разрядной подсистеме Windows XP (но не в более ранних версиях Windows NT) из-за повышенного лимита на сеанс для объектов GDI, из-за которого дескрипторы GDI смещаются вправо на два бита при преобразовании их из От 32 до 16 бит.[29] В результате фактический дескриптор не может быть больше 14 бит, и, следовательно, 16-битные приложения, которые обслуживаются дескриптором больше 16384 из-за сбоя системы GDI, завершаются с сообщением об ошибке.[29]

В x86-64 ЦПУ, виртуальный режим 8086 доступен в качестве подрежима только в его устаревшем режиме (для работы с 16- и 32-разрядными операционными системами), но не в собственном 64-разрядном длинный режим.[30]

NTVDM не поддерживается в версиях Windows x86-64,[31] включая программы DOS,[32] поскольку NTVDM использует режим ЦП VM86 вместо таблицы локальных дескрипторов для включения 16-битного сегмента, необходимого для адресации[33] и AAarch64 потому что Microsoft не выпустила полный эмулятор для этого несовместимого набора инструкций, как это было для предыдущей несовместимой архитектуры. Однако их все еще можно запускать, используя виртуализация программное обеспечение, например Режим Windows XP в Windows 7, или путем установки NTVDMx64, неофициального порта более старой эмулированной реализации NTVDM, которая была предоставлена ​​на NT 4 для платформ, отличных от x86.[23] Другой вариант - OTVDM (WineVDM), 16-битный интерпретатор Windows, основанный на МАМЕ эмуляция i386 и 16-битная часть популярного уровня совместимости с Windows Вино.[34]

В общем, VDM и подобные технологии не позволяют удовлетворительно запускать большинство старых игр DOS на современных компьютерах. Эмуляция предусмотрена только для самых основных периферийных устройств, часто реализована не полностью.[нужна цитата ]. Например, эмуляция звука в NTVDM очень ограничена. Версии Windows семейства NT обновляют реальный экран только несколько раз в секунду, когда программа DOS пишет на нем, и они не эмулируют графические режимы с более высоким разрешением. Поскольку программное обеспечение в основном работает на скорости центрального процессора, все петли времени истекает преждевременно. Это либо заставляет игру работать слишком быстро, либо заставляет программное обеспечение даже не замечать эмулируемые аппаратные периферийные устройства, потому что оно недостаточно долго ждет ответа.

Смотрите также

Примечания

  1. ^ KRNL386.SYS из ДР ДОС "Пантера" имеет авторские строки "1991,1992".
  2. ^ Отключенный VDM можно снова включить, вернув соответствующий раздел реестра на "HKEY_LOCAL_MACHINE SOFTWARE Policies Microsoft Windows AppCompat VDMDisallowed" = dword: 00000000.

Рекомендации

  1. ^ а б c d е ж грамм час я j k л м Шульман, Эндрю; Браун, Ральф Д.; Макси, Дэвид; Michels, Raymond J .; Кайл, Джим (1994) [ноябрь 1993]. Недокументированная DOS: руководство программиста по зарезервированным функциям и структурам данных MS-DOS - расширено за счет включения MS-DOS 6, Novell DOS и Windows 3.1 (2-е изд.). Ридинг, Массачусетс: Эддисон Уэсли. ISBN  0-201-63287-X. ISBN  978-0-201-63287-3. (xviii + 856 + vi страниц, 3,5-дюймовая дискета) Ошибки: [1][2]
  2. ^ а б "Параллельные вызовы DOS-286 Unix". Журнал BYTE. 10 (5): 375-377. Май 1985 г. В архиве из оригинала на 2018-09-14. Получено 2017-01-23. [3]
  3. ^ «Параллельный DOS 68K 1.2 - Комплект разработчика для Motorola VME / 10 - Диск 2». 1986-08-06 [1986-04-08]. Получено 2018-09-13. (NB. Этот пакет также включает некоторые файлы заголовков из Параллельный DOS 286, включая STRUCT.H, прямо упоминающий ЗАГРУЗИТЬ для "эмуляции 8086".)
  4. ^ а б Deitel, Harvey M .; Коган, Майкл С. (1992). Дизайн OS / 2. Эддисон-Уэсли. ISBN  0-201-54889-5.
  5. ^ Фостер, Эдвард (1985-05-13). «Super DOS ожидает нового 80286 - Concurrent DOS 286 - отложена до тех пор, пока Intel не обновит чип - предлагает мощность Xenix и совместимость с IBM PC». InfoWorld. InfoWorld Media Group. 7 (19): 17–18. ISSN  0199-6649. В архиве из оригинала на 2019-04-03. Получено 2019-04-03.
  6. ^ Фостер, Эдвард (1985-08-26). «Intel представляет новый чип 80286 - будущее DRI Concurrent DOS 286 все еще неясно после исправления процессора». InfoWorld. InfoWorld Media Group. 7 (34): 21. ISSN  0199-6649. В архиве из оригинала на 2019-04-03. Получено 2019-04-03.
  7. ^ Приложение FlexOS для компьютеров на базе Intel iAPX 286 (PDF). 1.3 (1-е изд.). Digital Research, Inc. Ноябрь 1986 г. В архиве из оригинала на 2019-04-03. Получено 2018-08-14.
  8. ^ ЦБ РФ, изд. (1987-01-15). «Digital Research запускает производственную операционную систему реального времени FlexOS 286». Обзор компьютерного бизнеса. В архиве из оригинала 18.01.2013. Получено 2018-09-15.
  9. ^ Кальво, Мелисса; Форбс, Джим (1986-02-10). «IBM будет использовать операционную систему DRI». InfoWorld . В архиве из оригинала на 2019-04-03. Получено 2011-09-06.
  10. ^ «IBM выбирает Concurrent DOS-286 для розничной системы PC AT» (PDF). Европейский обзор. Цифровые исследования (18): 1 марта 1986 г. В архиве (PDF) из оригинала на 2019-04-03. Получено 2018-09-15.
  11. ^ Вайс, Иржи (1987-02-16). «DRI для выпуска многопользовательской операционной системы 80386». InfoWorld. 9 (7): 1, 8. В архиве из оригинала на 2019-04-03. Получено 2017-01-22. [4]
  12. ^ ЦБ РФ, изд. (1987-06-03). «Цифровые исследования демонстрируют FlexOS 386 в реальном времени». Обзор компьютерного бизнеса. В архиве из оригинала от 28.06.2013. Получено 2011-09-06.
  13. ^ Некасек, Михал (21.05.2011). "Окна / 386 2.01". OS / 2 Музей. В архиве из оригинала на 2019-04-02. Получено 2019-04-02.
  14. ^ а б c d е Пол, Матиас Р. (1997-07-30) [1994-05-01]. NWDOS-TIPs - Советы и приемы для Novell DOS 7, с подробностями, исправлениями и обходными путями Blick auf undokumentierte. MPDOSTIP. Выпуск 157 (на немецком языке) (3-е изд.). В архиве из оригинала от 03.11.2016. Получено 2014-09-06. (NB. NWDOSTIP.TXT - это комплексная работа над Novell DOS 7 и OpenDOS 7.01, включая описание многих недокументированных функций и внутренних компонентов. Он является частью еще более обширной коллекции автора MPDOSTIP.ZIP, поддерживаемой до 2001 года и распространенной в то время на многих сайтах. Предоставленная ссылка указывает на старую версию файла NWDOSTIP.TXT, преобразованную в HTML.) mpdostip.zip
  15. ^ а б Серия справочников для разработчиков OpenDOS - Руководство по многозадачному API OpenDOS - Руководство программиста. ВЕЛИКОБРИТАНИЯ: Caldera, Inc. Август 1997 г. Кальдера Деталь № 200-ДОМГ-004. Архивировано из оригинал на 2017-09-10. Получено 2016-11-02.
  16. ^ а б Caldera DR-DOS 7.02 Руководство пользователя. Caldera, Inc. 1998 [1993, 1997]. Архивировано из оригинал на 2016-11-05. Получено 2014-09-06.
  17. ^ «Методы настройки оболочки рабочего места OS / 2» (PDF). IBM Красная книга. 1994. С. 68–80. Архивировано из оригинал (PDF) на 2012-03-20. Получено 2011-07-05.
  18. ^ а б "Команды подсистемы MS-DOS". Microsoft.
  19. ^ «Почему мои сеансы DOS и Win-OS / 2 не могут видеть более 2 ГБ свободного места?». Получено 2020-09-03.
  20. ^ «Примечания к выпуску ArcaOS». Получено 2020-09-03.
  21. ^ «Глава 27 - Совместимость с Windows и миграция». Комплект ресурсов Windows NT 4.0. Microsoft. Получено 2017-07-19.
  22. ^ Шульман, Джерольд (2002-12-04). «Как мне устранить неполадки программ MS-DOS, работающих в Windows XP?». ITPro Windows. Получено 2017-07-19.
  23. ^ а б "leecher1337 / ntvdmx64". GitHub. Получено 2018-11-03.
  24. ^ «ИНФОРМАЦИЯ: как Windows обрабатывает вычисления с плавающей запятой». Служба поддержки Microsoft. 21 ноября 2006 г. Архивировано из оригинал на 2013-02-24. Получено 2017-07-19.
  25. ^ «Бюллетень по безопасности Microsoft MS10-015 - Важно: уязвимости в ядре Windows делают возможным несанкционированное получение прав (977165)». Техцентр безопасности. Microsoft. 2010-03-17. Получено 2012-11-02.
  26. ^ Орманди, Тэвис (19 января 2010 г.). "Обработчик прерываний Microsoft Windows NT #GP позволяет пользователям переключать стек ядра". CVE-2010-0232. Полное раскрытие. Получено 2013-04-13.
  27. ^ Фаррелл, Ник (20.01.2010). «Через 17 лет обнаружен брешь в древности Windows». Спрашивающий. Резкий. Получено 2010-01-21.
  28. ^ «Рекомендации Microsoft по безопасности (979682): уязвимость в ядре Windows делает возможным несанкционированное получение прав». TechNet. Microsoft. 2010-01-20. Получено 2010-01-21.
  29. ^ а б Проблема «Подсистеме Win 16 недостаточно ресурсов для продолжения работы» в Windows XP
  30. ^ Объединенные тома Руководства разработчика программного обеспечения для архитектур Intel 64 и IA-32: 1, 2A, 2B, 2C, 3A, 3B и 3C (PDF) (PDF). Intel. Июнь 2013 [1997]. 325462-047US. Получено 2013-07-02.
  31. ^ Кляйн, Хельге (11 марта 2008 г.). «Windows x64 - все одинаковы, но очень разные, часть 5: NTVDM, службы, WoW64». Получено 2013-07-21.
  32. ^ «Список ограничений в 64-битной Windows». Корпорация Майкрософт. 2007-10-11. Получено 2017-07-19.
  33. ^ "modify_ldt (2)". Руководство программиста Linux. Получено 2019-07-21.
  34. ^ "Виневдм". GitHub. Получено 2019-07-21.

дальнейшее чтение

внешняя ссылка