stringtranslate.com

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

Виртуальные машины DOS ( VDM ) относятся к технологии, которая позволяет запускать 16-битные/32-битные программы DOS и 16-битные программы Windows, когда уже работает другая операционная система и управляет оборудованием.

Обзор

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

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

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

Параллельный режим эмуляции DOS 8086

В январе 1985 года компания Digital Research совместно с Intel представила Concurrent DOS 286 1.0 , [2] версию Concurrent DOS , способную запускать программы DOS в реальном режиме в защищенном режиме 80286 . [2] Однако метод, разработанный для процессоров степпинга B-1, в мае 1985 года перестал работать на C-1 и последующих процессорах степпинга незадолго до того, как Digital Research собиралась выпустить продукт. Хотя с помощью степпинга E-1 Intel начала решать проблемы в августе 1985 года, так что «режим эмуляции 8086» Digital Research снова заработал с использованием недокументированной инструкции процессора LOADALL , [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 в защищенном режиме под Concurrent DOS 386 1.0 (февраль). 1987) [11] и FlexOS 386 1.0 (июнь 1987 г.). [12] Однако архитектура этих многопользовательских многозадачных операционных систем с защищенным режимом сама по себе не была основана на DOS.

Позже Concurrent DOS 386 была разработана и стала многопользовательской DOS (с 1991 года) и REAL/32 (с 1995 года). Позже в 1993 году FlexOS 386 стала ОС 4690 .

VDM на базе DOS

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

VDM на базе DOS появились в Windows/386 2.01 от Microsoft в сентябре 1987 года. [13] Виртуальные машины DOS на базе DOS также присутствовали в Windows 3.0 , 3.1x и Windows for Workgroups 3.1x , работавших в расширенном режиме 386 , а также в Windows 95. , 98 , 98 ЮВ и МНЕ . Одной из характеристик этих решений, работающих поверх 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] Этот компонент разрабатывался в компании Digital Research / Novell с 1991 года [nb 1] под кодовым названием «Владивар» (первоначально это был отдельный драйвер устройства KRNL386.SYS[1] [14] вместо модуля EMM386. ). Хотя в первую очередь он был разработан для следующей основной версии DR DOS, выпущенной как Novell DOS 7 в 1994 году, [1] [14] он также использовался в никогда не выпускавшихся проектах DR DOS «Пантера» и « Звездный путь » в 1992/1993 годах.

ОС/2 МВДМ

