Эмуляция — воспроизведение функций систем¶
Эмуляция — это процесс воспроизведения функций одного аппаратного или программного устройства с помощью другого устройства или программы, так что эмулируемая система «не замечает» подмены и работает так, как если бы выполнялась на оригинальном оборудовании. Термин происходит от латинского aemulatio — соревнование, подражание. В широком смысле эмуляция охватывает аппаратные эмуляторы (отдельные устройства), программные эмуляторы (программы, работающие под управлением операционной системы) и виртуальные машины.
¶Основные понятия
Эмуляция тесно связана с двумя смежными понятиями:
- Эмуляция — воспроизведение поведения системы на уровне функций: программа или устройство воспроизводят набор команд, наблюдаемое поведение и результаты вычислений оригинала, но не обязательно повторяют его внутреннюю архитектуру.
- Виртуализация — создание изолированного окружения, в котором работает оригинальный код без изменений (например, виртуальная машина). Виртуализация обычно требует совместимости наборов команд процессора.
- Симуляция — математическое или программное моделирование процесса с акцентом на результат, а не на точное соответствие таймингам и побочным эффектам.
Грань между этими понятиями размыта, и в литературе они часто используются как взаимозаменяемые.
¶Классификация
По способу реализации различают:
- Аппаратные эмуляторы — отдельные устройства, воспроизводящие работу другой машины. Пример: картриджи-переходники для игровых приставок, позволяющие запускать картриджи предыдущего поколения.
- Программные эмуляторы — программы, работающие под управлением современной ОС и воспроизводящие поведение старой системы. Наиболее распространённый тип.
- Аппаратно-программные комплексы — сочетание специализированного оборудования и управляющего ПО (например, эмуляторы мейнфреймов для тестирования программного обеспечения 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
