Эмуляция и виртуализация

Редакция 2020.02.19

Вы когда-нибудь задумывались, как разрабатываются управляющие программы для смартфонов, планшетных компьютеров, музыкальных центров и другого оборудования, например, для валидаторов проездных карт? Вы когда-нибудь хотели узнать, как в корпорации Microsoft пишут свою знаменитую операционную систему? Тогда наступило время узнать об используемых для этого эмуляторах и виртуализации.

Обратимся к тому, что написано про них в “Википедии” и дадим из неё пару определений:
 
“Эмуляция (англ. emulation) в вычислительной технике - комплекс программных, аппаратных средств или их сочетание, предназначенное для копирования (или эмулирования) функций одной вычислительной системы (гостя) на другой, отличной от первой, вычислительной системе (хосте) таким образом, чтобы эмулированное поведение как можно ближе соответствовало поведению оригинальной системы (гостя).”

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

Как очевидно из определений, эмуляторы и системы виртуализации могут использоваться для запуска на одном компьютере нескольких операционных систем и программного обеспечения, эмулирующего аппаратные функции отсутствующего оборудования при условии, что ваше является более мощным и производительным. Например, вы можете, работая под Windows инсталлировать в виртуальную машину один из клонов Linux, и даже Mac OS, или наоборот, работая под Linux запускать в виртуальной машине Windows.
 
У вас может появится необходимость запустить под вашей штатной операционкой устаревшие программы для DOS, или игры для компьютеров ZX Spectrum, которые там, что вполне естественно, не поддерживается. Здесь вам также окажут неоценимую помощь эмуляторы и виртуальные машины. Не обойтись без них, если вы накопили денег и приобрели MacBook с операционной системой Mac OS, но программ, к которым вы привыкли, работая под Windows там по разным причинам нет. Вас выручат проверенные временем решения от компании VMWare - программный комплекс Fusion и от компании Oracle – их виртуальная машина VM Virtual Box. Они позволят на Макинтоше запустить Windows и всё, что вам так необходимо.

Решения от VMWare более требовательны к аппаратуре – для запуска последних версий их программ (VMWare Fusion, VMWare Workstation Pro) требуется аппаратная поддержка виртуализации, многократно увеличивающей скорость работы гостевых систем и приложений, имеющаяся только в некоторых процессорах Intel и AMD, выпускаемых с 2011 года. Oracle VM Virtual Box на данный момент является более продвинутой программой, так как она может выполнятся и на более старом “железе”, программно эмулируя необходимые устройства и функции. Плюс к этому, компания Oracle предоставляет свой продукт на условиях свободной лицензии GNU GPL v2, являющейся стандартом для открытого программного обеспечения. Платным для коммерческих нужд в этом продукте является только модуль Virtual Box Extension Pack, поставляемый по лицензии PUEL. Он не обязателен к установке и поддерживает высокоскоростную эмуляцию и работу устройств USB 2.0, USB 3.0, некоторых графических адаптеров, RDP сервера для удаленного управления, а также сетевую загрузку на базе Intel PXE. Правда, вскоре и Virtual Box, согласно их планам разработки, обязательно будет требовать возможности аппаратной виртуализации, ветки с программной будут поддерживаться только до середины 2020 года.

Тем, кто трудится под Linux, но иногда использует программы Windows поможет великолепный инструмент Wine. Расшифровывается его название как “Wine is not emulator”, а сама программа является независимой реализацией Win32 API (Application Program Interface), позволяющей запускать на Unix подобных системах большое количество Windows программ, включая игры и даже бухгалтерскую систему 1С. Независимые порты Wine существуют для операционных систем FreeBSD и Mac OS.

Наиболее известные решения в области программной виртуализации, кроме уже указанных VMWare и Oracle, предлагают также компания Microsoft и разработчики Linux. История виртуализации восходит корнями ещё к 1960м годам XX века, когда она впервые начала использоваться сотрудниками компании IBM для выпуска новых компьютеров и операционных систем для них. 

Эмуляция позволяет создавать и отлаживать программы для микроконтроллеров, бытовой техники, специализированной аппаратуры и любых приборов, которые построены на элементной базе, отличной от имеющейся в составе рабочего компьютера. Этот способ часто используют в лабораториях, институтах, научно-исследовательских центрах или на заводах для разработки и внедрения новой техники. Например, для низкоуровневой разработки под процессоры серий i8051 или ARM, многими с успехом используется программный пакет Keil µVision, включающий в себя интегрированную среду разработки (IDE), позволяющую писать и отлаживать программы на языках C, C++, Assembler, а также перепрошивать поддерживающие эту операцию устройства. На старших курсах у нас в университете даже были лабораторные работы в этом пакете.

Режим эмуляции также позволяет новому или построенному по другой технологии устройству выглядеть в приложениях как более старое или более распространённое. Например, многие современные принтеры умеют эмулировать режим работы принтеров компании Hewlett Packard, что позволяет им использовать для печати совместимые драйвера этой компании.

Входящий в комплект среды разработки Android Studio эмулятор AVD (Android Virtual Device) – это специализированная виртуальная машина для запуска и отладки Android-приложений. Она используется при достаточном количестве оперативной памяти на компьютере разработчика и при отсутствии аппаратуры с нужной версией операционной системы Android. Он поддерживает все версии Android API, разные типы процессоров от x86 до ARM32, ARM64-совместимых и разные конфигурации устройств с предустановленными программного обеспечения, включая Android TV и Android Wear. Это решение позволяет экономить деньги на тестировании разрабатываемых программ – ведь если бы не было AVD, то программистам, для того, чтобы убедится в правильном функционировании их программ, пришлось бы приобретать все возможные конфигурации устройств Android – смартфоны с разными версиями этой системы, планшеты, умные часы и телевизоры со Smart TV.
 