Несколько виртуальных машин DOS (MVDM) используются в OS/2 2.0 и более поздних версиях с 1992 года. [1] [4] OS/2 MVDM значительно более мощны, чем NTVDM. Например, поддерживаются блочные устройства, а в OS/2 MVDM можно загружать различные версии DOS. [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 Mode на основе Windows Virtual PC в Windows 7 . Перенаправитель в «гостевом» VDM или NTVDM обеспечивает доступ к дискам «хоста» OS/2 или NT. Приложения в «гостевом режиме» могут использовать именованные каналы для связи со своим «хостом». [18]

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

Windows НТВДМ

COMMAND.COM работает в NTVDM Windows 10.

NTVDM был системным компонентом всех редакций IA-32 семейства Windows NT , начиная с 1993 года с выпуском Windows NT 3.1 . Он позволяет выполнять 16-битные приложения Windows и 16-битные/32-битные приложения DOS. Исполняемый файл пользовательского режима 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 и 5.50, чтобы позволить большему количеству программ запускаться без изменений. [1] Это справедливо даже для новейших выпусков Windows; многие дополнительные функции и команды MS-DOS, представленные в версиях MS-DOS 6.x и Windows 9x , отсутствуют.INT 21h/AH=30hINT 21h/AX=3306h

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

32-битная эмуляция DOS присутствует для интерфейса защищенного режима DOS (DPMI) и 32-битного доступа к памяти. Этот уровень преобразует необходимые вызовы расширенной и расширенной памяти для функций DOS в вызовы памяти Windows NT. wowexec.exe — это уровень эмуляции, эмулирующий 16-разрядную версию Windows. В Windows 2000 и Windows XP добавлена ​​эмуляция Sound Blaster 2.0. [22] 16-битные драйверы виртуальных устройств и драйверы блочных устройств DOS (например, 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]

NTVDM не входит в состав 64-разрядных версий Windows или версий на базе ARM32, таких как Windows RT или Windows 10 IoT Core. Windows 10 — последняя версия Windows, включающая этот компонент, поскольку в Windows 11 прекращена поддержка 32-разрядных процессоров.

Команды

Следующий список команд является частью подсистемы MS-DOS Windows XP. [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 можно было безопасно повторно включить. [номер 2]

Ограничения

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

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

Отсутствие в архитектурах x64 и AArch64.

В процессорах x86-64 виртуальный режим 8086 доступен как подрежим только в его устаревшем режиме (для работы 16- и 32-битных операционных систем), а не в собственном 64-битном длинном режиме . [30] NTVDM не поддерживается в версиях Windows x86-64, [31] включая программы DOS, [32] поскольку NTVDM использует режим ЦП VM86 вместо таблицы локальных дескрипторов, чтобы включить 16-битный сегмент, необходимый для адресации. [33] NTVDM также недоступен в версиях Windows AArch64 (таких как Windows RT ), поскольку Microsoft не выпустила полный эмулятор для этого несовместимого набора инструкций, как это было в предыдущих несовместимых архитектурах.

Хотя NTVDM не поддерживается в версиях Windows x86-64 и AArch64, их все равно можно запускать с помощью программного обеспечения виртуализации , такого как Windows XP Mode в не домашних версиях Windows 7 или VMware Workstation . Другие методы включают использование NTVDMx64, [34] неофициального порта эмулируемой реализации NTVDM из утекшего исходного кода Windows NT 4.0 для платформ, отличных от x86, [23] или OTVDM (WineVDM), 16-битного интерпретатора Windows, основанного на MAME . эмуляция i386 и 16-битная часть популярного уровня совместимости Windows Wine . [35]

ВиноВДМ

VDM включен в Wine и CrossOver для Linux и Mac OS X и известен как WineVDM (также известный как OTVDM). Он также был перенесен на саму Windows, поскольку 64-разрядные версии Windows не включают подсистему NTVDM. [36]

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

Примечания

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

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

  1. ^ abcdefghijklm Шульман, Эндрю; Браун, Ральф Д .; Макси, Дэвид; Михелс, Раймонд Дж.; Кайл, Джим (1994) [ноябрь 1993 г.]. Недокументированная DOS: Руководство программиста по зарезервированным функциям и структурам данных MS-DOS - расширено и включает MS-DOS 6, Novell DOS и Windows 3.1 (2-е изд.). Ридинг, Массачусетс: Эддисон Уэсли . ISBN 0-201-63287-Х.(xviii+856+vi страниц, 3,5-дюймовая дискета) Исправления: [1][2]
  2. ^ ab «Одновременные вызовы DOS-286 для Unix». Журнал БАЙТ . 10 (5): 375–377. Май 1985 г. Архивировано из оригинала 14 сентября 2018 г. Проверено 23 января 2017 г.[3]
  3. ^ «Конкурентная DOS 68K 1.2 — Комплект разработчика для Motorola VME/10 — Диск 2» . 6 августа 1986 г. [8 апреля 1986 г.] . Проверено 13 сентября 2018 г.(Примечание. Этот пакет также включает в себя некоторые файлы заголовков из Concurrent DOS 286 , включая STRUCT.H, в котором явно упоминается LOADALL для «эмуляции 8086».)
  4. ^ аб Дейтел, Харви М.; Коган, Майкл С. (1992). Дизайн OS/2. Аддисон-Уэсли . ISBN 0-201-54889-5.
  5. ^ Фостер, Эдвард (13 мая 1985 г.). «Super DOS ждет новый 80286 - Concurrent DOS 286 - отложен до тех пор, пока Intel не обновит чип - предлагает мощность Xenix и совместимость с IBM PC». Инфомир . Медиа-группа InfoWorld . 7 (19): 17–18. ISSN  0199-6649. Архивировано из оригинала 3 апреля 2019 г. Проверено 3 апреля 2019 г.
  6. ^ Фостер, Эдвард (26 августа 1985 г.). «Intel демонстрирует новый чип 80286 — будущее Concurrent DOS 286 от DRI все еще неясно после исправления процессора». Инфомир . Медиа-группа InfoWorld . 7 (34): 21. ISSN  0199-6649. Архивировано из оригинала 3 апреля 2019 г. Проверено 3 апреля 2019 г.
  7. ^ Дополнение FlexOS для компьютеров на базе Intel iAPX 286 (PDF) . 1.3 (1-е изд.). Digital Research, Inc., ноябрь 1986 г. Архивировано (PDF) из оригинала 3 апреля 2019 г. Проверено 14 августа 2018 г.
  8. ^ ЦБ РФ, изд. (15 января 1987 г.). «Digital Research запускает производственную операционную систему реального времени FlexOS 286» . Обзор компьютерного бизнеса . Архивировано из оригинала 18 января 2013 г. Проверено 15 сентября 2018 г.
  9. ^ Кальво, Мелисса; Форбс, Джим (10 февраля 1986 г.). «IBM будет использовать операционную систему DRI». Инфомир . Архивировано из оригинала 3 апреля 2019 г. Проверено 6 сентября 2011 г.
  10. ^ «IBM выбирает Concurrent DOS-286 для розничной системы PC AT» (PDF) . Европейский обзор . Digital Research (18): 1. Март 1986 г. Архивировано (PDF) из оригинала 3 апреля 2019 г. Проверено 15 сентября 2018 г.
  11. ^ Вайс, Иржи (16 февраля 1987). «DRI выпустит многопользовательскую операционную систему 80386». Инфомир . 9 (7): 1, 8. Архивировано из оригинала 03 апреля 2019 г. Проверено 22 января 2017 г.[4]
  12. ^ ЦБ РФ, изд. (3 июня 1987 г.). «Цифровые исследования демонстрируют FlexOS 386 реального времени» . Обзор компьютерного бизнеса . Архивировано из оригинала 28 июня 2013 г. Проверено 6 сентября 2011 г.
  13. ^ Некасек, Михал (21 мая 2011 г.). «Виндовс/386 2.01». Музей ОС/2. Архивировано из оригинала 3 апреля 2019 г. Проверено 2 апреля 2019 г.
  14. ^ abcde Пол, Матиас Р. (30 июля 1997 г.) [1 мая 1994 г.]. NWDOS-TIPs — советы и подсказки для Novell DOS 7, с просмотром недокументированных подробностей, ошибок и обходных путей. Выпуск 157 (на немецком языке) (3-е изд.). Архивировано из оригинала 3 ноября 2016 г. Проверено 6 сентября 2014 г. {{cite book}}: |work=игнорируется ( помощь ) (Примечание. NWDOSTIP.TXT — это всеобъемлющая работа по Novell DOS 7 и OpenDOS 7.01 , включая описание многих недокументированных функций и внутренних устройств. Это часть еще более обширной коллекции MPDOSTIP.ZIP автора, поддерживаемой до 2001 года и в то время распространялся на многих сайтах. Предоставленная ссылка указывает на более старую версию файла NWDOSTIP.TXT, преобразованную в HTML.) mpdostip.zip
  15. ^ ab Серия справочников для разработчиков OpenDOS — Руководство по многозадачному API OpenDOS — Руководство программиста. Великобритания: Caldera, Inc., август 1997 г. Номер детали Caldera 200-DOMG-004. Архивировано из оригинала 10 сентября 2017 г. Проверено 2 ноября 2016 г.
  16. ^ ab Руководство пользователя Caldera DR-DOS 7.02. Caldera, Inc., 1998 г. [1993, 1997]. Архивировано из оригинала 5 ноября 2016 г. Проверено 6 сентября 2014 г.
  17. ^ «Методы настройки оболочки рабочего места OS/2» (PDF) . Красная книга IBM . 1994. стр. 68–80. Архивировано из оригинала (PDF) 20 марта 2012 г. Проверено 5 июля 2011 г.
  18. ^ ab «Команды подсистемы MS-DOS». Майкрософт .
  19. ^ «Почему мои сеансы DOS и Win-OS/2 не видят более 2 ГБ свободного места?». Арка Ноаэ, ООО . Архивировано из оригинала 07 июля 2021 г. Проверено 3 сентября 2020 г.
  20. ^ «Примечания к выпуску ArcaOS» . 31 августа 2020 г. [15 мая 2017 г.]. Архивировано из оригинала 16 марта 2021 г. Проверено 3 сентября 2020 г.
  21. ^ «Глава 27 — Совместимость и миграция Windows» . Ресурсный комплект Windows NT 4.0 . Майкрософт . 20 февраля 2014 г. Проверено 19 июля 2017 г.
  22. ^ Шульман, Джерольд (4 декабря 2002 г.). «Как устранить неполадки программ MS-DOS, работающих в Windows XP?». ИТПро Windows . Проверено 19 июля 2017 г.
  23. ^ ab "leecher1337/ntvdmx64". Гитхаб . Проверено 3 ноября 2018 г.Дополнительная документация Эдварда Мендельсона
  24. ^ «ИНФОРМАЦИЯ: Как Windows обрабатывает вычисления с плавающей запятой» . Поддержка Майкрософт . 21 ноября 2006 г. Архивировано из оригинала 24 февраля 2013 г. Проверено 19 июля 2017 г.
  25. ^ «Бюллетень по безопасности Microsoft MS10-015 — Важно: уязвимости в ядре Windows могут привести к несанкционированному повышению привилегий (977165)» . Техцентр безопасности . Майкрософт . 17 марта 2010 г. Проверено 2 ноября 2012 г.
  26. ^ Орманди, Тэвис (19 января 2010 г.). «Обработчик ловушек Microsoft Windows NT #GP позволяет пользователям переключать стек ядра». CVE-2010-0232 . Полное раскрытие . Проверено 13 апреля 2013 г.
  27. ^ Фаррелл, Ник (20 января 2010 г.). «Древняя ошибка Windows обнаружена спустя 17 лет». Спрашивающий . Острый. Архивировано из оригинала 23 января 2010 г. Проверено 21 января 2010 г.{{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  28. ^ «Рекомендации Microsoft по безопасности (979682): Уязвимость в ядре Windows может привести к несанкционированному повышению привилегий» . ТехНет . Майкрософт . 20 января 2010 г. Проверено 21 января 2010 г.
  29. ^ ab Проблема «Подсистеме Win 16 недостаточно ресурсов для продолжения работы» в Windows XP.
  30. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32. Объединенные тома: 1, 2A, 2B, 2C, 3A, 3B и 3C (PDF) (PDF) . Интел . Июнь 2013 г. [1997]. 325462-047США . Проверено 2 июля 2013 г.
  31. ^ Кляйн, Хельге (11 марта 2008 г.). «Windows x64 — все то же самое, но очень разные, часть 5: NTVDM, службы, WoW64» . Проверено 21 июля 2013 г.
  32. ^ «Список ограничений в 64-битной Windows». Корпорация Майкрософт. 11 октября 2007 г. Проверено 19 июля 2017 г.
  33. ^ "modify_ldt(2)". Руководство программиста Linux . Проверено 21 июля 2019 г.
  34. ^ "NTVDMx64 от Leecher1337" . www.columbia.edu . Проверено 25 марта 2023 г.
  35. ^ "Виневдм". Гитхаб . Проверено 21 июля 2019 г.Дополнительная документация Эдварда Мендельсона
  36. ^ "Отя128/Winevdm". Гитхаб .

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

Внешние ссылки