- •2. Ядра и операционные системы реального времени
- •2.1. Задачи, процессы, потоки
- •2.2. Основные свойства задач
- •2.3. Планирование задач
- •2.4. Синхронизация задач
- •2.5. Тестирование
- •2.6. Можно ли обойтись без ОС РВ?
- •3. Обзор некоторых операционных систем реального времени
- •3.1. Linux реального времени
- •3.2. Операционные системы реального времени и Windows
- •3.3. Операционная система QNX
- •3.4. Проект Neutrino
- •4.1. Организация промышленных систем
- •4.2. Аппаратная архитектура
- •4.3. Стандарты шин
- •4.4. Технологии VME и PCI
- •4.5. Мезонинные технологии
- •4.6. Полевые системы
- •4.7. Программное обеспечение промышленных систем
- •4.8. Управление производством
- •Часть 2. ПРОЕКТИРОВАНИЕ СРВ
- •5. UML проектирование систем реального времени
- •5.1. Объектно-ориентированные методы и UML
- •5.2. Метод и нотация
- •5.3. Системы и приложения реального времени
- •6. Обзор нотации UML
- •6.1. Диаграммы UML
- •6.2. Диаграммы прецедентов
- •6.3. Нотация UML для классов и объектов
- •6.4. Диаграммы классов
- •6.5. Диаграммы взаимодействия
- •6.6. Диаграммы состояний
- •6.7. Пакеты
- •6.8. Диаграммы параллельной кооперации
- •6.9. Диаграммы развертывания
- •6.10. Механизмы расширения UML
- •7.1. Среды для параллельной обработки
- •7.2. Поддержка исполнения в мультипрограммной и мультипроцессорной средах
- •7.3. Планирование задач
- •7.4. Вопросы ввода/вывода в операционной системе
- •7.6. Технология World Wide Web
- •7.7. Сервисы распределенных операционных систем
- •7.8. ПО промежуточного слоя
- •7.9. Стандарт CORBA
- •7.10. Другие компонентные технологии
- •7.11. Системы обработки транзакций
- •8. Разбиение на задачи
- •8.1. Вопросы разбиения на параллельные задачи
- •8.2. Категории критериев разбиения на задачи
- •8.3. Критерии выделения задач ввода/вывода
- •8.4. Критерии выделения внутренних задач
- •8.5. Критерии назначения приоритетов задачам
- •8.6. Критерии группировки задач
- •8.7. Пересмотр проекта путем инверсии задач
- •8.8. Разработка архитектуры задач
- •8.9. Коммуникации между задачами и синхронизация
- •8.10. Спецификация поведения задачи
- •9. Проектирование классов
- •9.1. Проектирование классов, скрывающих информацию
- •9.2. Проектирование операций классов
- •9.3. Классы абстрагирования данных
- •9.4. Классы интерфейса устройства
- •9.5. Классы, зависящие от состояния
- •9.6. Классы, скрывающие алгоритмы
- •9.7. Классы интерфейса пользователя
- •9.10. Внутренние программные классы
- •9.11. Применение наследования при проектировании
- •9.12. Примеры наследования
- •9.13. Спецификация интерфейса класса
- •10. Детальное проектирование ПО
- •10.1. Проектирование составных задач
- •10.2. Синхронизация доступа к классам
- •10.4. Логика упорядочения событий
- •11.1. Теория планирования в реальном времени
- •11.2. Развитие теории планирования в реальном времени
- •11.5. Пример анализа производительности с помощью анализа последовательности событий
- •11.6. Пример анализа производительности с применением теории планирования в реальном времени
- •11.8. Пересмотр проекта
- •11.9. Оценка и измерение параметров производительности
- •12. ЗАКЛЮЧЕНИЕ
- •СПИСОК ЛИТЕРАТУРЫ
СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ |
17 |
какой-либо функции или подпрограммы, а затем вызвать эту функ- цию или подпрограмму снова. Частным проявлением реентерабель- ности является рекурсия, когда тело подпрограммы содержит вызов самой себя. Классическим примером нереентерабельной системы яв- ляется DOS, a типичной причиной нереентерабельности служит ис- пользование глобальных переменных. Предположим, что у нас есть функция, реализующая низкоуровневую запись на диск, и пусть она использует глобальную переменную write_sector, которая устанавли- вается в соответствии с параметром, передаваемым этой функции при вызове. Предположим теперь, что Задача А вызывает эту функцию с параметром 3, то есть хочет записать данные в сектор номер 3. До- пустим, что когда переменная write_sector уже равна 3, но сама за- пись еще не произведена, выполнение Задачи А прерывается и начи- нает выполняться Задача В, которая взывает ту же функцию, но с ар- гументом 10. После того как запись в сектор номер 10 будет произве- дена, управление рано или поздно вернется к Задаче А, которая про- должит работу с того же места. Однако, так как переменная write_sector имеет теперь значение 10, данные Задачи А, предназна- чавшиеся для сектора номер 3, будут вместо этого записаны в сектор номер 10. Из приведенного примера видно, что ошибки, связанные с нереентерабельностью, трудно обнаружить, а последствия они могут вызвать самые катастрофические.
2.3. Планирование задач
Важной частью любой ОС РВ является планировщик задач. Не- смотря на то, что в разных источниках он может называться по- разному (диспетчер задач, супервизор и т. п.), его функции остаются теми же: определить, какая из задач должна выполняться в системе в каждый конкретный момент времени. Самым простым методом пла- нирования, не требующим никакого специального ПО и планировщи- ка как такового, является использование циклического алгоритма
стиле round robin:
void main (void)
{
for(;;)
{
task0();
www.pdffactory.com
СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ |
18 |
task1();
task2();
/* и т. д. */
}
}
Каждая «задача», представляющая собой отдельную подпро- грамму, выполняется циклически. При этом надо придерживаться следующих правил:
1. Подпрограммы не должны содержать циклов ожидания, в
стиле
while (TRUE)
{
if(switch_up())
{
lamp_off(); break;
}
}
2.Подпрограммы должны выполнять свою работу как можно быстрее, чтобы дать возможность работать следующей подпрограм- ме.
3.При необходимости подпрограмма может сохранять свое ок- ружение и текущие результаты, чтобы в следующем цикле возобно- вить работу с того же места.
Можно отметить следующие преимущества циклического алго- ритма.
1.Простота использования и прозрачность для понимания.
2.Если исключить из рассмотрения прерывания, система полно- стью детерминирована. Задачи всегда вызываются в одной и той же последовательности, что позволяет достаточно просто произвести анализ «наихудшего случая» и вычислить максимальную задержку.
3.Минимальные размеры кода и данных. Кроме того, в отличие от алгоритмов с вытеснением, для всех задач необходим только один стек.
4.Отсутствуют ошибки, обусловленные «гонками».
www.pdffactory.com
СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ |
19 |
К недостаткам циклического алгоритма можно отнести отсутст- вие приоритетности и очередей. К тому же задачи вызываются неза- висимо от того, должны ли они в данный момент что-либо делать или нет, а на прикладного программиста ложится максимальная ответст- венность за работоспособность системы.
Перейдем теперь к другому широко используемому алгоритму планирования. Речь пойдет о режиме разделения времени. Существу- ют различные реализации в рамках этого алгоритма, и некоторые за- падные специалисты даже различают такие, в общем-то идентичные для нас понятия, как time-slicing (нарезание времени) и time-sharing (разделение времени). Как правило, алгоритм реализуется следующим образом: каждой задаче отводится определенное количество квантов времени (обычно кратно 1 мс), в течение которых задача может мо- нопольно занимать процессорное время. После того как заданный ин- тервал времени истекает, управление передается следующей готовой к выполнению задаче, имеющей наивысший приоритет. Та, в свою очередь, выполняется в течение отведенного для нее промежутка вре- мени, после чего все повторяется в стиле round robin. Легко заметить, что такой алгоритм работы может привести к определенным пробле- мам. Представим, что в системе работают 7 задач, 3 из которых име- ют высокий приоритет, а 4 – низкий. Низкоприоритетные задачи мо- гут никогда не получить управление, так как три высокоприоритет- ные задачи будут делить все процессорное время между собой. Един-
ственную возможность для низкоприоритетных задач получить управление предоставляет ситуация, когда все высокоприоритетные задачи находятся в блокированном состоянии.
Для решения этой проблемы применяется прием, получивший название равнодоступность (fairness). При этом реализуется прин- цип адаптивной приоритетности, когда приоритет задачи, которая выполняется слишком долго, постепенно уменьшается, позволяя ме- нее приоритетным задачам получить свою долю процессорного вре- мени. Равнодоступность применяется главным образом в многополь-
зовательских системах и редко применяется в системах реального времени.
Кооперативная многозадачность – это еще один алгоритм пе-
реключения задач, с которым широкие массы компьютерной общест- венности знакомы по oперационной системе Windows.. Задача, полу- чившая управление, выполняется до тех пор, пока она сама по своей
www.pdffactory.com
СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ |
20 |
инициативе не передаст управление другой задаче. По сути это про- должение идеологии round robin, и нет нужды объяснять, почему ал- горитм кооперативной многозадачности в чистом виде мало приме- няется в системах реального времени.
Приоритетная многозадачность с вытеснением – это, по-
видимому, наиболее часто используемый в ОС РВ принцип планиро- вания. Основная идея состоит в том, что высокоприоритетная задача как только для нее появляется работа, немедленно прерывает (вытес- няет) низкоприоритетную. Другими словами, если какая-либо задача переходит в состояние готовности, она немедленно получает управле- ние, если текущая активная задача имеет более низкий приоритет. Такое «вытеснение» происходит, например, когда высокоприоритет- ная задача получила ожидаемое сообщение, освободился запрошен- ный ею ресурс, произошло связанное с ней внешнее событие, исчер- пался заданный интервал времени и т. п.
Заканчивая рассмотрение основных принципов планирования задач, необходимо отметить, что тема эта далеко не исчерпана. Диа- пазон систем реального времени весьма широк, начиная от полно- стью статических систем, где все задачи и их приоритеты заранее оп- ределены, до динамических систем, где набор выполняемых задач, их приоритеты и даже алгоритмы планирования могут меняться в про- цессе функционирования. Существуют, например, системы, где каж-
дая отдельная задача может участвовать в любом из трех алгоритмов планирования или их комбинации (вытеснение, разделение времени, кооперативность).
В общем случае алгоритмы планирования должны соответство- вать критериям оптимальности функционирования системы. Однако, если для систем «жесткого» реального времени такой критерий оче- виден: «ВСЕГДА и ВСЁ делать вовремя», то для систем «мягкого» реального времени это может быть, например, минимальное «макси- мальное запаздывание» или средневзвешенная своевременность за- вершения операций. В зависимости от критериев оптимальности мо- гут применяться алгоритмы планирования задач, отличные от рас- смотренных. Например, может оказаться, что планировщик должен
анализировать момент выдачи критичных по времени управляющих воздействий и запускать на выполнение ту задачу, которая отвечает за ближайшие из них (алгоритм earliest deadline first, EDF).
www.pdffactory.com