
- •1.1. Роль вычислительной техники в управлении процессами
- •1.5. Руководство для читателя
- •Глава 8 посвящена архитектуре системных шин; наибольшее внимание уделено стандарту vme.
- •Процессы реального времени. Методы программирования. Задачи цифрового управления
- •2.1.1. Пример — пресс для пластика
- •2.1.2. Управление на основе последовательного программирования
- •2.1.3. Управление на основе прерываний
- •2.2. Примеры задач управления процессами
- •2.2.1. Управление последовательностью событий и бинарное управление
- •2.2.2. Простой контур управления — регулятор температуры
- •2.2.3. Генерация опорного значения
- •2.2.4. Системы, содержащие несколько контуров управления.
- •2.2.5. Взаимосвязанные системы
- •2.2.6. Критичные по времени процессы
- •2.2.7. Свойства процессов, усложняющие управление
- •2.3. Особенности систем цифрового управления
- •2.4.2 Модельный пример 2 – биологическая очистка сточных вод (процесс активированного отстоя)
- •2.5. Заключение
- •3. Описание и моделирование систем
- •3.1.2. Масштаб времени динамических моделей
- •3. 1.3. Моделирование динамических систем
- •3.1.4. Моделирование дискретных событий
- •3.2. Основы моделирования динамических систем
- •3.2.1. Механические системы
- •3.2.2. Электромагнитные цепи
- •Пример 3.4
- •7.4. Функциональные карты
- •7.4.1. Синтаксис функциональных карт
- •4 2. Реализация функциональных карт
- •7.4.3. Применение функциональных карт в промышленном управлении
- •7.5. Заключение
- •10.6. Методы программирования в реальном времени
- •10.6.1. Что такое программа реального времени?
- •10.6.2. Среда программирования
- •10.6.3. Структура программы реального времени
- •10.6.4. Обработка прерываний и исключений
- •10.6.5. Программирование операций ожидания
- •10.6.6. Внутренние подпрограммы операционной системы
- •10.6.7. Приоритеты процессов и производительность системы
- •10.7. Языки программирования и операционные системы реального времени
- •10.7.1. Требования к языкам и операционным системам реального времени
10.6.4. Обработка прерываний и исключений
Системы реального времени соединены с внешней средой (физический процесс) через аппаратные интерфейсы. Доступ к интерфейсам и внешним данным осуществляется либо по опросу, либо по прерыванию.
При опросе (polling) программа должна циклически последовательно проверять все входные порты на наличие у них новых данных, которые затем считываются и обрабатываются. Очередность и частота опроса определяют время реакции системы реального времени на входные сигналы. Опрос является простым, но неэффективным методом из-за повторяющихся проверок входных портов.
Получение данных по прерыванию (interrupt) происходит иначе. Интерфейсное устройство, получившее новые данные, привлекает внимание ЦП, посылая ему сиг нал прерывания через системную шину. По отношению к текущему процессу прерывания являются асинхронными событиями, требующими немедленной реакции, лучив сигнал прерывания, процессор приостанавливает исполнение текущего процесса, сохраняет в стеке его контекст, считывает из таблицы адрес программы обработки прерывания и передает ей управление. Эта программа называется обработчиком прерывания (interrupt handler). Другой вариант обработки прерываний заключается в том, что планировщик выбирает из очереди ожидания этого события прерывания следующий процесс и переводит его в очередь готовых процессов.
Когда процессор передает управление обработчику прерываний, он обычно сохраняет только счетчик команд и указатель на стек текущего процесса. Обработчик прерываний должен сохранить во временных буферах или в стеке все регистры, кототорые он собирается использовать, и восстановить их в конце. Эта операция критична по времени и, как правило, требует запрета прерываний для того, чтобы избежать переключения процессов во время ее выполнения.
При управлении прерываниями время реакции должно быть как можно меньше. qho представляет собой сумму времени, необходимого процессору, чтобы среагировать на прерывание (латентность прерывания), и времени, необходимого на пересечение контекста до запуска обработчика прерываний. Типичная загрузка системы также играет определенную роль. Если система должна обслуживать много одновременных прерываний, вновь поступающие прерывания будут ждать в очереди пока процессор не освободится.
Программы обработки прерывания должны быть предельно компактными (длина кода) и короткими (время выполнения). Если сложное действие, требующее большого расхода процессорного времени, например вычисления или доступ к базе данных, необходимо выполнить после возникновения прерывания, то его лучше вынести из обработчика прерывания в процесс. Программа обработки прерывания должна выполнять лишь минимально необходимые операции, например считать входные данные, сформировать сообщение и передать другой программе, извещая ее, что произошло прерывание и требуется дальнейшая обработка. Хорошим стилем для обработчиков прерываний является использование реентерабельного кода. Это позволяет избежать конфликтов в случае, если прерывается сам обработчик и тот же код вызывается для обслуживания нового прерывания прежде, чем закончилась обработка предыдущего.
Реакция на исключения (exceptions)1 похожа на обработку прерываний. Исключениями называются нештатные ситуации, когда процессор не может правильно выполнить команду. Примером исключения является деление на ноль или обращение по несуществующему адресу. В англоязычной литературе для разных видов исключений применяются термины trap, fault, abort.
Обычно операционная система обрабатывает исключения, прекращая текущий процесс, и выводит сообщение, четко описывающее ситуацию, на устройство отображения, обычно монитор или принтер. Приемлемая при интерактивной многопользовательской последовательной обработке, внезапная остановка процесса в системах реального времени должна быть абсолютно исключена. Нельзя допустить, чтобы Управляемые микропроцессором автопилот самолета или автоматическая тормозная система автомобиля (Automatic Braking System — ABS) внезапно прекратили работу из-за Деления на ноль. В системах реального времени все возможные исключения должны анаализироваться заранее с определением соответствующих процедур обработки.
Сложной проблемой при обработке исключений является проверка, что исключение не возникнет снова после того, как оно было обработано. Или иными словами, обаботка исключений должна заниматься причиной, а не симптомами аномальной ситуации. Если исключение обработано некорректно, оно может возникнуть опять, уставляя процессор снова и снова переходить к модулю обработки. Например, обработчик деления на нуль должен проверять и изменять операнды, а не просто возобновлять исполнение с места, предшествующего ошибке, что приведет к бесконечному циклу.
Фактические адреса программных модулей известны только после их загрузки. При запуске системы в таблицу обработки прерываний записываются адреса памяти, куда загружаются обработчики, которые затем вызываются по ссылкам из этой таблицы.
Не путать с "взаимным исключением" — mutual exclusion