Симулятор набора инструкций - Википедия - Instruction set simulator

An симулятор набора команд (ISS) - это симуляция модель, обычно кодируется язык программирования высокого уровня, который имитирует поведение мэйнфрейма или микропроцессор путем "чтения" инструкций и поддержания внутренних переменных, которые представляют регистры.

Симуляция инструкции это методология, используемая по одной из нескольких возможных причин:

Например, IBM 1401 был смоделирован на более позднем IBM / 360 посредством использования микрокод подражание.

Выполнение

МКС часто снабжается (или сама является) отладчик для того, чтобы инженер-программист /программист для отладки программы до получения целевого оборудования. GDB это один отладчик, который скомпилировал ISS. Иногда его интегрируют с смоделированными периферийными схемами, такими как таймеры, прерывает, последовательные порты, Общее Порты ввода / вывода и т. д., чтобы имитировать поведение микроконтроллер.

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

Затем целевая программа загружается в память, но управление никогда не передается коду. Вместо этого входная точка внутри загруженной программы вычисляется, и псевдо слово состояния программы (PSW) установлен в это место. Набор псевдо регистры установлены на то, что они содержали бы, если бы программе было дано прямое управление.

В зависимости от аппаратного обеспечения и операционной системы может потребоваться изменить некоторые из них, чтобы указать на другие псевдо «блоки управления». Также может потребоваться сбросить исходный список параметров, чтобы «убрать» ранее добавленный параметр имени программы.

После этого исполнение происходит следующим образом:

  1. Определите длину инструкции в местоположении псевдо PSW (первоначально первая инструкция в целевой программе). Если это смещение инструкции в программе соответствует набору ранее заданных точек «паузы», установите причину «паузы», перейдите к 7.
  2. «Извлечь» инструкцию из исходного места (если необходимо) в память монитора. Если «трассировка» доступна и «включена», сохраните имя программы, смещение инструкции и любые другие значения.
  3. В зависимости от типа инструкции выполните проверки перед выполнением и выполните. Если инструкция не может выполняться по какой-либо причине (неверная инструкция, неправильный режим и т. Д.), Перейдите к 7. Если инструкция собирается изменить память, проверьте, существует ли место назначения в памяти (для этого нить ) и достаточно большой. Если все в порядке, загрузите соответствующие псевдорегистры во временные реальные регистры, выполните эквивалентное перемещение с реальными регистрами, сохраните адрес и длину измененного хранилища, если трассировка «включена», и перейдите к 4. Если инструкция является «регистр-регистр» операции, загрузить псевдорегистры в реальные регистры монитора, выполнить операцию, сохранить обратно в соответствующие псевдорегистры, перейти к 4. Если инструкция является условным переходом, определить, удовлетворяется ли условие: если нет, перейдите к 4, если условие выполнено, вычислить переход к адресу, определить, действителен ли он (если нет, установите error = "Дикая ветка ") и перейдите к 7. Если все в порядке, перейдите к 5. Если инструкция является вызовом операционной системы, выполните реальный вызов из программы мониторинга путем" подделки "адресов, чтобы вернуть управление программе мониторинга, а затем сбросьте псевдорегистры, чтобы отразить вызов; 4.
  4. Добавьте длину инструкции к текущему значению Pseudo PSW.
  5. Сохранить следующий адрес в Pseudo PSW.
  6. Перейти к 1.
  7. Остановить казнь.

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

Моделирование инструкций дает возможность обнаруживать ошибки ПЕРЕД выполнением, что означает, что условия остаются в точности такими, какими они были, и не уничтожаются ошибкой. Очень хороший пример из IBM S / 360 world - это следующая последовательность инструкций, которая может вызвать трудности при отладке без монитора симуляции инструкций.

     LM R14, R12,12 (R13) где r13 неправильно указывает на строку X "00" s BR R14 заставляет PSW содержать X "0000002" с программной проверкой "Operation Exception" * все регистры при ошибке содержат нули.

Последствия

Накладные расходы

Количество инструкций для выполнения вышеуказанного базового «цикла» (выборка / выполнение / вычисление нового адреса) зависит от оборудования, но его можно выполнить на IBM S / 360 / 370/390 / ES9000 диапазон машин примерно с 12 или 13 инструкциями для многих типов инструкций. Проверка допустимых мест в памяти или условных "пауз" значительно увеличивает накладные расходы, но методы оптимизации могут снизить их до приемлемого уровня. Для целей тестирования это обычно вполне приемлемо, поскольку предоставляются мощные возможности отладки, включая шаг инструкции, трассировка и преднамеренный переход к процедуре проверки ошибок (когда фактических ошибок нет). Кроме того, полную трассировку инструкции можно использовать для проверки фактических (выполненных) покрытие кода.

