Симулятор набора команд ( ISS ) — это имитационная модель , обычно закодированная на языке программирования высокого уровня , которая имитирует поведение мэйнфрейма или микропроцессора путем «чтения» инструкций и поддержания внутренних переменных, которые представляют регистры процессора .
Моделирование инструкций — это методология, используемая по одной из нескольких возможных причин:
Симуляторы с набором инструкций могут быть реализованы с использованием трех основных методов:
ISS часто снабжена (или сама является) отладчиком , чтобы инженер-программист / программист мог отладить программу до получения целевого оборудования. GDB — это отладчик со встроенным ISS. Иногда его интегрируют с моделируемыми периферийными схемами, такими как таймеры , прерывания , последовательные порты , общие порты ввода-вывода и т. д., чтобы имитировать поведение микроконтроллера .
Базовый метод моделирования команд одинаков, независимо от цели: сначала выполняется программа мониторинга, передавая имя целевой программы в качестве дополнительного входного параметра.
Целевая программа затем загружается в память, но управление никогда не передается коду. Вместо этого вычисляется точка входа в загруженную программу, и в этом месте устанавливается слово состояния псевдопрограммы (PSW). Слово состояния программы (PSW) состоит из регистра состояния и счетчика программ , последний из которых указывает следующую команду, которая будет выполнена. [1] Следовательно, этому месту присвоен именно программный счетчик. Набор псевдорегистров устанавливается на то, что они содержали бы, если бы программе было передано управление напрямую.
Возможно, потребуется изменить некоторые из них, чтобы указать на другие псевдо «блоки управления» в зависимости от аппаратного обеспечения и операционной системы. Также может потребоваться сбросить исходный список параметров, чтобы «удалить» ранее добавленный параметр имени программы.
Далее выполнение происходит следующим образом:
В целях тестирования и отладки программа мониторинга может предоставлять средства для просмотра и изменения регистров, памяти и места перезапуска, получения мини- дампа ядра или печати символических имен программ с текущими значениями данных. Это может разрешить новые места условных «пауз», удалить нежелательные паузы и тому подобное.
Моделирование инструкций дает возможность обнаружить ошибки ДО их выполнения, что означает, что условия остаются такими же, какими они были, и не разрушаются ошибкой. Очень хорошим примером из мира IBM S/360 является следующая последовательность команд, которая может вызвать трудности при отладке без монитора моделирования команд.
LM R14,R12,12(R13), где r13 неправильно указывает на строку X"00"s 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' 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' БАЛ R14,X'122'(R12) R14=002C0016SUB1 000124 X'50E0C28A' ST R14,X'28A'(R12) X'002CE294' ==> X'002C0016'и т. д...
Симуляторы
Другой