Сроки на не-RTOS довольно нестабильны, из-за других задач, входящих в системный планировщик и так далее.Представьте, что если во время эмуляции вы откроете окно веб-браузера, все ваши временные интервалы исчезнут.
Так что, возможно, вы могли бы выбрать другой подход: не полагаться на время вашей системы, но использовать также эмулированное время.
Поскольку вы также эмулируете ядро, обрабатываете все инструкции, вы знаете, сколько инструкций вы выполнили, и вы можете сосчитать фактические такты, которые выполнила ваша эмулируемая система.Затем вы можете использовать эти галочки для расчета времени в вашей системе, обновления любого прерывания аппаратного таймера, которое вы можете эмулировать, и так ...
Будет ли одна конкретная функция быстрее, чем в реальной жизни?Неважно, ваша система будет знать, что XX тиков прошло, и выполнит любые прерывания или что-нибудь на этом основании.
При таком подходе реальная секунда не будет равна симулированной секунде, но вашаэмуляция всегда будет одинаковой, независимо от других приложений или проблем системного планирования.
Кроме того, если вы хотите синхронизироваться с реальным временем, вы можете время от времени (т.е. после выполнения любого возврата изили исключение), синхронизируйте свои тики с реальным временем, просто остановив выполнение следующей инструкции.
Наконец, взгляните на этот вопрос , так как они дают многоинформации об эмуляции стоит прочесть.В частности, мой описанный выше подход будет соответствовать подходу «интерпретации», описанному по этой ссылке.