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 позже был развит как Multiuser DOS (с 1991 года) и REAL/32 (с 1995 года). FlexOS 386 позже стал 4690 OS в 1993 году.

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 Enhanced Mode , а также в Windows 95 , 98 , 98 SE и ME . Одной из характеристик этих решений, работающих поверх DOS, является то, что структура памяти, показанная внутри виртуальных машин DOS, представляет собой виртуальные экземпляры системы DOS и конфигурации драйвера DOS, запущенные до загрузки многозадачности, и что запросы, которые не могут быть обработаны в защищенном режиме, передаются в системный домен для выполнения базовой системой DOS.

Аналогично Windows 3.x 386 Enhanced Mode по архитектуре, EMM386 3.xx Novell DOS 7 , [1] [14] Caldera OpenDOS 7.01 , [14] [15] DR-DOS 7.02 [16] (и более поздние версии) также используют основанные на DOS VDM для поддержки упреждающей многозадачности нескольких приложений DOS, когда EMM386 /MULTIиспользуется эта опция. [14] [15] [16] Этот компонент разрабатывался в Digital Research / Novell с 1991 года [nb 1] под кодовым названием «Vladivar» (первоначально это был отдельный драйвер устройства KRNL386.SYS[1] [14] вместо модуля EMM386). Хотя изначально он был разработан для следующей основной версии DR DOS, выпущенной как Novell DOS 7 в 1994 году [1] [14] , он также использовался в так и не выпущенных проектах DR DOS «Panther» и « Star Trek » в 1992/1993 годах.

ОС/2 МВДМ

Несколько виртуальных машин DOS (MVDM) используются в OS/2 2.0 и более поздних версиях с 1992 года. [1] [4] OS/2 MVDM значительно мощнее, чем NTVDM. Например, поддерживаются блочные устройства, и различные версии DOS могут быть загружены в OS/2 MVDM. [17] В то время как OS/2 1.x DOS box был основан на DOS 3.0, OS/2 2.x MVDM эмулируют 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. Исполняемый файл пользовательского режима Windows NT 32-бит, который составляет основу для единой среды 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, используя код, лицензированный у SoftPC компании Insignia . [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-разрядных процессоров.

Команды

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

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

В январе 2010 года исследователь безопасности Google Тэвис Орманди выявил серьезную уязвимость безопасности в реализации VDM в Windows NT, которая позволяла непривилегированным пользователям повышать свои привилегии до уровня SYSTEM , что было отмечено как применимое к безопасности всех версий 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-разрядные приложения, которым система GDI выдала дескриптор больше 16384, аварийно завершают работу с сообщением об ошибке. [29]

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

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

В процессоре x86-64 виртуальный режим 8086 доступен как подрежим только в его устаревшем режиме (для работы 16- и 32-разрядных операционных систем), а не в собственном 64-разрядном длинном режиме . [30] NTVDM не поддерживается в редакциях x86-64 Windows, [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, основанного на эмуляции i386 MAME и 16-битной части популярного слоя совместимости Windows, Wine . [35]

ВиноVDM

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

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

Примечания

  1. ^ KRNL386.SYS из DR DOS "Panther" имеет строки авторских прав "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-е изд.). Reading, Массачусетс: Addison Wesley . ISBN 0-201-63287-X.(xviii+856+vi страниц, 3,5-дюймовая дискета) Опечатки: [1][2]
  2. ^ ab "Concurrent DOS-286 Challenges Unix". Журнал BYTE . 10 (5): 375–377. Май 1985. Архивировано из оригинала 2018-09-14 . Получено 2017-01-23 .[3]
  3. ^ "Concurrent DOS 68K 1.2 - Developer Kit для Motorola VME/10 - Disk 2". 1986-08-06 [1986-04-08] . Получено 2018-09-13 .(Примечание. Этот пакет также включает некоторые заголовочные файлы из Concurrent DOS 286 , включая STRUCT.H, явно упоминающий LOADALL для «эмуляции 8086».)
  4. ^ ab Deitel, Harvey M.; Kogan, Michael S. (1992). Проектирование OS/2. Addison-Wesley . ISBN 0-201-54889-5.
  5. ^ Фостер, Эдвард (1985-05-13). «Super DOS ждет новый 80286 – Concurrent DOS 286 – отложен до тех пор, пока Intel не обновит чип – предлагает мощь Xenix и совместимость с IBM PC». InfoWorld . 7 (19). InfoWorld Media Group : 17–18. ISSN  0199-6649. Архивировано из оригинала 2019-04-03 . Получено 2019-04-03 .
  6. ^ Фостер, Эдвард (1985-08-26). "Intel демонстрирует новый чип 80286 – будущее параллельной DOS 286 от DRI все еще неясно после исправления процессора". InfoWorld . 7 (34). InfoWorld Media Group : 21. ISSN  0199-6649. Архивировано из оригинала 2019-04-03 . Получено 2019-04-03 .
  7. ^ FlexOS Supplement for Intel iAPX 286-based Computers (PDF) . 1.3 (1-е изд.). Digital Research, Inc. Ноябрь 1986. Архивировано (PDF) из оригинала 2019-04-03 . Получено 2018-08-14 .
  8. ^ CBR, ред. (15.01.1987). "Digital Research запускает FlexOS 286 Real-Time Manufacturing Operating System". Computer Business Review . Архивировано из оригинала 18.01.2013 . Получено 15.09.2018 .
  9. ^ Кальво, Мелисса; Форбс, Джим (1986-02-10). «IBM будет использовать операционную систему DRI». InfoWorld . Архивировано из оригинала 2019-04-03 . Получено 2011-09-06 .
  10. ^ "IBM выбирает Concurrent DOS-286 для розничной системы PC AT" (PDF) . European Review (18). Digital Research : 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. ^ CBR, ред. (1987-06-03). "Digital Research демонстрирует Real-Time FlexOS 386". Computer Business Review . Архивировано из оригинала 2013-06-28 . Получено 2011-09-06 .
  13. ^ Necasek, Michal (2011-05-21). "Windows/386 2.01". Музей OS/2. Архивировано из оригинала 2019-04-03 . Получено 2019-04-02 .
  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 Developer's Reference Series — OpenDOS Multitasking API Guide — Programmer's Guide. Великобритания: Caldera, Inc. Август 1997 г. Caldera Part No. 200-DOMG-004. Архивировано из оригинала 2017-09-10 . Получено 2016-11-02 .
  16. ^ ab Caldera DR-DOS 7.02 User Guide. Caldera, Inc. 1998 [1993, 1997]. Архивировано из оригинала 2016-11-05 . Получено 2014-09-06 .
  17. ^ "OS/2 Workplace Shell Configuration Techniques" (PDF) . IBM redbook. 1994. стр. 68–80. Архивировано из оригинала (PDF) 2012-03-20 . Получено 05.07.2011 .
  18. ^ ab "Команды подсистемы MS-DOS". Microsoft .
  19. ^ "Почему мои сеансы DOS и Win-OS/2 не видят больше 2 ГБ свободного места?". Arca Noae, LLC . Архивировано из оригинала 2021-07-07 . Получено 2020-09-03 .
  20. ^ "ArcaOS Release Notes". 2020-08-31 [2017-05-15]. Архивировано из оригинала 2021-03-16 . Получено 2020-09-03 .
  21. ^ "Глава 27 - Совместимость и миграция Windows". Windows NT 4.0 Resource Kit . Microsoft . 2014-02-20 . Получено 2017-07-19 .
  22. ^ Шульман, Джерольд (2002-12-04). "Как устранить неполадки программ MS-DOS, работающих в Windows XP?". ITPro Windows . Получено 2017-07-19 .
  23. ^ ab "leecher1337/ntvdmx64". GitHub . Получено 2018-11-03 .Дополнительная документация Эдварда Мендельсона
  24. ^ "ИНФОРМАЦИЯ: Как Windows обрабатывает вычисления с плавающей точкой". Служба поддержки Microsoft . 2006-11-21. Архивировано из оригинала 2013-02-24 . Получено 2017-07-19 .
  25. ^ "Microsoft Security Bulletin MS10-015 - Важно: уязвимости в ядре Windows могут привести к повышению привилегий (977165)". Security TechCenter . Microsoft . 2010-03-17 . Получено 2012-11-02 .
  26. ^ Орманди, Тавис (19.01.2010). «Обработчик прерываний #GP Microsoft Windows NT позволяет пользователям переключать стек ядра». CVE-2010-0232 . Полное раскрытие информации . Получено 13.04.2013 .
  27. ^ Фаррелл, Ник (2010-01-20). "Древняя уязвимость Windows обнаружена спустя 17 лет". The Inquirer . Пронзительный. Архивировано из оригинала 2010-01-23 . Получено 2010-01-21 .{{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  28. ^ «Microsoft Security Advisory (979682): Уязвимость в ядре Windows может привести к повышению привилегий». TechNet . Microsoft . 2010-01-20 . Получено 2010-01-21 .
  29. ^ ab Проблема «Подсистема 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.03.2008). "Windows x64 — все то же самое, но очень разное. Часть 5: NTVDM, службы, WoW64" . Получено 21.07.2013 .
  32. ^ "Список ограничений в 64-разрядной версии Windows". Корпорация Microsoft. 2007-10-11 . Получено 2017-07-19 .
  33. ^ "modify_ldt(2)". Руководство программиста Linux . Получено 21 июля 2019 г.
  34. ^ "NTVDMx64 от Leecher1337". www.columbia.edu . Получено 2023-03-25 .
  35. ^ "Winevdm". GitHub . Получено 21 июля 2019 г.Дополнительная документация Эдварда Мендельсона
  36. ^ "Otya128/Winevdm". GitHub .

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

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