Это событие генерируется внешним по отношению к процессору устройством

Обновлено: 28.06.2024

Интеллектуальный обработчик событий (IEP) позволяет выполнять сложную обработку событий (CEP) и обработку потока событий (ESP) из сервисной шины предприятия.

Комплексная обработка событий и обработка потока событий

В самом общем смысле термин событие относится ко всему, что происходит в системе. Например:

Смена пароля

Покупка акций

Перевод средств

Вы используете IEP для обработки компьютеризированных представлений этих событий.

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

Термин поток событий относится к непрерывному набору событий. Например, поток событий может содержать изменения паролей, сделанные пользователями веб-приложений.

Обработка потока событий может включать множество действий. Например:

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

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

Вы можете изменить порядок событий.

Когда вы объединяете несколько событий для создания события более высокого уровня, результат называется сложным событием.

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

Типичные сценарии IEP

В следующей таблице описаны типичные сценарии IEP.

Финансовый аудит и соответствие требованиям

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

Мониторинг сети и управление трафиком

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

Корреляция событий ИТ-безопасности

Проверьте изменения пароля, которые были внесены в веб-приложение. Если количество изменений пароля за час более чем в два раза превышает среднее значение, создайте предупреждение системы безопасности.

Управление активами и отслеживание с помощью RFID

Изучите сигналы RFID, которые регулярно излучаются всеми товарами в магазине. Определите, проходит ли товар через зону выхода, не будучи купленным. Определите, не работает ли излучатель RFID продукта.

Архитектура IEP

На следующей диаграмме показана архитектура IEP.

В рамках сервисной шины предприятия модуль служб IEP может взаимодействовать с любым модулем служб Java TM Business Integration (JBI) или компонентом привязки, который также подключен к шине. Маршрутизатор нормализованных сообщений обеспечивает обмен сообщениями между компонентами.

По умолчанию ядро ​​службы IEP отправляет выходные данные компоненту привязки файлов.

Сервисный модуль IEP использует базу данных для хранения информации о развернутых обработчиках событий.

Компоненты времени разработки и выполнения IEP

IEP состоит из компонента времени разработки и компонента времени выполнения.

Компонент времени разработки интегрирован в среду IDE NetBeans.

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

В среде IDE NetBeans вы создаете проект модуля IEP, а затем добавляете один или несколько обработчиков событий.

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

Обработчик событий должен иметь как минимум один оператор ввода и один оператор вывода. Вы можете добавить любое количество операторов между оператором ввода и оператором вывода.

На холсте дизайна вы связываете операторы друг с другом и используете редакторы свойств для настройки операторов.

На следующем снимке экрана показан набор операторов в обработчике событий. Оператор слева является оператором ввода. Оператор справа — это оператор вывода.

Некоторые операторы позволяют вводить операторы, подобные SQL. Для этих операторов может быть полезно знание оператора SQL SELECT.

При сохранении проекта модуля IEP IEP создает документ языка описания веб-служб (WSDL) для каждого обработчика событий. Документы WSDL содержат конечные точки для обработчиков событий.

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

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

Подпрограммы обслуживания прерываний (ISR) предназначены для обработки асинхронных событий (событий переднего плана).

Связанные термины:

Скачать в формате PDF

Об этой странице

Многозадачность и планирование

Колин Уоллс, проект встроенной ОСРВ, 2021 г.

Сохранение контекста

ISR всегда должен сохранять «контекст», чтобы прерванный код не влиял на вычисления ISR. В системе, реализованной без RTOS, это просто вопрос сохранения любых регистров, используемых ISR — обычно в стеке — и их восстановления перед возвратом. В некоторых процессорах предусмотрен выделенный стек ISR, другие просто используют тот же стек, что и код приложения.

При использовании RTOS подход может быть точно таким же. Точно так же стек, используемый ISR, может быть «заимствован» из текущей задачи или это может быть другой стек, предназначенный для прерываний. Некоторые ядра реализуют эту возможность, даже если сам ЦП не поддерживает стек прерываний. Ситуация становится более сложной, если ISR делает вызов API, который влияет на планировщик. Это может привести к возврату прерывания к другой задаче, отличной от той, которая выполнялась в момент возникновения прерывания.

