stringtranslate.com

Симулятор набора инструкций

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

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

Например, IBM 1401 был смоделирован на более поздней IBM/360 с помощью эмуляции микрокода .

Выполнение

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

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

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

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

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

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

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

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

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

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

Последствия

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

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

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

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

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

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

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

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

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

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

Критика

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

Пример

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

 Инструкция смещения  программы Дизассемблированный регистр/хранилище (после выполнения)  TEST001 000000 X'05C0' БАЛР 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' БАЛ R14,X'122'(R12) R14=002C0016SUB1 000124 X'50E0C28A' СТ R14,X'28A'(R12) X'002CE294' ==> X'002C0016'и т. д...

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

Симуляторы

Другой

Ссылки

  1. ^ Хейс, Джон П. (1978). Архитектура и организация компьютера . McGRAW-HILL International Book Company. стр. 51. ISBN 0-07-027363-4.
  2. ^ Almasri, I., Abandah, G., Shhadeh, A., Shahrour, A. (2011, декабрь). Универсальный симулятор ISA с реализацией программного процессора FPGA. В Applied Electrical Engineering and Computing Technologies (AEECT), 2011 IEEE Jordan Conference on (стр. 1–6). IEEE.
  3. «Искусство программирования», Дональд Кнут , 1997, том 1, 3-е издание, страница 202.

Внешние ссылки