VDM (Virtual DOS machine)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 14:56, 23 января 2019.
VDM (Virtual DOS machine)
8731892.jpg
Разработчики: Microsoft Corporation
Выпущена: 1987 год
Операционная система: Windows NT
Платформа: IA-32, x86-64, DEC Alpha, MIPS, PowerPC, ARM и Itanium
Лицензия: Microsoft EULA
Веб-сайт microsoft.com

VDM (англ. Virtual DOS machine - Виртуальная машина DOS) — это виртуальная машина, семейство операционных систем которой работает под управлением Microsoft Windows NT для обеспечения совместимости со старым программным обеспечением, разработанным для ранее широко распространенной операционной системы MS-DOS. Другими словами, технология, позволяющая запускать 16/32-разрядные приложения DOS и 16-разрядные приложения Windows 3.x на процессорах Intel 80386 и более поздних моделях, параллельно с уже запущенной другой операционной системой, которая управляет устройством. Windows NT через компонент Win32 поддерживает концепцию виртуальных машин DOS (VDM). VDM создают виртуальную аппаратную и программную среду, ожидаемую программами в режиме DOS. Каждая программа DOS выполняется как один поток. [Источник 1]

Обзор

Виртуальные машины DOS, как правило, основываются на виртуальном 8086-режиме (virtual 8086 mode) работы процессора Intel 80386, который позволяет VDM имитировать программное и аппаратное обеспечение целевой операционной системы (MS-DOS, Windows 3.x) и предоставлять соответствующие интерфейсы запускаемой программе. Программа загружается и выполняется в контролируемом окружении. Виртуальное оборудование создается с использованием драйверов виртуальных устройств (VDD). VDD перехватывает запросы к аппаратным устройствам, таким как мышь, клавиатура, последовательные порты и проч., перенаправляет их в подсистему Win32. С точки зрения исполняемой программы окружение неотличимо от настоящего: программе предоставляются интерфейсы для манипулирования аппаратным обеспечением (видео-картой, клавиатурой и т. д.) и другими средствами операционной системы, в то время как VDM в действительности перехватывает все обращения к аппаратному обеспечению и безопасно обрабатывает их средствами базовой операционной системы (например, Windows XP), после чего возвращает управление исполняемому DOS-приложению (см. рисунок 1). Также, VDM, как правило реализуют поддержку запуска 16- и 32-битных приложений, реализующих интерфейс DPMI (DOS Protected Mode Interface). [Источник 2]

Рисунок 1 - схема работы VDM

VDM на основе DOS

VDM, основанные на ОС VDM появились с Windows / 386 2.10 в 1987 году и также присутствовали в Windows 3.0, 3.1x и Windows 3.1x, работающего в расширенном режиме 386, а также в Windows 95, 98, 98 SE и ME. Аналогично расширенному режиму Windows 3.x 386 в архитектуре, EMM386 3.xx из Novell DOS 7, Caldera OpenDOS 7.01, DR-DOS 7.02 (и позже) также использует VDM для поддержки многозадачности нескольких приложений DOS, когда используется драйвер EMM386 / MULTI. Этот компонент разрабатывался в Digital Research / Novell с 1991 года под кодовым названием «Vladivar» (первоначально это был отдельный драйвер устройства KRNL386.SYS вместо EMM386). Хотя в первую очередь он был разработан для следующей основной версии DR DOS, выпущенной под названием "Novell DOS 7" в 1994 году, он также использовался в никогда не выпущенном проекте "Star Trek" в 1992/1993 годах. [Источник 1]

OS/2 MVDM

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

Полная интеграция Windows 3.1 и более поздних приложений Win32s в OS / 2 - это концепция, внешне похожая на плавную интеграцию XP Mode на основе Windows Virtual PC в Windows 7. Переадресация в гостевом VDM или NTVDM обеспечивает доступ к OS / 2 или хосту NT. Гостевые приложения могут использовать именованные каналы для связи со своим хостом. [Источник 3]

NTVDM

NTVDM (NT Virtual DOS Machine — «виртуальная машина DOS для системы NT») — компонент, входящий в состав 32-разрядных редакций операционных систем семейства Windows NT, позволяющий запускать 16-разрядные приложения Windows и 16/32-разрядные приложения DOS. Данный компонент не входит в 64-разрядные версии этих ОС. Исполняемый файл, формирующий основу среды для выполнения одного приложения DOS (или Windows 3.x) в 32-битном пользовательском режиме Windows NT называется ntvdm.exe (см. рисунок 2).

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

Рисунок 2 - Схема работы NTVDM

Управление конфигурацией

В системах MS-DOS и Windows 3.x для управления конфигурацией операционной системы используются файлы CONFIG.SYS и AUTOEXEC.BAT. В более поздних версиях Windows эти файлы называются CONFIG.NT и AUTOEXEC.NT и используются исключительно для конфигурирования VDM. В момент запуска старого 16-битного приложения, Windows запускает ntvdm.exe, который производит стандартный запуск операционной системы MS-DOS в виртуальной среде с использованием файлов CONFIG.NT и AUTOEXEC.NT . Эти файлы в поздних версиях Windows могут быть найдены в \WINDOWS\SYSTEM32 и \WINNT\SYSTEM32.

CONFIG.NT