В виртуальной машине возможен запуск нескольких операционных систем в целях их изучения, тестирования на совместимость или для экономии средств на закупку нового оборудования. Переместимся на десять лет назад и предположим, что вы работаете в компании, в которой уже достаточно давно был приобретён парк компьютеров с операционной системой Windows XP. Сотрудники жалуются на их производительность, руководство готово рассмотреть вопрос о приобретении нового “железа”, на которое планируется установить недавно вышедшую операционную систему Windows 7. Но перед этим, чтобы минимизировать расходы на приобретение лицензий, систему надо протестировать на совместимость с имеющимися в эксплуатации программными комплексами и определить, какое из старого программного обеспечения будет на ней функционировать, а какое обязательно придется менять, заодно отправив персонал на курсы переподготовки.

Уверен, что в 2020 году эта ситуация повторится, так как Windows 7 снята с поддержки, а всем её пользователям Microsoft рекомендует перейти на более новую систему Windows 10, для чего иногда требуется закупка более мощного компьютерного оборудования. Во всех этих случаях вам на помощь придет среда виртуализации, которая поможет изучить новые продукты, протестировать на совместимость и, подсчитав затраты на закупку оборудования и лицензий, минимизировать их. 

В виртуальной машине возможен запуск устаревших операционных систем, для которых требуется отсутствующая в наличии аппаратура. Может случиться, что на вашем предприятии вышло из строя оборудование старого компьютера с операционной системой класса Windows 2000 Server, на котором был установлен Microsoft SQL Server или Oracle Database 8, и именно в этих базах данных хранила информацию ваша бухгалтерия. Предположим, что достать оборудование с аналогичными характеристиками нет возможности по причине его отсутствия на рынке. Однако, если у вас есть необходимые лицензии на программное обеспечение и навыки, в течение пары дней вы сможете установить на имеющемся в наличии высокопроизводительном современном сервере систему виртуализации, в которую добавите Windows 2000 Server, базу данных, перенесёте туда данные бухгалтерии, наладите сетевые интерфейсы и подключите к привычной системе корпоративных пользователей, которые даже не заметят, что сервер, к которому они обращаются теперь не физический, а виртуальный.
 
Возможен запуск в виртуальной машине операционной системы и с целью тестирования и отладки разрабатываемых программ, драйверов оборудования или компонентов самой ОС. Этот приём часто используется профессиональными тестировщиками и разработчиками программного обеспечения. Они прекрасно знают, что за последние 30 лет только пользовательских операционных систем класса Windows выпущено не менее 12 штук: Windows 3.0, Windows 95, Windows 98 SE, Windows Millenium, Windows 3.5, Windows 4.0, Windows 2000, Windows XP, Windows Vista, Windows 7, Windows 8, Windows 10. Кроме этого, существуют различия в их версиях и пакетах обновления, которые увеличивают количество возможных комбинаций в десятки и сотни раз, а также серверные версии этих операционных систем.

Какая комбинация операционной системы и разрабатываемого вашей фирмой программного обеспечения окажется сбойной и вызовет проблемы у клиента, не знает даже господь бог. Вследствие чего имеет смысл создать виртуальные машины с предустановленными образами поддерживаемых вашим продуктом операционок и использовать их чистые версии каждый раз при попытке воспроизведения проблемы с разрабатываемой программой. Они помогут и программистам – в некоторых средах виртуализации присутствует возможность связи гостевой системы с хостом и отладки штатными средствами. Единственное, что не получится – это отладить антивирусное программное обеспечение, и вообще что-то, что не относится к выпускаемому сторонней фирмой продукту, вследствие работы системы защиты. 

Для программного обеспечения из которого состоят гостевая система и гипервизор, при наличии смекалки и лицензий, можно даже устроить стресс-тест. Например, собрать их друг в друга по принципу матрёшки, чтобы проверить итоговую работоспособность и производительность. У меня получилось собрать такую “матрёшку” на старом, двенадцатилетней давности компьютере c минимальным количеством оперативной памяти. Состояла она из установленной на хосте операционной системы Windows, в которую был инсталлирован программный гипервизор – виртуальная машина Oracle VM Virtual Box. В нём были выделены ресурсы, эмулирующие аппаратуру, необходимую для установки, запуска и функционирования операционной системы Mandriva, включая эмуляцию сетевой и звуковой карты. После установки и настройки гостевой операционной системы в неё была установлена упомянутая выше программа Wine – независимая реализация API Win32, штатно входящая в дистрибутив Mandriva. Потом, подключившись к сети Интернет, я скачал с сайта разработчика моего любимого свободного аудиоплеера AIMP Артёма Измайлова, одну из старых версий его программы, и благополучно установил её в WINE. На скриншоте, приложенном к этой статье вы можете убедится в том, что “матрёшка”, собранная из эмуляторов и систем виртуализации, превосходно работает. Даже аудиофайлы воспроизводит.

Список литературы:

- Фредерик Брукс “Мифический человеко-месяц или как создаются программные системы”, 2е издание, 2000
- Интернет-энциклопедия “Wikipedia”, статьи
 VMWare
 VirtualBox
 Wine
 AVD
 Keil µVision


Рецензии