Открыть сервис

DPMI

DPMI (от англ. DOS Protected Mode Interface) — это программный интерфейс, позволяющий программам, работающим в операционной системе MS-DOS, переключаться в защищённый режим работы процессоров Intel 80286 и выше, а также использовать расширенную память (XMS) и другие возможности, недоступные в стандартном реальном режиме. DPMI был разработан консорциумом компаний, включая Microsoft, IBM, Intel и Borland, в конце 1980-х — начале 1990-х годов как стандартный способ взаимодействия DOS-программ с аппаратным обеспечением и диспетчерами памяти.

История и предпосылки создания

Проблемы реального режима

В реальном режиме работы процессора (используемом в MS-DOS) программа имела прямой доступ к памяти, но была ограничена адресным пространством в 1 мегабайт (из которых только первые 640 КБ были доступны для пользовательских данных — так называемая «традиционная память»). С ростом объёмов приложений (графические редакторы, компиляторы, игры) этого стало катастрофически не хватать. Кроме того, реальный режим не обеспечивал аппаратной защиты памяти, что приводило к частым сбоям и зависаниям при ошибках в программах.

Появление защищённого режима

Процессоры Intel 80286 (1982) и 80386 (1985) поддерживали защищённый режим, который позволял адресовать до 16 МБ (286) или 4 ГБ (386) памяти, а также обеспечивал аппаратную защиту (кольца защиты, страничную организацию памяти). Однако переключение в защищённый режим было сложным: требовалось настроить дескрипторы сегментов, таблицы страниц, прерывания. DOS не предоставляла для этого никаких стандартных средств, а прямой доступ к аппаратуре был чреват конфликтами с драйверами и резидентными программами.

Роль VCPI и DPMI

До появления DPMI существовал интерфейс VCPI (Virtual Control Program Interface), разработанный компанией Phar Lap Software. VCPI позволял программам в защищённом режиме работать под управлением диспетчера памяти (например, EMM386). Однако VCPI имел серьёзный недостаток: он требовал от программы работать на нулевом кольце защиты (Ring 0), что давало полный контроль над системой, но делало невозможным многозадачность и совместную работу с другими защищёнными программами. DPMI был призван решить эту проблему, предоставив интерфейс, работающий на уровне кольца 3 (Ring 3), что позволяло операционной системе (или диспетчеру памяти) управлять несколькими защищёнными задачами.

Архитектура и принципы работы

Основные компоненты

DPMI определяет два ключевых компонента:

  • DPMI-клиент — программа, использующая защищённый режим (например, игра, компилятор).
  • DPMI-сервер (или хост) — системное программное обеспечение, предоставляющее клиенту сервисы защищённого режима. В роли сервера могут выступать: операционная система (например, Windows 3.x в стандартном режиме), диспетчер памяти (EMM386, QEMM) или специализированная программа (например, CWSDPMI).

Режимы работы

Существует две спецификации DPMI:

  • DPMI 0.9 — базовая версия, поддерживающая переключение в защищённый режим, управление памятью (выделение/освобождение), обработку прерываний.
  • DPMI 1.0 — расширенная версия, добавившая поддержку виртуальной памяти, многозадачности, а также работу с 32-битными приложениями (для процессоров 386+).

Функции, предоставляемые сервером

DPMI-сервер предоставляет клиенту набор системных вызовов (через прерывание INT 2Fh), включая:

  • Переключение между реальным и защищённым режимами.
  • Выделение и освобождение блоков расширенной памяти.
  • Управление дескрипторами сегментов.
  • Обработка исключений и прерываний (включая эмуляцию прерываний BIOS и DOS).
  • Доступ к портам ввода-вывода (с ограничениями для безопасности).

Классификация DPMI-серверов

Встроенные в операционные системы

  • Windows 3.x (стандартный режим) — использовал DPMI 0.9 для запуска DOS-программ в окнах.
  • OS/2 2.x и выше — предоставлял DPMI-сервер для DOS-сессий.
  • Windows 9x (95/98/ME) — встроенный DPMI-сервер для совместимости с DOS-приложениями.