CONFIG.NT имеет свой специальный синтаксис. В основном, он состоит из директив вида команда=значение (или то же самое, но без знака равенства — например, numlock off). Список некоторых часто используемых команд CONFIG.NT:

Команда Описание
; Строка с комментарием
break Задаёт поведение системы при нажатии комбинации Ctrl+C во время работы программ
buffers Резервирует место под указанное количество дисковых буферов
country Задаёт региональные настройки (формат даты и времени, наименование валюты, порядок сортировки и т. п.)
device Загружает драйвер
devicehigh Загружает драйвер в Upper Memory Area (UMB)
dos Параметры загрузки DOS (к примеру, перенос части ядра в High Memory Area (HMA))
fcbs Сколько одновременно можно открывать FCB
files Сколько одновременно можно открывать файлов
install Загружает резидентную программу (обычный исполнимый модуль не в формате драйвера)
installhigh Загружает резидентную программу в UMB
lastdrive Задаёт последнюю букву, доступную для назначения дискам
numlock Задаёт состояние переключателя Num Lock
rem Строка с комментарием
set Устанавливает значение переменной окружения
shell Указывает интерпретатор командной строки, отличный от command.com, и/или его опции
stacks Резервирует место для стеков обработки аппаратных прерываний
switches Дополнительные опции загрузки

Также, сразу после команды можно поставить знак вопроса ('?', например dos?=high) — в этом случае перед исполнением директивы запрашивается подтверждение исполнения.

Проблемы с безопасностью

В января 2010 г. Тэвис Ормэнди, исследователь в области безопасности из Google, выявил серьезную уязвимость в NTVDM, позволяющую непривилегированным пользователям повышать свои права до уровня SYSTEM, применимую ко всем x86 версиям начиная с ядра Windows NT 1993 года, включая Windows NT, 2000, XP, Server 2003, Vista, Server 2008, and Windows 7. Ормэнди опубликовал эксплойт, подтверждающий наличие уязвимости, и до выпуска Microsoft исправляющего патча единственным средством защиты являлся полный запрет на выполнение 16-битных программ. Уязвимость не затрагивала 64-битные версии операционных систем, т. к. в них отсутствовала поддержка подсистемы NTVDM.

Ограничения

В 16-битной подсистеме Windows XP (но не в более ранних версиях Windows NT) существует ограничение из-за возросшего лимита на количество GDI объектов на сессию, что обуславливает сдвиг вправо на 2 бита для GDI handle во время конвертации их из 32-битных в 16-битные. В результате, настоящий handle не может быть больше 16 бит, и, следовательно, 16-битные приложения, пытающиеся обработать handle, больший 16384, с помощью GDI системы, прерывали выполнение с сообщением об ошибке. В x86-64 CPU виртуальный 8086-режим доступен как подрежим только в legacy-режиме, но не обычном 64-битном режиме.

Версии Windows NT для 64-разрядных архитектур, включая Windows XP Professional x64 Edition (x86-64), Windows XP 64-bit Edition (IA-64), Windows Server 2003 (x64) и Windows Vista (x64), больше не включают NTVDM и, следовательно, больше не могут запускать приложения MS-DOS (или 16-разрядные Windows). Единственный способ их запуска - через Windows XP mode, или при помощи виртуализации. В большинстве случаев, эмуляция звукового обеспечения весьма ограничена.

В целом, VDM и аналогичные технологии (включая такие продукты, как VMware) не могут нормально запускать многие старые программы DOS на современных компьютерах (XP, 7). Эмуляция предоставляется только для самых основных периферийных устройств, хотя в Windows XP есть эмуляция Sound Blaster и других мультимедийных устройств. Эмуляция поддерживаемых периферийных устройств неполная и не совсем удобная. Версии Windows семейства NT не эмулируют графические режимы с более высоким разрешением. Поскольку программное обеспечение работает в основном нативно, срок действия всех циклов синхронизации истекает преждевременно. Это либо делает работу слишком быстрой, либо приводит к тому, что программное обеспечение даже не замечает эмулированную аппаратную периферию, потому что долго не получает ответа. [Источник 4]

Интересные факты

В операционной системе ReactOS одним из разработчиков была реализована NTVDM. Однако, в отличие от Windows, в ReactOS NTVDM не устанавливает процессор в 16-битный режим эмуляции, а основываясь на реализации эмулятора Softx86 и авторской библиотеке эмуляции процессора Fast486, как DOSBox полностью эмулирует компьютер. [Источник 3]

Источники

  1. 1,0 1,1 Virtual DOS Machine // memim.[2018-2018]. Дата обновления: 07.11.2018. URL: https://memim.com/virtual-dos-machine.html (дата обращения: 29.12.2018)
  2. Virtual DOS machine // Wiki2. [2018-2018]. Дата обновления: 06.11.2018. URL: https://wiki2.org/en/Virtual_DOS_machine (дата обращения: 22.12.2018)
  3. 3,0 3,1 Virtual DOS Machine // Wikipedia. [2018-2018]. Дата обновления: 06.11.2018. URL: https://en.wikipedia.org/wiki/Virtual_DOS_machine (дата обращения: 29.12.2018)
  4. Virtual DOS Machine // Statemaster. [2003-2005]. Дата обновления: 15.06.2005. URL: http://www.statemaster.com/encyclopedia/Virtual-DOS-machine (дата обращения: 29.12.2018)