Прерывания в Nucleus SE

Колин Уоллс, проект встроенной ОСРВ, 2021 г.

Низкий и высокий уровни ISR

Низкий уровень ISR

Подпрограмма обслуживания прерываний низкого уровня (LISR) выполняется как обычная ISR, которая включает использование текущего стека. Nucleus RTOS сохраняет контекст перед вызовом LISR и восстанавливает контекст после возврата LISR. Следовательно, LISR могут быть написаны на C и могут вызывать другие подпрограммы C. Однако для LISR доступно лишь несколько сервисов Nucleus RTOS. Если для обработки прерывания требуются дополнительные службы Nucleus RTOS, необходимо активировать процедуру обработки прерывания высокого уровня (HISR). Nucleus RTOS поддерживает вложение нескольких LISR.

ISR высокого уровня

HISR создаются и удаляются динамически. Каждый HISR имеет собственное пространство стека и собственный блок управления. Память для каждого предоставляется приложением. Конечно, HISR должен быть создан до того, как он будет активирован LISR.

Поскольку HISR имеет собственный стек и блок управления, его можно временно заблокировать, если он попытается получить доступ к структуре данных Nucleus RTOS, к которой уже осуществляется доступ.

Для HISR доступно три уровня приоритета. Если HISR с более высоким приоритетом активируется во время обработки HISR с более низким приоритетом, HISR с более низким приоритетом вытесняется почти так же, как вытесняется задача. HISR с одинаковым приоритетом выполняются в том порядке, в котором они были первоначально активированы. Все активированные HISR обрабатываются перед возобновлением обычного планирования задач.

Операционные системы реального времени

16.4.5 Подпрограммы обслуживания прерываний

Процедура обслуживания прерываний (ISR) — это программная процедура, запускаемая оборудованием в ответ на прерывание. ISR проверяет прерывание и определяет, как его обрабатывать, выполняет обработку, а затем возвращает значение логического прерывания. Если дальнейшая обработка не требуется, ISR уведомляет ядро ​​возвращаемым значением. ISR должен выполняться очень быстро, чтобы не замедлить работу устройства и работу всех ISR с более низким приоритетом.

Хотя ISR может перемещать данные из регистра ЦП или аппаратного порта в буфер памяти, обычно он полагается на выделенный поток прерывания (или задачу), называемый потоком обслуживания прерываний (IST), для выполнения большей части операций. требуемая обработка. Если требуется дополнительная обработка, ISR возвращает ядру значение логического прерывания. Затем он сопоставляет номер физического прерывания со значением логического прерывания. Например, клавиатура может быть связана с аппаратным прерыванием 4 на одном устройстве и аппаратным прерыванием 15 на другом устройстве. ISR преобразует аппаратно-зависимое значение в стандартное значение, соответствующее конкретному устройству.

Когда ISR уведомляет ядро ​​о конкретном значении логического прерывания, ядро ​​проверяет внутреннюю таблицу, чтобы сопоставить значение логического прерывания с дескриптором события. Затем ядро ​​активирует IST, сигнализируя о событии. Событие — это стандартный объект синхронизации, который служит будильником для пробуждения потока, когда происходит что-то интересное.

Поток обслуживания прерывания — это поток, который выполняет большую часть обработки прерывания. Операционная система пробуждает IST, когда у него есть прерывание для обработки, в противном случае он остается бездействующим. Чтобы операционная система разбудила IST, IST должен связать объект события с идентификатором прерывания. После обработки прерывания IST должен ожидать следующего сигнала прерывания. Этот вызов обычно находится внутри цикла.

При возникновении аппаратного прерывания ядро ​​сигнализирует об этом событии от имени ISR, а затем IST выполняет необходимые операции ввода-вывода в устройстве для сбора данных и их обработки. Когда обработка прерывания завершена, IST информирует ядро ​​о необходимости повторного включения аппаратного прерывания.

Уведомление о прерывании — это сигнал от IST, уведомляющий операционную систему о необходимости обработки события. Для устройств, которые подключаются к платформе через промежуточное оборудование, драйвер устройства для этого оборудования должен передать уведомление о прерывании драйверу устройства верхнего уровня. Как правило, драйвер устройства промежуточного оборудования имеет некоторые возможности, позволяющие другому драйверу устройства зарегистрировать функцию обратного вызова, которую драйвер промежуточного устройства вызывает при возникновении прерывания.

