> man operating_systems
Обработка событий в жестком реальном времени
на Вторник, 14 Июнь 2005, 15:43
добавил: Сергей Семанин список авторов печатать элемент контента создать pdf-файл  элемент контента
категория Статьи
комментарии: 1
просмотров: 2969


Далее я хочу рассказать о том, как обрабатываются прерывания в ОС UzhOS.

Начну с приоритетов: обработка прерываний на уровне потоков допустима только в потоках с наивысшими пиоритетами. Представьте себе ситуацию, когда обработка прерывания выполняется на среднем приоритете, и эту обработку вытесняет поток с большим приоритетом! В этом случае обработка может быть отложена на неопределенное время, а это недопустимо даже в системах "очень мя" реального времени. Поэтому для обработки прерываний на уровне потоков необходимо выделить N старших приоритетов в системе.

В схеме многоуровневой обработки прерываний, используемой в УжОС, обработка событий может производиться в старшей группе приоритетов жесткого реального времени, а отложенные прерывания могут быть обработаны в специально выделенном для этой цели диапазоне приоритетов. Это младшие 2 приоритета жесткого реального времени, на границе с приоритетной группой мягкого реального времени.

Как реализован механизм обработки прерываний в UzhOS на процессорах х86: аппаратные векторы прерываний передают управление диспетчеру прерываний, который регистрирует текущий физический приоритет обработки прерывания, устанавливает маски запрещеия прерываний, соответствующие текущему уровню, затем сообщает контроллеру о "конце прерывания". (контроллеры 8259 обладают недостатками, приводящими в определенных ситуациях к ложным прерываниям и блокировке входов IRQ, поэтому сигнал "конец прерывания" должен выдаваться как можно раньше. Существует опция работы с автоматическим оповещением о предоставлении прерывания). Затем обрабатывается список объектов физической обработки прерываний, установленный на текущем уровне. После вызова всех объектов обработки прерываний на текущем уровне проверяется предыдущий т.н. "уровень выполнения". Если предыдущий уровень меньше уровня выполнения диспетчера объектов, то проверяются флаги событий диспетчера. Если имеются события, то текущим устанавливается уровень выполнения диспетчера, и обрабатываются события диспетчера: старт и планирование объектов, переключение контекстов и т.п. Таким образом, диспетчер объектов выполняется на уровне физического прерывания с низшим приоритетом, исключается вложенность вызова диспетчера. Затем уровень выполнения снижается до предыдущего,устанавливаются маски запрещений прерываний, соответствующие предыдущему уровню, и осуществляется возврат из прерывания. Допускается полная вложенность обработок прерывания.

Обработка прерываний осуществляется посредством объектов обработчиков прерываний. При инициализации обработки прерывания обработчик устанавливается в список диспетчера прерываний на заданном уровне обработки (для каждого уровня имеется отдельный вход в список). Объект обработчика прерывания содержит указатель на процедуру физической обработки прерывания, а также указатель на объект отложенной обработки. Процедура физической обработки, сразу после выполнеия критической обработки, может немедленно активизировать отложенную обработку вызовом функции kDpcRequest(), которая активизирует объект отложенной обработки. Если указатель на процедуру физической обработки нулевой, то вызывается т.н. обработчик по умолчанию, который немедленно активизирует объект отложенной обработки. Процедура обработки, кроме объекта оотложенной обработки, "" за данной процедурой, может активизировать любой предварительно созданный объект.

Объекты отложенной обработки могут, в зависимости от класса объекта, выполняться на следующих уровнях:

<ol>
<li>уровень ISR с заданным приоритетом. Выполняется на физическом уровне и предназначен для понижения текущего приоритета обработки;</li>
<li>уровень DeferredIrq, выполняется на специально выделенном уровне приоритета потока ЖРВ, имеет 16 приоритетов выполнения;</li>
<li>уровень CustomDPC, выполняется на специально выделенном уровне приоритета потока ЖРВ, имеет 16 приоритетов выполнения;</li>
<li>уровень асинхронной задачи ядра, выполняется в заранее созданном потоке ядра, имеет все свойства задачи ядра без ограничения. В контексте потока может вытеснять текущую задачу, имеет 16 уровней выполнения;</li>
<li>уровень асинхронной задачи пользователя, выполняется в заранее созданном потоке кольца пользователя, имеет все свойства задачи ядра без ограничения. В контексте потока может вытеснять текущую задачу, имеет 16 уровней выполнения;</li>
</ol>
Для пояснения п. 4 - 5 отмечу, что в ОС UzhOS поток не является конечной исполняемой инстанцией, а контекстом, в котором последовательноили с вытеснением могут выполняться до 16 уровней задач и DPC.

Для пояснения п. 2 - 3 отмечу, что отложенные обработчики класса "DPC" выполняются в контексте одного потока с вытеснением, но имеют ограничения, присущие обычным обработчикам прерывания: они не могут "" на семафоре и инициировать блокирующий ввод-вывод.

Теперь расскажу о приоритетах UzhOS в свете жесткого реалного времени. Диапазон приоритетов ОС - 255, и разбивается на следующие группы:

<ul>
<li>приоритеты 192-255 (64) - подгруппа приоритетов ЖРВ. На базовом приоритете этой подгруппы выполняется диспетчер отложенных прерываний (DpcForIsr). Т.о. задачи, выполняемые в этой подгруппе, имеют приоритет выше приоритетов процедур отложенных прерываний. Для критических секций отложенных прерываний используется базовый приоритет группы HRT +1. Т.е. при выполнении критических секций DpcForIsr возможно их вытеснение процедурами обработки физических прерываний и задачами HRT;</li>
<li>приоритеты 160-191 (32) - подгруппа приоритетов ЖРВ. На базовом приоритете этой подгруппы выполняется диспетчер отложенных прерываний (CustomDpc). Для критических секций отложенных прерываний CustomDpc используется базовый приоритет группы HRT +1;</li>
<li>приоритеты 60 - 159 - подгруппа приоритетов МРВ. Диапазон приоритетов этой группы - 100 - выбран из соображений совместимости с приоритетной схемой Linux;</li>
<li>приоритеты 8 - 59 - подгруппа динамических приоритетов. Соответствует приоритетной группе 0 Linux и приоритетной группе 4-15 NT;</li>
<li>приоритеты 0 - 7 - подгруппа "" (Idle) приоритетов. Соответствует приоритетной группе 0-3 NT; Не имеет аналога в Linux.</li>
</ul>

(продолжение следует)

индекс статьи
страница 1 : страница без заголовка
страница 2 - текущая : страница без заголовка

Комментарии
Roman I Khimov |14.06.2005 15:52
Комментарии: 952


Обсуждение статьи идет на форуме.



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

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.