- •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. ЗАКЛЮЧЕНИЕ
- •СПИСОК ЛИТЕРАТУРЫ
СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ |
35 |
3. Обзор некоторых операционных систем реального времени
До недавнего времени для решения задач автоматизации в ос- новном использовались операционные системы (ОС) реального вре- мени (РВ). Это компактные системы, основанные на микроядерной архитектуре, – такие так VxWorks, OS-9, PSOS, QNX, LynxOS. Эти сис- темы обладают быстрым временем реакции на события и прерыва- ния, компактностью кода, хорошей встраиваемостью и другими пре- имуществами, характерными для операционных систем с микроядер- ной архитектурой.
Кроме того, перечисленные системы уже много лет на рынке, имеют массу применений в ответственных проектах, что является до- полнительным фактором доверия к ним. И, наконец, разработчик от- ветственной системы с повышенными требованиями к надежности, купив коммерческую ОСРВ, не остается наедине с возможными про- блемами, так как может пользоваться услугами технической под- держки поставщика.
Конечно, без ОСРВ пока нельзя обойтись во многих применени- ях, и они оправдывают себя в высоко технологичных проектах (тре- нажеры, уникальное оборудование) или при массовом количестве по- ставок (сотовые телефоны, анализаторы). В то же время существуют задачи, для решения которых требуется поддержка реального време- ни, но при этом большие затраты на разработку не окупятся.
Наверное, классические операционные системы реального вре-
мени остаются самым надежным решением при построении систем жесткого реального времени повышенной надежности. Однако сис- тем с такими требованиями не так много в мире, который нас окру- жают. Возможны ли другие решения?
В настоящее время происходит активный процесс слияния уни- версальных OC и ОС реального времени. На программном рынке по- являются различные инструменты поддержки режима реального вре- мени, встраиваемые в привычные операционные системы. Этот класс
продуктов обладает значительными преимуществами со стороны пользователей и программистов, сочетая в себе привычный пользова- тельский интерфейс, средства разработки программ и API-интерфейс реального времени. Правда, пока еще нет оснований утверждать, что
www.pdffactory.com
СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ |
36 |
подобные решения полностью заменят собой обычные системы ре- ального времени. У традиционных ОС реального времени есть пока большое преимущество – встраиваемость и компактность. Однако и на этом рынке происходят изменения: корпорация Microsoft выпусти- ла Windows NT Embedded (NTE), использование которой позволяет "ужать" NT до 8-10 Мбайт. Уже появились и продукты реального времени, рассчитанные на эту операционную систему, например,
RTX.
А что же Unix? Традиционно, во многих ОС реального времени используются подмножества API-интерфейсов Unix, что сближает эти операционные системы с Unix. Существуют также полнофункцио- нальные Unix-системы, поддерживающие режим реального времени.
3.1. Linux реального времени
Бурный рост популярности Linux побуждает разработчиков внимательнее присмотреться к этой операционной системе [11]. У Linux много достоинств: открытость кода; большое количество со- путствующего программного обеспечения, пока в основном ориенти- рованного на серверные применения; наличие неплохой документа- ции на API-интерфейс и ядро операционной системы; работа на про- цессорах различных классов. В данный момент эта ОС готова к ста- бильной работе, а открытость ее исходных текстов и архитектуры на- ряду с растущей популярностью заставляет программистов перено- сить свои наработки на многие аппаратные платформы: SGI, IBM, Intel, Motorola и т.д. В частности, Motorola активно работает в своей
традиционной сфере встраиваемых систем и продвигает на рынок продукт LinuxEmbedded. Вообще говоря, Linux прекрасно подходит для компактных встроенных применений; на рынке уже появились поставщики, предлагающие усеченные варианты этой операционной системы, которые занимают 1-2 Мбайт на жестком диске. В качестве примера можно привести проект Linux Router Project.
Для задач реального времени сообщество разработчиков Linux активно применяет специальные расширения – RTLinux, KURT и UTIME, позволяющие получить устойчивую среду реального време- ни. RTLinux представляет собой систему "жесткого" реального време- ни, а KURT (KU Real Time Linux) относится к системам "мягкого" ре- ального времени. Linux-расширение UTIME, входящее в состав KURT,
www.pdffactory.com
СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ |
37 |
позволяет добиться увеличения частоты системных часов, что приво- дит к более быстрому переключению контекста задач.
Проект KURT характеризуется минимальными изменениями яд- ра Linux и предусматривает два режима работы – нормальный (normal mode) и режим реального времени (real-time mode). Процесс, исполь- зующий библиотеку API-интерфейсов KURT, в любые моменты вре- мени может переключаться между этими двумя режимами. Про- граммный пакет KURT оформлен в виде отдельного системного мо- дуля Linux – RTMod, который становится дополнительным плани- ровщиком реального времени. Данный планировщик доступен в не-
скольких вариантах и может тактироваться от любого системного таймера или от прерываний стандартного параллельного порта. Так как все процессы работают в общем пространстве процессов Linux, программист использует в своих программах стандартные API- интерфейсы Linux и может переключаться из одного режима в другой по событиям, либо в определенных местах программы. При переклю- чении в режим реального времени все процессы в системе "засыпа- ют" до момента освобождения ветви процесса реального времени. Это довольно удобно при реализации задач с большим объемом вы- числений, по своей сути требующих механизмов реального времени, например в задачах обработки аудио- и видеоинформации.
Стандартно такты планировщика RTMod задаются от системно- го таймера – время переключения контекста задач реального времени (time slice) равно 10 мс. Используя же KURT совместно с UTIME, можно довести время переключения контекста задач до 1 мс. Преры- вания обрабатываются стандартным для ОС Linux образом – через механизм драйверов.
API-интерфейс KURT разделяется на две части – прикладную и системную. Прикладная часть позволяет программисту управлять по- ведением процессов, а системный API-интерфейс предназначен для манипулирования пользовательскими процессами и программирова- ния собственных планировщиков. Прикладная часть API-интерфейса KURT состоит всего из четырех функций:
set_rtparams позволяет добавить процесс в ядро с маской SCHED_KURT. Только процессы, чья политика в планировщике ус- тановлена как SCHED_KURT, смогут работать в режиме реального времени;
www.pdffactory.com
СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ |
38 |
§get_num_rtprocs получает идентификатор "rt_id" процесса из планировщика реального времени RTMod;
§rt_suspend позволяет приостановить планировщик реального времени;
§get_rt_stats получает статус процесса из таблицы планиров- щика процессов реального времени.
Простота использования KURT позволяет с максимальным ком- фортом программировать задачи, требующие как функций реального времени, так и всего многообразия API-интерфейса Unix. Использо- вание "мягкого" реального времени обычно подходит для реализации мультимедийных задач, а также при обработке разного рода потоков информации, где критично время получения результата. Совершенно другой подход применен при реализации в Linux "жесткого" реально- го времени.
RTLinux – это дополнение к ядру Linux, реализующее режим "жесткого" реального времени, которое позволяет управлять различ- ными чувствительными ко времени реакции системы процессами. По сути дела, RTLinux – это операционная система, в которой маленькое ядро реального времени сосуществует со стандартным POSIX-ядром
Linux.
Разработчики RTLinux пошли по пути запуска из ядра реального времени Linux-ядра как задачи с наименьшим приоритетом. В RTLinux все прерывания обрабатываются ядром реального времени, а
вслучае отсутствия обработчика реального времени – передаются Linux-ядру. Фактически Linux-ядро является простаивающей (idle) за- дачей операционной системы реального времени, запускаемой только
втом случае, если никакая задача реального времени не исполняется. При этом на Linux-задачу накладываются определенные ограничения, которые, впрочем, для программиста прозрачны.
Нельзя выполнять следующие операции: блокировать аппарат- ные прерывания и предохранять себя от вытеснения другой задачей. Ключ к реализации данной системы – драйвер, эмулирующий систе- му управления прерываниями, к которому обращается Linux при по- пытке блокировать прерывания. В этом случае драйвер перехватыва- ет запрос, сохраняет его и возвращает управление Linux-ядру.
Все аппаратные прерывания перехватываются ядром операци- онной системы реального времени. Когда происходит прерывание,
www.pdffactory.com
СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ |
39 |
ядро RTLinux решает, что делать. Если это прерывание имеет отно- шение к задаче реального времени, ядро вызывает соответствующий обработчик. В противном случае, либо если обработчик реального времени говорит, что хочет разделять это прерывание с Linux, обра- ботчику присваивается состояние ожидания (pending). Если Linux по- требовала разрешить прерывания, то прерывания, которые находятся в состоянии "pending", эмулируются. Ядро RTLinux спроектировано таким образом, что ядру реального времени никогда не приходится ожидать освобождения ресурса, занятого Linux-процессом (рис.3.1).
Рис.3.1. Механизм работы RTLinux – Linux-расширения
жесткого реального времени
Для обмена данными между операционными системами реаль- ного времени и Linux могут использоваться следующие механизмы:
§разделяемые области памяти;
§псевдоустройства, предоставляющие возможность обмена данными с приложениями реального времени.
Ключевой принцип построения RTLinux – как можно больше ис- пользовать Linux и как можно меньше собственно RTLinux. Действи- тельно, именно Linux заботится об инициализации системы и уст- ройств, а также о динамическом выделении ресурсов. "На плечи" RTLinux ложится только планирование задач реального времени и об- работка прерываний. Для простоты запуска в контексте ядра, сохра-
нения модульности и расширяемости системы процессы реального времени реализованы в виде загружаемых модулей Linux. Как прави- ло, приложение реального времени с RTLinux состоит из двух незави-
www.pdffactory.com
СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ |
40 |
симых частей: процесса, исполняемого ядром RTLinux, и обыкновен- ного Linux-приложения.
Для иллюстрации работы приложения реального времени рас- смотрим прикладной модуль, который использует ядро реального времени RTLinux в виде загружаемого модуля Linux:
#define MODULE
#include <linux/module.h>
/* необходимо для задач реального времени */
#include <linux/rt_sched.h> #inlcude <linux/rt_fifo.h>
RT_TASK mytask;
В заголовке модуля определяется структура RT_TASK, которая содержит указатели на структуры данных модуля, а также управляю- щую информацию. В нашем случае, для связи между процессами, ис- пользуются очереди сообщений FIFO (рис.3.2).
Модуль реального времени читает данные из устройства и кла- дет их в очередь сообщений, откуда их потом забирает обыкновенное приложение Linux.
Рис.3.2. Механизм межпроцессной связи через очереди сообщений FIFO
Как и каждый модуль Linux-ядра, процесс реального времени должен выполнить процедуры инициализации и завершения анало- гичные модулям Linux:
www.pdffactory.com