Например, PC-карты подключаются к аппаратным платформам через слот для PC-карт, который является промежуточным элементом оборудования со своим собственным драйвером устройства. Когда устройство PC-карты посылает прерывание, аппаратное обеспечение слота PC-карты сигнализирует о физическом прерывании на системной шине. Драйвер устройства для слота PC-карты имеет ISR и IST, которые обрабатывают физическое прерывание. Они используют функцию для передачи прерывания драйверу устройства PC Card. Устройства с похожими способами подключения ведут себя одинаково.

Прерывания — это сигналы, посылаемые центральному процессору внешними устройствами, обычно устройствами ввода-вывода. Они говорят процессору прекратить текущую деятельность и выполнить соответствующую часть операционной системы.

Существует три типа прерываний:

  1. Аппаратные прерывания генерируются аппаратными устройствами, чтобы сигнализировать о том, что им требуется некоторое внимание со стороны ОС. Возможно, они только что получили некоторые данные (например, нажатия клавиш на клавиатуре или данные с карты Ethernet); или они только что выполнили задачу, которую ранее запрашивала операционная система, например, перенос данных между жестким диском и памятью.
  2. Программные прерывания генерируются программами, когда они хотят запросить системный вызов для выполнения операционной системой.
  3. Ловушки генерируются самим ЦП, чтобы указать, что возникла какая-то ошибка или условие, для устранения которых требуется помощь операционной системы.

Прерывания важны, потому что они дают пользователю лучший контроль над компьютером. Без прерываний пользователю, возможно, придется ждать, пока данное приложение будет иметь более высокий приоритет по сравнению с ЦП для запуска. Это гарантирует, что ЦП немедленно обработает процесс.

1.7.2. Режим выполнения ЦП¶

Существует два режима выполнения: пользовательский режим и режим ядра или режим супервизора. Пользовательский режим ограничен тем, что некоторые инструкции не могут быть выполнены, некоторые регистры недоступны, а устройства ввода-вывода недоступны. Режим ядра не имеет ни одного из этих ограничений. Системный вызов установит ЦП в режим ядра, как и ловушки и прерывания. Прикладные программы не могут этого сделать.

