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

Эмуляция — воспроизведение функций систем

Эмуляция — это процесс воспроизведения функций одного аппаратного или программного устройства с помощью другого устройства или программы, так что эмулируемая система «не замечает» подмены и работает так, как если бы выполнялась на оригинальном оборудовании. Термин происходит от латинского aemulatio — соревнование, подражание. В широком смысле эмуляция охватывает аппаратные эмуляторы (отдельные устройства), программные эмуляторы (программы, работающие под управлением операционной системы) и виртуальные машины.

Основные понятия

Эмуляция тесно связана с двумя смежными понятиями:

  • Эмуляция — воспроизведение поведения системы на уровне функций: программа или устройство воспроизводят набор команд, наблюдаемое поведение и результаты вычислений оригинала, но не обязательно повторяют его внутреннюю архитектуру.
  • Виртуализация — создание изолированного окружения, в котором работает оригинальный код без изменений (например, виртуальная машина). Виртуализация обычно требует совместимости наборов команд процессора.
  • Симуляция — математическое или программное моделирование процесса с акцентом на результат, а не на точное соответствие таймингам и побочным эффектам.

Грань между этими понятиями размыта, и в литературе они часто используются как взаимозаменяемые.

Классификация

По способу реализации различают:

  1. Аппаратные эмуляторы — отдельные устройства, воспроизводящие работу другой машины. Пример: картриджи-переходники для игровых приставок, позволяющие запускать картриджи предыдущего поколения.
  2. Программные эмуляторы — программы, работающие под управлением современной ОС и воспроизводящие поведение старой системы. Наиболее распространённый тип.
  3. Аппаратно-программные комплексы — сочетание специализированного оборудования и управляющего ПО (например, эмуляторы мейнфреймов для тестирования программного обеспечения IBM).

По полноте воспроизведения различают:

  • Функциональную эмуляцию — воспроизведение наблюдаемого поведения (результатов команд, состояния памяти, вывода на экран) без точного копирования таймингов.
  • Тайминг-точную эмуляцию — воспроизведение временных характеристик, что критично для программ, использующих прерывания, таймеры и гонки данных.

Принцип работы программного эмулятора

Программный эмулятор, как правило, состоит из следующих компонентов:

  • Декодер команд — читает байты из эмулируемой памяти, интерпретирует их как инструкции целевой архитектуры.
  • Интерпретатор (цикл исполнения) — выполняет декодированные команды, обновляя виртуальные регистры, флаги и память.
  • Подсистема ввода-вывода — эмулирует периферию: экран, клавиатуру, дисководы, звуковые чипы.
  • Подсистема таймингов — воспроизводит работу таймеров и прерываний.

Скорость программного эмулятора обычно ниже оригинала, поскольку каждая команда эмулируемого процессора выполняется как несколько инструкций хост-процессора. Для ускорения применяется динамическая рекомпиляция (JIT-эмуляция): эмулятор транслирует блоки команд целевой архитектуры в код хост-процессора и кэширует результат.

Области применения

Ретро-гейминг

Наиболее массовая область. Существуют зрелые эмуляторы игровых приставок: NES, SNES, Sega Genesis, PlayStation, Nintendo 64, Game Boy и других. Эмуляция позволяет запускать оригинальные ROM-образы на современном оборудовании, часто с дополнительными возможностями: сохранение состояний, повышение разрешения, фильтрация изображения.

Профессиональная разработка

Эмуляторы мобильных устройств (Android Emulator, iOS Simulator) входят в стандартный набор разработчика. Они позволяют тестировать приложения без физических устройств, эмулируя различные версии ОС и параметры экрана.

Миграция legacy-систем

Эмуляция мейнфреймов (IBM System/360, IBM System/370) и старых мини-компьютеров позволяет продолжать эксплуатацию унаследованного программного обеспечения, написанного десятилетия назад, без доступа к оригинальному оборудованию. Компания IBM предлагает решения для эмуляции собственных мейнфреймов на серверах IBM Z.

Научные исследования

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

Правовые аспекты

Эмуляция программного обеспечения как таковая легальна в большинстве юрисдикций: законно владеть эмулятором и использовать его. Проблемы возникают на уровне ROM-образов и прошивок: их распространение, как правило, нарушает авторские права, если только пользователь не создал образ с собственного законно приобретённого экземпляра. В ряде случаев суды рассматривали дела, связанные с обходом защит от копирования (например, DMCA в США).

История

Практика эмуляции возникла вместе с электронными вычислительными машинами: уже в 1960-е годы мейнфреймы IBM использовали микропрограммную эмуляцию для поддержки программного обеспечения предыдущих моделей. Персональные компьютеры 1980-х годов породили первые любительские эмуляторы домашних компьютеров (ZX Spectrum, Commodore 64). С развитием интернета и ростом вычислительных мощностей эмуляция превратилась в массовое явление.

Источники

  • Голицынский Ю. Б. — «Процессоры. Устройство, программирование, архитектуры, тестируемые системы»
  • Паттерсон Д., Хеннесси Дж. — «Архитектура компьютера»
  • Статьи IEEE и ACM по тематике эмуляции и виртуализации
  • Документация проектов MAME, QEMU, VirtualBox
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru