Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Обзор [ править ]

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

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

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

Одновременный режим эмуляции DOS 8086 [ править ]

В январе 1985 Digital Research совместно с Intel просмотров Параллельная DOS 286 1.0 , [2] версия Параллельная 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 г.). FlexOS 386 позже стала ОС 4690 в 1993 году.

VDM на базе DOS [ править ]

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

VDM на основе DOS появились с Microsoft Windows / 386 2.01 в сентябре 1987 года. [13] Виртуальные машины DOS на основе DOS также присутствовали в Windows 3.0 , 3.1x и Windows for Workgroups 3.1x, работающих в расширенном режиме 386, а также в Windows 95 , 98 , 98 SE и ME. Одной из характеристик этих решений, работающих поверх 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.

OS / 2 MVDM [ править ]

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

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

Windows NTVDM [ править ]

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

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

Все 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 SoftPC . [23] [1] До Windows NT 3.51 была доступна только эмуляция 80286. С Windows NT 4.0 , 486 была добавлена эмуляция. [24]

Команды [ править ]

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

  • ДОБАВИТЬ
  • ОТЛАЖИВАТЬ
  • РЕДАКТИРОВАТЬ
  • EDLIN
  • EXE2BIN
  • FASTOPEN
  • FORCEDOS
  • ГРАФИКА
  • ЗАГРУЗИТЬ
  • ВЫСОКАЯ НАГРУЗКА (LH)
  • MEM
  • NLSFUNC
  • НАБОР
  • ПОДЕЛИТЬСЯ

Проблема безопасности [ править ]

В январе 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-битные приложения, которые обслуживаются дескриптором больше 16384 из-за сбоя системы GDI, завершаются с сообщением об ошибке. [29]

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

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

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

См. Также [ править ]

  • Сравнение программного обеспечения для виртуализации платформ
  • DESQview 386 (с 1988 г.)
  • Wine (программное обеспечение)
  • DOSBox
  • ДОСЕМУ
  • Слияние (программное обеспечение)
  • Список компонентов Microsoft Windows
  • Гипервизор
  • Windows на Windows (WoW)
  • Виртуальная машина (ВМ)

Примечания [ править ]

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

Ссылки [ править ]

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

Дальнейшее чтение [ править ]

  • Пьетрек, Мэтт (август 1998 г.). «Под капотом» . Журнал Microsoft Systems . Архивировано 13 июля 2017 года . Проверено 22 января 2020 г. - через bytepointer.com.

Внешние ссылки [ править ]

  • Структура виртуальной машины DOS
  • Устранение неполадок программ на базе MS-DOS в Windows XP
  • Устранение неполадок приложения MS-DOS, которое зависает подсистему NTVDM в Windows XP и Windows Server 2003
  • Устранение неполадок программ последовательной связи на основе MS-DOS в Windows 2000 и более поздних версиях
  • MS-DOS Player для Win32-x64, эмулятор Microsoft MS-DOS , запускает множество программ DOS командной строки, таких как компиляторы или другие инструменты, также упакованные в один автономный исполняемый файл.
  • vDOS , эмулятор DOS, разработанный для запуска более «серьезных» приложений DOS (не игр) в 64-битных системах NT (фактически заменяет NTVDM в современных системах).