Как правильно определить задержку прерывания в ОСРВ?

Я прочитал два разных определения «задержки прерывания» в RTOS.

  1. «В вычислениях задержка прерывания - это время, которое проходит от момента создания прерывания до момента, когда его источник обслуживается» (источник: https://en.wikipedia.org/wiki/Interrupt_latency)

  2. «Возможность гарантировать максимальную задержку между внешним прерыванием и запуском обработчика прерывания». (источник: Что делает ядро ​​/ ОС в режиме реального времени?)

Теперь у меня вопрос: как правильно определить «задержку прерывания»?

Например:

Отметка времени возникновения внешнего прерывания: 00 час: 00 мин: 20 секунд
Отметка времени, когда выполнение перескакивает внутри ISR: 00 час: 00 мин: 25 секунд < br> Отметка времени, когда выполнение завершает ISR после обслуживания: 00 ч: 00 мин: 43 секунды

Каково время задержки прерывания? 5 секунд? или 23 секунды?


person sniper    schedule 08.10.2015    source источник
comment
Второй - это определение детерминизма, а не задержки.   -  person Clifford    schedule 20.10.2015


Ответы (1)


Я думаю, что первое определение правильное, но вы неправильно поняли, как прерывания работают на практике и что это значит под «обслуживаемым».

Поток управления представляет собой трехэтапное аппаратное прерывание -> процедура обслуживания прерывания -> процесс. ISR обычно очень короткая и просто очищает источник прерывания и отмечает процесс как готовый к запуску.

Например, у вас есть процесс, который вызывает read для доступа к данным на диске. Этот процесс будет заблокирован до тех пор, пока диск не выполнит операцию ввода-вывода. Как только происходит ввод-вывод, HW генерирует прерывание, чтобы уведомить ЦП, который переходит к ISR, очищает прерывание и затем устанавливает заблокированный процесс как подлежащий планированию.

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

person dave    schedule 08.10.2015
comment
Да, вы правы, я неправильно понял термин «обслуживается». Из вашего ответа, если я правильно понимаю, могу ли я сказать, что задержка прерывания - это время, затрачиваемое ядром на очистку прерывания и разблокировку заблокированного (по этому прерыванию) потока? - person sniper; 08.10.2015
comment
@Benvin: Я бы сказал, что нет. Задержка прерывания - это только время между событием прерывания и запуском обработчика прерывания. Время, затрачиваемое на переключение контекста на задачу, равно времени переключения контекста и определяется вашей реализацией RTOS, а время, затрачиваемое на выполнение обработчика прерывания, находится в пределах вашего контроля (т. Е. Вы пишете код - это так же быстро и детерминированно, как вы это делаете). Время, затрачиваемое от прерывания до выполнения потока обработчика, может быть важным и должно быть детерминированным, но это не задержка прерывания. - person Clifford; 20.10.2015