Дополнительные преимущества

Иногда наблюдение за выполнением целевой программы может помочь выделить случайный ошибки, которые появляются (или иногда исчезают) во время мониторинга, но не при реальном выполнении. Это может произойти, когда целевая программа загружается в другом месте, чем обычно, из-за физического присутствия программы мониторинга в том же адресном пространстве.

Если целевая программа берет значение из «случайного» места в памяти (обычно не «принадлежит»), оно может быть, например, нулем (X «00») почти в каждой нормальной ситуации, и программа работает нормально. . Если программа мониторинга сдвигает точку загрузки, она может уловить, скажем, X «FF», и логика приведет к другим результатам во время операции сравнения. В качестве альтернативы, если программа мониторинга теперь занимает место, откуда «берется» значение, могут возникнуть аналогичные результаты.

Ошибки повторного входа: случайное использование статические переменные вместо «динамической» памяти потока во многих ситуациях могут возникнуть проблемы с повторным входом. Использование программы мониторинга может обнаружить их даже без ключ защиты хранилища.

Незаконные операции: некоторые операционные системы (или оборудование) требуют, чтобы прикладная программа находилась в правильном «режиме» для определенных вызовов операционной системы. Моделирование инструкций может обнаружить эти условия перед выполнением.

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

Образовательные цели

Некоторые из этих программных симуляторов еще предстоит использовать в качестве инструментов для обучения языку ассемблера и архитектуре набора команд, а некоторые специально разработаны с использованием нескольких слоев симуляции и симуляции ISA-ISA, с возможностью даже конструировать ISA и моделировать их.[1]

Критика

В первом томе Искусство программирования, Дональд Кнут писал: «По мнению автора, слишком много времени программисты было потрачено на написание таких симуляторов [машинного языка], и слишком много компьютерного времени было потрачено впустую на их использование».[2] Однако в следующем разделе автор приводит примеры того, как такие симуляторы могут быть полезны в качестве процедур трассировки или мониторинга для целей отладки.

Пример

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

Программа        компенсировать         инструкция            В разобранном виде             регистр / хранение (после выполнения) TEST001 000000 X'05C0 'BALR R12,0 R12 = 002CE00A 000002 X'47F0C00E' BC 15, X'00C '(R12) 00000E X'98ECD00C' STM R14, R12, X'00C '(R13) X '002E0008' ==> X'00004CE, 002CE008 и т. Д. '000012 X'45E0C122' BAL R14, X'122 '(R12) R14 = 002C0016SUB1 000124 X'50E0C28A' ST R14, X'28A ' (R12) X'002CE294 '==> X'002C0016'etc ...

Смотрите также

Симуляторы

  • INTERP / 8 для Intel 8008 и INTERP / 80 для Intel 8080.
  • Симулятор компьютерной архитектуры
  • Маленький компьютер человека для простого примера симулятора набора инструкций на основе Java-апплета
  • MikroSim: Симулятор ЦП, позволяющий определять набор команд на уровне микрокода для использования в образовательных целях.
  • ARM Fastsim: Симуляторы ЦП для ARM архитектура, предоставляемый самой ARM в качестве справочного материала и средства разработки программного обеспечения.
  • Simics: ЦП и полная структура симулятора системы, построение полных моделей сложного современного оборудования.
  • OVPsim: ЦП и полный симулятор системы, обеспечивающий более 170 моделей процессоров с точными инструкциями. Позволяет пользовательским наборам команд.
  • CPU Sim, приложение Java, которое позволяет пользователю проектировать и создавать набор инструкций, а затем запускать программы инструкций из набора посредством моделирования.
  • Сулима, симулятор набора команд

Другой

Рекомендации

  1. ^ Алмасри, И., Абанда, Г., Шадех, А., и Шахрур, А. (2011, декабрь). Универсальный симулятор ISA с программной реализацией ПЛИС процессора. В «Прикладной электротехнике и вычислительных технологиях» (AEECT), Конференция IEEE в Иордании, 2011 г. (стр. 1-6). IEEE.
  2. ^ «Искусство программирования», Дональд Кнут, 1997, том 1, издание 3-е, стр. 202.

внешняя ссылка

  • «Микрокодезимулятор MikroSim 2010». 0/1-SimWare. Получено 2010-12-06.
  • «Моделирование и отслеживание на уровне инструкций»
  • Imperas предоставить ISS для более чем 170 вариантов процессоров для ARM, ARMv8, MIPS, MIPS64, PowerPC, RISC-V, ARC, Nios-II, MicroBlaze ISA.