Бит режима: режим супервизора или пользователя

  • Режим супервизора
    • Может выполнять все машинные инструкции
    • Может ссылаться на все ячейки памяти
    • Может выполнять только подмножество инструкций
    • Может ссылаться только на подмножество ячеек памяти.

    1.7.3. Ответ процессора на прерывания¶

    Ключевым моментом в понимании того, как работают операционные системы, является понимание того, что делает ЦП, когда происходит прерывание. Аппаратное обеспечение ЦП делает одно и то же для каждого прерывания, что позволяет операционной системе отобрать управление у текущего запущенного пользовательского процесса. Переключение запущенных процессов на выполнение кода из ядра ОС называется переключением контекста.

    ЦП полагаются на данные, содержащиеся в паре регистров, для правильной обработки прерываний. Один регистр содержит указатель на блок управления текущим запущенным процессом. Этот регистр устанавливается каждый раз, когда процесс загружается в память. Другой регистр содержит указатель на таблицу, содержащую указатели на инструкции ядра ОС для обработчиков прерываний и системных вызовов. Значение в этом регистре и содержимое таблицы устанавливаются при инициализации операционной системы во время загрузки.

    ЦП выполняет следующие действия в ответ на прерывание:

    1. При использовании указателя на текущий блок управления процессом состояние и все значения регистров для процесса сохраняются для использования при последующем перезапуске процесса.
    2. Бит режима ЦП переключается в контрольный режим.
    3. С помощью указателя на таблицу обработчиков прерываний и вектора прерывания определяется местоположение исполняемого кода ядра. Вектор прерывания — это IRQ для аппаратных прерываний (считывается из регистра контроллера прерываний) и аргумент инструкции прерывания на ассемблере для программных прерываний.
    4. Обработка переключается на соответствующую часть ядра.

    ../_images/sys_call.jpg

    ЦП использует таблицу и вектор прерываний, чтобы найти ОС код для выполнения в ответ на прерывания. Здесь показано программное прерывание.

    ../_images/process_switching.jpg

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

    Если терминология отличается для разных систем, то что они означают для x86?


    10 ответов 10

    Ловушка – это исключение в пользовательском процессе. Это вызвано делением на ноль или недопустимым доступом к памяти. Это также обычный способ вызова подпрограммы ядра (системный вызов), потому что они выполняются с более высоким приоритетом, чем пользовательский код. Обработка является синхронной (поэтому пользовательский код приостанавливается и затем продолжается). В некотором смысле они «активны» — большую часть времени код ожидает возникновения ловушки и полагается на этот факт.

    Прерывание — это нечто, создаваемое аппаратным обеспечением (например, жестким диском, видеокартой, портами ввода-вывода и т. д.). Они асинхронны (т. е. не происходят в предсказуемых местах пользовательского кода) или «пассивны», поскольку обработчик прерываний должен ждать, пока они в конечном итоге не произойдут.

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

    Потому что это действительно прерывание, которое ЦП отправляет, когда АЛУ обнаруживает эту проблему. Так же, как ошибка сегментации. Однако не все математические ошибки вызывают прерывания (переполнение не вызывает).

    В этом есть смысл. Но тогда немного сбивает с толку то, почему в более ранних ядрах Linux он был инициализирован как программная ловушка: set_trap_gate(0,÷_error);

    Что вы имеете в виду под "немного запутанным"? Это очень сбивает с толку :-) Проблема здесь в том, что деление на ноль является аппаратным прерыванием (IRQ/вектор 0), но у разработчиков ядра есть несколько вариантов, как с этим справиться. Таким образом, со стороны пользовательского процесса это ловушка, а со стороны ЦП - прерывание. Кто прав? Никто? Оба?

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

    Intel x86 определяет две перекрывающиеся категории: векторные события (прерывания и исключения) и классы исключений (сбои, ловушки и прерывания).

    Все цитаты в этом посте взяты из версии руководства Intel для разработчиков программного обеспечения за апрель 2016 года. Для (окончательной и сложной) перспективы x86 я рекомендую прочитать главу SDM об обработке прерываний и исключений.

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

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

    Прерывания

    Прерывания происходят в случайное время во время выполнения программы в ответ на сигналы от оборудования. Системное оборудование использует прерывания для обработки внешних по отношению к процессору событий, таких как запросы на обслуживание периферийных устройств. Программное обеспечение также может генерировать прерывания, выполняя инструкцию INT n.

    Исключения

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

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

    Вывод: ловушки увеличивают указатель инструкции, ошибки — нет, а прерывания «взрываются».

    Ловушка – это исключение, о котором сообщается сразу после выполнения инструкции по ловушке. Ловушки позволяют продолжить выполнение программы или задачи без потери непрерывности программы. Адрес возврата для обработчика trap указывает на инструкцию, которая должна быть выполнена после инструкции trap.

    Ошибка

    Ошибка — это исключение, которое, как правило, можно исправить и которое после исправления позволяет перезапустить программу без потери непрерывности.Когда сообщается об ошибке, процессор восстанавливает состояние машины до состояния, предшествующего началу выполнения команды, вызвавшей ошибку. Адрес возврата (сохраненное содержимое регистров CS и EIP) для обработчика ошибок указывает на инструкцию, вызвавшую ошибку, а не на инструкцию, следующую за инструкцией, вызвавшей ошибку.

    Пример. Ошибка страницы часто может быть устранена. Часть адресного пространства приложения могла быть выгружена на диск из оперативной памяти. Приложение вызовет ошибку страницы, когда попытается получить доступ к памяти, которая была выгружена. Ядро может извлекать эту память с диска в оперативную память и передавать управление обратно приложению. Приложение продолжит работу с того места, на котором оно остановилось (в инструкции, вызвавшей ошибку, которая обращалась к выгруженной памяти), но на этот раз доступ к памяти должен пройти без ошибок.

    Отменить

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

    Программные прерывания (вызванные инструкцией INT) ведут себя подобно ловушкам. Инструкция завершается до того, как процессор сохранит свое состояние и перейдет к обработчику прерывания.

    Читайте также: