Простым и доступным языком об основных терминах из области симуляторов, а также типах и уровнях детализации моделей.
Материал для легкого и быстрого ознакомления с этой областью.
Если бы вы спросили меня о симуляции какое-то время назад, первое, что пришло бы на ум, — это рассказ моего сына о боли в животе накануне контрольной в школе.
Однако последние десять лет я работаю с симуляторами различных компьютерных систем, от телефонов до серверов, на базе микропроцессоров, SOC (System-On-Chip) и чипсетов одного из крупнейших производителей (к сожалению, название скрыто).
NDA), и мое понимание симуляции изменилось.
Но обо всем по порядку.
Я уверен, что многие из вас сталкивались с симуляторами, часто называемыми виртуальными машинами, гипервизорами.
Кто-то устанавливает Parallels Studio на свой Mac, чтобы запустить Windows из MacOS, кто-то использует продукт от VmWare — Workstation, чтобы запустить другую операционную систему (ОС) внутри уже установленной.
Те, кто знаком с Linux, предпочитают KVM и QEMU. VirtualBox также популярен среди людей.
Люди, профессионально занимающиеся разработкой оборудования на базе FPGA (Programmable Logic Integrated Circuit), знают о VCS от Synopsys и Mentor Graphics Questa. И все же это лишь малая часть того, что можно назвать симуляторами.
Что такое симулятор?
Симулятор — это модель (обычно программная) реального устройства.Соответственно, моделирование – это процесс эксплуатации такой модели, повторяющий работу устройства.
В принципе, можно сделать модель любого устройства, но наиболее распространены симуляторы микропроцессорных устройств, то есть устройств, центральным компонентом которых является микропроцессор, а вокруг него построена остальная логика.
Одним из основных вариантов использования симулятора является запуск программ, предназначенных для этого самого микропроцессора.
В то же время использование реального устройства по тем или иным причинам затруднено; например, его может просто еще не существовать, если мы говорим о моделировании будущего поколения микропроцессоров.
Airbnb в симуляции – гость и хозяин
Код, который выполняется внутри симулятора, называется «гостевым кодом» и может быть «гостевой программой» или целой «гостевой операционной системой».Сама моделируемая система называется просто «гостевой».
В свою очередь, система, компьютер, на котором работает симулятор, называется «хостом», а операционная система, работающая на хосте, на котором работает симулятор, называется «хостовой ОС».
Таким образом, можно сказать, что симулятор, реализующий определенный набор инструкций гостевой системы, моделирует их с помощью доступных инструментов хост-системы.
Моделирование и эмуляция – какое название правильное?
Модель может воспроизводить устройство с различной степенью точности и детализации.Зачастую это моделирование лишь внешнего поведения системы, доступного программному коду.
Ведь коду «все равно», как именно реализована внутри та или иная инструкция процессора — главное, чтобы она работала.
Эта версия симулятора распространена, не сложна в разработке, довольно быстра и не тормозит даже на компьютерах обычных пользователей.
Однако этого недостаточно, если мы хотим узнать, например, как долго программа будет работать на реальном оборудовании.
Для этого требуется моделирование не только внешнего поведения, но и повторение внутренней структуры и логики работы.
Это тоже можно сделать с разной степенью детализации и точности.
Такие модели правильнее называть эмуляторами, которые фактически эмулируют работу устройства, а не «симулируют» результаты.
Создавать эмуляторы гораздо сложнее из-за большего объема функционала, который необходимо реализовать в модели.
Также они работают гораздо медленнее по сравнению с симуляторами внешнего поведения устройства.
При использовании эмуляторов вопрос запуска Windows вообще не стоит — это может занять годы.
Программный эмулятор всей платформы никто не создает — это очень долго и дорого.
Вместо этого эмулируются отдельные компоненты системы, например тот же центральный процессор, и на нем запускается только часть процесса моделирования.
Возможны различные гибридные схемы, когда часть симулятора представляет собой высокоуровневую модель, часть — низкоуровневую модель, часть — в ПЛИС, а часть — собственно настоящую железку.
4 уровня детализации моделирования
Как я писал выше, наиболее распространенным вариантом является симуляция на уровне инструкций процессора, так называемая ISA (Instruction Set Architecture), или, точнее, результат их выполнения, т.е.без эмуляции всей внутренней логики того, как это происходит. происходит в реальном процессоре, причем без учета времени выполнения различных инструкций.
Именно такие тренажеры еще называют функциональными.
Так работают VirtualBox, Vmware Workstation, Wind River Simics, KVM и QEMU. Это позволяет удобно, без лишних дополнительных действий, запускать программы, предназначенные для моделируемого устройства.
Другими словами, не требуется ни перекомпиляции, ни каких-либо других манипуляций с запускаемыми программами.
В таких случаях говорят, что можно запустить немодифицированный двоичный код. Если говорить о более высоком уровне абстракции, то это будет реализация некоего ABI (Application Binary Interface).
В двух словах, ABI описывает двоичный интерфейс между двумя программами — обычно пользовательской программой и библиотекой или ОС.
ABI охватывает соглашения о вызовах (как передавать параметры и возвращаемые значения), размеры типов данных и выполнение системных вызовов.
Как это работает? Например, если программе, написанной для Linux, необходимо создать дополнительный поток выполнения, то вызывается функция pthread_create().
Что, если мы сделаем библиотеку с такой функцией в Windows и реализуем необходимые механизмы связывания приложения и библиотеки (динамическое связывание)? В этом случае можно будет запускать приложения Linux из Windows. Windows будет «имитировать» Linux. Именно это было сделано в подсистеме Windows для Linux в Windows 10, которая позволяет запускать немодифицированные бинарные приложения Linux в Windows. Теперь давайте посмотрим, как выглядят низкоуровневые и детальные уровни симуляции.
Это будет уровень микроархитектуры, на котором моделируются реальные внутренние алгоритмы и блоки процессора, такие как декодер команд, очереди, блок обработки ошибок, предсказатель ветвей, кэш, планировщик и сами счетные устройства.
Такое моделирование позволяет анализировать реальную скорость выполнения программ и, например, оптимизировать их под существующие архитектуры.
А в случае моделирования прототипов будущих микропроцессоров можно спрогнозировать и оценить производительность этих устройств.
Ниже уровня микроархитектурного моделирования находится уровень эмуляции логических элементов, из которых состоят современные микросхемы.
Такие эмуляторы бывают как программными, так и аппаратными с использованием FPGA. Логика FPGA описывается с помощью RTL (Register Transfer Level) в Verilog, VHDL и т.п.
После компиляции получается изображение (битовый поток), которое затем прошивается в FPGA. Причем для этого не нужно пользоваться паяльником или разбираться в электротехнике.
Плата подключается к компьютеру, например, через интерфейс USB или JTAG, а запись осуществляет специальное программное обеспечение от производителя платы FPGA. Стоимость таких плат начинается от десяти долларов за самые простые варианты до миллионов долларов за большие кабинетные стенды FPGA, используемые в крупных компаниях-производителях микросхем.
В таких компаниях моделирование на основе FPGA является заключительным этапом перед выпуском RTL в производство.
Если речь идет о простых устройствах, то, имея на руках образ ПЛИС, можно обратиться в специализированные компании, которые сделают реальное (не ПЛИС) устройство с запрограммированной логикой.
На рисунке ниже показаны описанные уровни моделирования.
Помимо этих уровней симуляции, я также сталкивался с гибридными симуляциями.
По сути, это связанные друг с другом симуляторы, моделирующие разные части системы на разных уровнях.
Например, необходимо проанализировать пропускную способность новой сетевой карты, работающей совместно с драйвером, разрабатываемым для конкретной ОС.
Такое сетевое устройство, как и ряд сопутствующих устройств, может быть реализовано сначала на микроархитектурном уровне для предварительного анализа, а затем в ПЛИС, на уровне логических элементов, для финальных проверок.
При этом остальная часть системы, задействованная лишь частично, реализована на уровне команд. Без этого не обойтись, так как необходимо, например, загрузить ОС, а реализовывать это на более низком и более сложном уровне нет смысла.
А как насчет сравнения симуляций и реальности? Как теперь понятно, нет цели сделать тот или иной симулятор максимально похожим на реальность.
Есть задача, поставленная бизнесом, и моделирование выполняется со степенью «подобия» реальности, минимально достаточной для решения этой задачи без затрат дополнительных денег и времени.
В одном случае это может быть простая библиотека, реализующая необходимый бинарный интерфейс (ABI), а в другом нельзя использовать детальный симулятор микроархитектуры.
Это самая основная информация о том, что такое симуляторы и какие они бывают. В следующей статье я опишу детали реализации полноплатформенных симуляторов, часовых моделей и работы с трассировками.
Теги: #Производство и разработка электроники #Виртуализация #эмулятор #Системный анализ и проектирование #симулятор #гипервизор #Аурига
-
Что Нового И Что Изменилось В Windows 7?
19 Oct, 24 -
Автомобили Tesla Начали Появляться В России
19 Oct, 24 -
Давай Дружить... Тараканы
19 Oct, 24 -
Ближе К Людям.
19 Oct, 24 -
Кто Есть Кто В Облаках, Часть 2
19 Oct, 24