Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек СРВ от Анн.doc
Скачиваний:
11
Добавлен:
09.11.2019
Размер:
2.26 Mб
Скачать

Лекция №9. О работе в реальном времени

План лекции.

1. Задержка прерывания

2. Планирование задержки

3. Накопление прерываний

Как сильно бы мы не желали этого, скорость компьютеров не бесконечна. В системах реального времени чрезвычайно важно, чтобы процессор не работал впустую. Так же важно чтобы проходило минимум времени между внешним событием и непосредственным исполнением кода. Это время называется задержка.

В QNX возможны следующие виды задержек.

1. Задержка прерывания

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

Эта диаграмма иллюстрирует ситуацию, в которой аппаратное прерывание обрабатывается установленным обработчиком. Обработчик либо просто вернет, либо вернет и активирует proxy.

Задержка прерывания (Тil) является минимальной задержкой которая происходит при полностью задействованных прерываниях. Максимальная задержка равна этому времени плюс максимальное время на которое QNX, или процесс выполняемый QNX отключает прерывания CPU.

2. Планирование задержки

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

Задержка планирования это время между прекращением обработки прерывания и выполнением первой инструкции процесса драйвера. Это обычно то время, которое необходимо для сохранения контекста текущего процесса и восстановления контекста требуемого процесса драйвера. Хотя эта задержка и больше чем задержка прерывания в системе QNX она относительно мала.

Обработчик прерывания прекращается и активирует proxy. Дано время для 20Mhz 386 процессора в защищенном режиме.

Важно запомнить, что большинство прерываний прекращаются без активации proxy. В большинстве случаев обработчик прерываний может позаботиться обо всех аппаратных проблемах. Активация proxy с целью запуска процесса - драйвера более высокого уровня случается только когда происходит значительное событие. Например, обработчик прерываний для последовательного устройства передает один байт данных устройству каждый раз, когда приходит прерывание на передачу, и запустит процесс высокого уровня (Dev) только когда буфер вывода освободится.

3. Накопление прерываний

Поскольку микрокомпьютерная архитектура позволяет задавать приоритеты аппаратным прерываниям, прерывание с высоким приоритетом может вытеснить прерывание с низким.

Этот механизм полностью поддерживается в QNX. Предыдущие сценарии описывают простейшие—и самые распространенные—ситуации когда происходит только одно. Фактически похожее распределение времени верно для прерываний с наивысшим приоритетом. Расчеты времени самых длительных задержек для низкоуровневых прерываний должны учитывать время необходимое для обработки всех прерываний с высоким приоритетом, поскольку в QNX прерывания с высоким приоритетом вытесняют прерывания с низким.

Пример накопления прерываний. Выполняется процесс А. Прерывание IRQx запускает обработчик Intx, но он вытесняется IRQy и его обработчиком Inty. Inty активирует proxy запуская тем самым процесс В, и Intx активирует proxy запуская процесс C.