Сторонние диспетчеры памяти

  • EMM386 (входит в состав MS-DOS 5.0 и выше) — поддерживал DPMI 0.9, позволяя программам в защищённом режиме работать вместе с эмуляцией расширенной памяти (EMS).
  • QEMM (Quarterdeck Expanded Memory Manager) — более продвинутый диспетчер, поддерживавший DPMI 1.0.
  • 386MAX — альтернативный диспетчер памяти.

Автономные DPMI-серверы

  • CWSDPMI — компактный 32-битный DPMI-сервер, разработанный для игр и приложений, скомпилированных с помощью DJGPP (порт компилятора GCC для DOS). CWSDPMI распространялся как отдельный файл (cwdpmi.exe) и автоматически загружался при запуске защищённой программы.
  • PMODE — ещё один популярный DPMI-сервер, использовавшийся в играх 1990-х годов (например, Doom, Duke Nukem 3D).

Применение

Игры

Наиболее массовое применение DPMI получил в компьютерных играх середины 1990-х годов. Переход в защищённый режим позволял играм:

  • Использовать более 640 КБ памяти (иногда до 16-32 МБ), что было критично для текстур, карт уровней и звуковых файлов.
  • Обеспечивать плавный вывод графики через VGA/SVGA (например, режимы 320x200 с 256 цветами или более высокие разрешения).
  • Работать с линейным буфером кадра (linear frame buffer), ускоряя рендеринг.

Примеры игр, использовавших DPMI: Doom (1993), Quake (1996), Warcraft II (1995), Command & Conquer (1995), Duke Nukem 3D (1996).

Инструменты разработки

Компиляторы и среды разработки (например, Borland C++, Turbo Pascal с расширениями, DJGPP) использовали DPMI для работы с большими объёмами памяти, ускорения компиляции и отладки.

Системные утилиты

Некоторые антивирусы, архиваторы (PKZIP 2.x) и программы восстановления данных также переключались в защищённый режим для обхода ограничений DOS.

Критика и ограничения

Сложность и нестабильность

DPMI был сложен в реализации как для разработчиков серверов, так и для программистов приложений. Ошибки в настройке дескрипторов или обработке прерываний часто приводили к зависаниям системы. Кроме того, разные серверы имели неполную совместимость: программа, работавшая под EMM386, могла отказаться запускаться под QEMM или Windows.

Отсутствие многозадачности

Хотя DPMI 1.0 формально поддерживал многозадачность, на практике DOS оставалась однозадачной системой. Переключение между задачами требовало активного участия сервера, что редко реализовывалось корректно.

Устаревание

С переходом на 32-битные операционные системы (Windows NT, Linux) и отказом от DOS как платформы для приложений, DPMI потерял актуальность. Современные эмуляторы (DOSBox) эмулируют DPMI-сервер на уровне виртуальной машины, обеспечивая совместимость со старыми играми и программами.

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

  • DPMI стал основой для работы многих игр, которые до сих пор запускаются через DOSBox. Без этого интерфейса эмуляция была бы значительно сложнее.
  • В спецификации DPMI 1.0 была предусмотрена поддержка до 4 ГБ виртуальной памяти, что на момент выхода (1991) казалось фантастикой.
  • Некоторые DPMI-серверы (например, CWSDPMI) распространялись как свободное программное обеспечение и входили в состав многих игр, что способствовало их популярности.
  • В России DPMI активно использовался в игровых клубах и на домашних компьютерах 1990-х годов, где на IBM PC/AT с процессорами 386/486 запускались такие хиты, как Doom и Duke Nukem 3D.

Источники

  • Intel Corporation. Intel 80386 Programmer's Reference Manual. 1986.
  • Microsoft Corporation. MS-DOS 5.0 Technical Reference. 1991.
  • Borland International. Borland C++ 3.1 Programmer's Guide. 1992.
  • Phar Lap Software. Virtual Control Program Interface (VCPI) Specification. 1989.
  • DPMI Committee. DOS Protected Mode Interface (DPMI) Specification, Version 1.0. 1991.
  • Paul, Matthias. The DPMI Specification: A Practical Guide. 1994.
  • DOSBox Team. DOSBox Documentation: DPMI Support. 2002.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →