Механизм старта и загрузки симулятора — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Механизм старта и загрузки симулятора

2022-09-12 18
Механизм старта и загрузки симулятора 0.00 из 5.00 0 оценок
Заказать работу

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

Функции и переменные, обеспечивающие инициализацию эмулятора и запуска потока симуляции, располагаются в следующих файлах:

1) ppdl\libs_src\simlib\sources\sim_thread.cpp – функции инициализации эмулятора, создания потока симуляции и главной функции потока симуляции;

2) ppdl\libs_src\simlib\headers\threads_cfg.h – макроопределения для создания и управления потоком симуляции.

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

5.1 Платформо-зависимые макроопределения

Эмулятор ppdl имеет набор платформо-зависимых макроопределений, отвечающих за создание, уничтожение и удаление потока симуляции. Все макроопределения располагаются в файле threads_cfg.h. Полный список макроопределений с вариантами реализации для ОС Windows XP приведен в таблице 5.1.


Таблица 5.1 ‑ Список макроопределений

1 Имя   CREATE_SIM_THREAD
  Назначение Создание потока симуляции
  Реализация под Windows #define CREATE_SIM_THREAD(){\ DWORD        mThreadId;\  Thread = СreateThread(0,0,Runner,(LPVOID)NULL,0,&mThreadId);\ }
2 Имя   DESTROY_THREAD()
  Назначение Уничтожение потока эмулятора
  Реализация под Windows #define DESTROY_THREAD()\ TerminateThread(Thread,0);\ CloseHandle(Thread);\
3 Имя   SIM_FUNC_DECL()
  Назначение Декларация заголовка функции потока симуляции
  Реализация под Windows #define SIM_FUNC_DECL()\ DWORD WINAPI Runner(LPVOID pParam)
4 Имя   SEND_START_MSG()
  Назначение Отправка отладчиком сообщения эмулятору о старте потока симуляции
  Реализация под Windows #define SEND_START_MSG()\ while(PostThreadMessage(ThreadId,SIM_START_IN,0,0)==FALSE);  
5 Имя   WAIT_START_MSG()
  Назначение Ожидание сигнала старта от отладчика потоку симуляции
  Реализация под Windows MSG tmp_msg;\ do{\ GetMessage(&tmp_msg,NULL,SIM_START_IN,SIM_START_IN+1);\ }while(tmp_msg.message!= SIM_START_IN);\
6 Имя   SEND_STOP_REASON(reason)
  Назначение Отправка эмулятором сообщения отладчику об остановке процесса исполнения программы Аргумент Reason – причина останова.
  Реализация под Windows #define SEND_STOP_REASON(reason)\ PostThreadMessage(OwnerId,SIM_STOPPED_OUT,0,0);
7 Имя   LIB_EXPORT
  Назначение Декларация функции, экспортируемой из dll эмулятора
  Реализация под Windows #define LIB_EXPORT __declspec(dllexport)

Функция потока симуляции

Ниже приведена реализация функции основного потока симуляции:            

SIM_FUNC_DECL()

{  

#ifdef SYSTEMC_USED

sc_initialize(); // используется только для потактовой модели

#endif

//

while(true) // основной цикл

{

WAIT_START_MSG() // ожидаем сигнала от отладчика

if(IsRunned) // если выполнение разрешено

{

while(IsRunned) // выполняем, пока симуляция не остановлена

   SingleClock(); // исполняем одну инструкцию

}

SEND_STOP_REASON(0) // посылаем сигнал отладчику об остановке эмулятора

}// while true

}

Эмуляция периферийных устройств

Таймеры

В эмулятор ядра процессора NM6406 реализована функциональность, позволяющая эмулировать интервальные таймеры TIMER0 и TIMER1 в соответствии с 4.1 документа [1]. 

Для эмуляции таймеров при каждом запуске функции Operate после эмуляции работы инструкций исполняется функция CheckTimers. Данная функция проверяет состояния таймеров. Если таймеры активны, то выполняется инкрементация счетчиков таймеров и, в соответствии со спецификацией, в случае перехода счетчиков в «0», выполняется перезагрузка счетчиков и\или установление запроса на прерывание.

 

Контроллер прерываний

Контроллер прерываний также реализован как часть ядра процессора.

Перед началом исполнения каждой инструкции эмулятором запускается функция CheckIrqs, которая проверяет состояние битов поля регистра IRR – регистра запросов внешних прерываний. Если IRR не равен нулю (установлен хотя-бы один запрос на прерывание) и запрос не замаскирован, то соответствующий вектор записывается в регистр intr.   

После проверки регистра IRR осуществляется проверка регистра intr. В регистре intr помимо вектора внешних прерываний, устанавливаются вектора запросов внутренних прерываний. Регистр intr анализируется на предмет наличия незамаскированных прерываний и, в случае наличия хотя-бы одного запроса на прерывания, функция CheckIrqs возвращает значение вектора прерывания.

Регистр IRR доступен извне класса эмулятора. Таким образом, эмуляторы внешних устройств могут посылать запросы ядру посредством установки бит IRR.  

 

 


Поделиться с друзьями:

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.