Ответы на экзаменационные билеты (2014) (1124173), страница 4
Текст из файла (страница 4)
3.5. Обобщённая архитектура системы имитационного моделирования. Краткое описание функций её компонентов
(лекция 4)
Краткое описание функций её компонентов
4. Важные классы средств имитационного моделирования, специфичные для ИС
4.1. Эмуляторы процессоров. Назначение. Классификация по точности.
(лекция 7)
Эмуля́ция (англ. emulation) в вычислительной технике — комплекс программных, аппаратных средств или их сочетание, предназначенное для копирования (или эмулирования) функций одной вычислительной системы (гостя) на другой, отличной от первой, вычислительной системе (хосте) таким образом, чтобы эмулированное поведение как можно ближе соответствовало поведению оригинальной системы (гостя). Целью является максимально точное воспроизведение поведения
Характеристики эмулятора:
-
Архитектуры host и target
-
Для одной целевой архитектуры
-
Для различных архитектур (retargetable)
-
Точность и детальность
-
Без учёта времени выполнения
-
С потактовой точностью времени (cycle clock accurate)
-
С потактовой точностью (cycle accurate)
Скорость работы
Интерпретирующий эмулятор:
while (!stop())
{
декодировать;
выполнить;
обновить_состояние;
выбрать следующую команду;
}
Эмуляторы с двоичной трансляцией:
Статическая трансляция
-
в C/C++, затем в машинный код для хоста;
-
Напрямую в команды хоста;
-
В команды абстрактной машины.
-
Ускорение – до сотен раз
Динамическая двоичная трансляция:
-
Во время выполнения программы
-
Кэш для результатов трансляции
-
Единица трансляции – как правило, линейный участок (участок программы, в рамках которого не передается управление)
-
Вопросы оптимизации, в т.ч. отображение виртуальных регистров на регистрыхост-машины
-
(рекорд?) 1,6 раз медленнее исполнения на натурной цели [2]
Там еще дофига всего, непонятно куда надо говорить…
Примеры:
-
bochs (http://bochs.sourceforge.net/) - x86 эмулятор.
-
QEMU (http://xgu.ru/wiki/QEMU, http://www.ibm.com/developerworks/ru/library/l-qemu/)
Интерпретатор — простейшая форма эмуляции CPU. Это — программа, которая следует за потоком выполнения программы и для каждой встречающейся машинной инструкции выполняет операции, семантически эквивалентные оригинальным инструкциям, на процессоре хоста. Это возможно назначением переменных для каждого регистра и флага эмулируемого CPU. Логика работы эмулированного CPU может быть с большей или меньшей сложностью реализована в алгоритме программы, создавая программную реализацию, которая в большей или меньшей степени отражает оригинальное оборудование.
Интерпретаторы весьма популярны для моделирования вычислительных машин, так как их реализация намного проще, нежели выигрывающих в производительности других решениях, так как скорость их работы зачастую достаточна для эмуляции компьютеров, которые в буквальном смысле на десяток лет старше современных машин.
Однако применение интерпретации с присущим ей снижением производительности может быть проблемой, когда требуется эмулировать компьютер с процессором, производительность которого соответствует порядку величины производительности процессора хоста. До недавнего времени эмуляция в подобных случаях многими считалась бесполезной.
Преодолеть эти ограничения помог прогресс в технике динамической компиляции. Простая трансляция эмулированного программного кода в код, выполнимый на архитектуре хоста, невозможна априори по нескольким причинам:
-
код может являться самомодифицирующимся, даже если модификация происходит только во время загрузки кода эмулированной операционной системой (например, с диска);
-
может не существовать надежного способа разделения данных (не транслируются) и исполняемого кода.
Чтобы обойти эти проблемы применяют разнообразные приемы, включая известную «компиляцию на лету». Компилятор ожидает, пока поток управления процессором не перейдет в область, содержащую нетранслированный код. Только тогда («на лету») происходит трансляция блока кода в код, который может быть выполнен. Обработанный код помещается в кэш кода, при этом оригинальный код не подвергается изменению. В таком случае даже блоки данных подвергнутся бессмысленной трансляции компилятором, единственным эффектом чего будет увеличение времени работы транслятора.
4.2. Способы быстрой эмуляции процессоров.
(видимо тоже лекция 7, но что именно??)
Полностью программные средства
bochs (http://bochs.sourceforge.net) - можно эмуляровать x86 процессор на любых хостах (под который можно собрать bochs). Можно было запускать винду (win95, win98) на древних КПК (на раньше работали на XScale или mips процессорах). Производительность низкая, но win31 пользоваться было можно (что реально хороших результат, т.к процессор эмулируется полностью программно)
QEMU - быстрая эмуляция процессоров на современном железе. Динамичекая трансляция адресов и использованое аппаратных возможностей CPU. Для виртуализации устройств может использовать VT-d (виртуализация ввода-вывода), VT-x (виртуализация страниц).
VMWare - эмуляция некоторого функционала процессора (счетчики инструкций, ). Эмуляция устройств. Скорость работы за счет аппаратной виртуализации не отличается от скорость работы на хост машине.
IBM System/Z (http://www-03.ibm.com/systems/ru/z/hardware/). Может эмулировать старые процессоры IBM для работы старых программ. Быстро за счет аппаратной эмуляции. Низкая распространенность (самая дешевая конфигурация от 1миллиона USD). Используется во всяких фирмах, где простой может очень дорого обойтись (биржи, банки, управление ответственными системами и тд).
JIT компиляция
Java - создается некоторый байткод, который выполняется виртуальной машиной Java. Для каждого хоста используется своя виртуальная машина, использующая возможности конкретного процессора. Есть java для встраиваемых решений - смарткарты (банковские), Maxim integrated (http://www.maximintegrated.com/en/products/ibutton/jibkit/javaringfaq.cfm). Формфактор - ключ-таблетка (как от домофонов), при этом можно писать программу на java и она будет выполняться на этом устройстве.
Python - аналогично. Генерируется байткод для выполнения на хост машине.
LLVM - low level virtual machine. Компилятор (например, CLang) генерирует набор llvm инструкций, которые можно преобразовать в команды целевой машины. При динамической эмуляции можно во время выполнения осуществлять декомпиляцию конкретной архитектуры (брать из кэша уже дизассемблированного кода), генерировать по ним LLVM и генерировать инструкции хост машины. В данном случае будет происходить эмуляция почти без потери скорости работы (но нужно отдельно отслеживать самомодифицирующийся код, т.к из-за него может все сломаться).
4.3. Основные виды сверхбольших интегральных схем (СБИС). Уровни моделирования и проектирования аппаратных средств ИС.
(лекция 8)
Основные виды БИС:
-
Для заданной области применения (ASIC)
-
Широкого применения (Application specific standard products, ASSP) (микропроцессоры, модули памяти, контроллеры интерфейсов, видеодекодеры …) – крупные производители, большие тиражи, сторонние потребители;
-
Заказные (фильтры, коммутаторы …) – меньшие тиражи, возможность изготовить «для себя»
-
ASIC (аббревиатура от англ. application-specific integrated circuit, «интегральная схема специального назначения») — интегральная схема, специализированная для решения конкретной задачи. В отличие от интегральных схем общего назначения, специализированные интегральные схемы применяются в конкретном устройстве и выполняют строго ограниченные функции, характерные только для данного устройства; вследствие этого выполнение функций происходит быстрее и, в конечном счёте, дешевле. Примером ASIC может являться микросхема, разработанная исключительно для управления мобильным телефоном, микросхемы аппаратного кодирования/декодирования аудио- и видео-сигналов (сигнальные процессоры).
Микросхема ASIC имеет узкий круг применения, обусловленный жёстко предопределённым набором её функций.
Современные ASIC часто содержат 32-битный процессор, блоки памяти (как ПЗУ, так и ОЗУ) и другие крупные блоки. Такие ASIC часто называют система на кристалле (англ. System-on-a-Chip).
При разработке цифровых ASIC для описания их функциональности используют языки описания аппаратных устройств (HDL), такие как Verilog и VHDL.
-
Вентильные матрицы (полузаказные)
-
часть слоёв металлизации делается по заказу
-
-
Программируемые логические матрицы (FPGA)
-
Набор базовых ячеек
-
Переключатели связей между ячейками
-
Загрузка конфигурации по специальному интерфейсу
-
Программи́руемая по́льзователем ве́нтильная ма́трица (ППВМ, англ. Field-Programmable Gate Array, FPGA) — полупроводниковое устройство, которое может быть сконфигурировано производителем или разработчиком после изготовления; отсюда название: «программируемая пользователем». ППВМ программируются путём изменения логики работы принципиальной схемы, например, с помощью исходного кода на языке проектирования (типа VHDL), на котором можно описать эту логику работы микросхемы. ППВМ является одной из архитектурных разновидностей программируемых логических интегральных схем (ПЛИС).
ППВМ могут быть модифицированы практически в любой момент в процессе их использования. Они состоят из конфигурируемых логических блоков, подобных переключателям с множеством входов и одним выходом (логические вентили или gates). В цифровых схемах такие переключатели реализуют базовые двоичные операции AND, NAND, OR, NOR и XOR. В большинстве современных микропроцессоров функции логических блоков фиксированы и не могут модифицироваться. Принципиальное отличие ППВМ состоит в том, что и функции блоков, и конфигурация соединений между ними могут меняться с помощью специальных сигналов, посылаемых схеме. В некоторых специализированных интегральных схемах (ASIC) используются логические матрицы, аналогичные ППВМ по структуре, однако они конфигурируются один раз в процессе производства, в то время как ППВМ могут постоянно перепрограммироваться и менять топологию соединений в процессе использования. Однако, такая гибкость требует существенного увеличения количества транзисторов микросхемы.
CPLD (англ. Complex Programmable Logic Device) — программируемая логическая интегральная схема (ПЛИС) в диапазоне сложности между микросхемами PAL (англ.) (Programmable Array Logic) и FPGA (англ. Field-Programmable Gate Array), сочетающая их архитектурные решения. Основой CPLD является матрица макроячеек, в которой реализованы логические соединения вентилей или более сложные логические операции. Блоки макроячеек объединены программируемой коммутационной матрицей с последующим выходом на входы (выходы) схемы. Главным отличием между большими CPLD и малыми FPGA до недавних пор было наличие внутренней энергонезависимой конфигурационной памяти в CPLD. Это отличие становится уже не столь значимым, поскольку ряд последних моделей FPGA также включают такую внутреннюю память. Тем не менее, наличие такой внутренней энергонезависимой конфигурационной памяти, наряду с такой важной характеристой, как устойчивость показателей, делают CPLD незаменимыми для современных цифровых схем в качестве устройства для инициализации схемы, перед тем, как передать управление другим микросхемам, не обладающим такой способностью.