
- •Введение
- •Глава 1. Основные принципы организации операционных систем реального времени
- •1.1. Общие положения и определения
- •1.2. Отличие механизма современных осрв
- •1.3. Параметры осрв
- •1.4. Программное обеспечение многозадачности ос
- •1.5. Архитектура осрв. Классы осрв
- •1.6. Синхронизация задач
- •1.7. Базовые понятия программного обеспечения реального времени
- •1.8. Асинхронный обмен данными
- •1.9. Надежность систем реального времени
- •1.10. Планирование задач
- •1.11. Планирование периодических процессов
- •1.12. Взаимоблокировки
- •Контрольные вопросы
- •Глава 2. Типовые операционные системы реального времени
- •2.1. Обзор систем реального времени
- •2.2. Операционная система Windows nt
- •2.2.1. Ужесточение требований к ос 90-х годов
- •2.2.2. Операционные системы реального времени и Windows nt
- •2.2.3. Процессы и потоки nt
- •2.2.4. Пути расширения реального времени для nt
- •2.2.5. Обработка прерываний и исключений
- •2.2.6. Особенности системы ввода/вывода системы nt
- •2.2.7. Windows nt как операционная система реального времени
- •2.2.8. Расширения Windows nt
- •2.3. Операционная система qnx
- •2.3.1. Общие положения
- •2.3.2. Системная архитектура qnx
- •2.3.3. Qnx как сеть
- •2.3.5. Оконная система Photon microGui
- •2.3.6. Phocus 4 для создания встраиваемых scada
- •2.4. Операционные системы реального времени для встраеваемых систем
- •2.5. Ос рв для встраиваемых модулей от компании Microsoft
- •2.6. Функциональные потребности scada-системы
- •Контрольные вопросы
- •Глава 3. Общий анализ контроллеров
- •3.1. Аппаратное обеспечение
- •3.2. Программирование plc
- •3.3. Выбор контроллерных средств
- •3.4. Классификация современных контроллеров
- •3.5. Взаимодействие компонентов
- •3.6. Проектирование распределенных систем управления
- •3.7. Открытая модульная архитектура контроллеров
- •3.8. Архитектура производственной базы данных реального времени
- •3.9. Эволюция стандарта pci для жестких встраиваемых приложений
- •3.11. Одно- и многоуровневые системы диспетчерского контроля и управления
- •3.12. Технологии и протоколы передачи данных в промышленности: Industrial Ethernet
- •3.13. Обеспечение надежности асу тп с использованием резервированного кольца Turbo Ring
- •3.14. Анализ архитектур контроллеров с параллельной шиной
- •3.15. Повышенные требования к устойчивости функционирования
- •Контрольные вопросы
- •Глава 4. Примеры реализации типовых контроллеров
- •4.1. Промышленные контроллеры для автоматизации технологических процессов
- •4.2. Модули adam-8000 от компании Advantech9 и система программирования adam-winplc7
- •4.3. LabView Real-Time LabView реального времени
- •4.4. Встраиваемые системы и ос для них
- •4.5. Промышленный контроллер р-130isa
- •4.6. Совместное использование hmi и pac
- •4.7. Система Реального Времени cf-mntr
- •4.8. Экономичные контроллеры Pico
- •4.9. RapidIo: технология для приложений реального времени
- •4.10. Trace mode 6 и t-factory 6: обзор исполнительных модулей
- •4.11. Контроллер Crestron cp2e
- •4.12. Асу тп на базе контроллеров micro-pc
- •4.14. Itv ndc-f18 – универсальные контроллеры ndc-f18
- •4.15. Сетевой контроллер компании Lenel для систем контроля доступа
- •4.16. Сетевой контроллер реального времени
- •Контрольные вопросы
- •Глава 5. Мультимедийные системы реального времени
- •5.1. Требования реального времени в системах мультимедиа
- •5.2. Требования к архитектуре мультимедиа-систем
- •5.3. Объединение графического и мультимедийного ядра в систему Freescale
- •5.5. Scsa: архитектура для систем мультимедиа реального времени
- •Контрольные вопросы
- •Заключение
- •Рекомендуемый библиографический список
- •Оглавление
- •Глава 1. Основные принципы организации операционных систем реального времени 6
- •Глава 2. Типовые операционные системы реального времени 55
- •Глава 3. Общий анализ контроллеров 179
- •Глава 4. Примеры реализации типовых контроллеров 236
- •Глава 5. Мультимедийные системы реального времени 292
- •Системы реального времени Программно-технический комплекс
- •346428, Г. Новочеркасск, ул. Просвещения, 132
1.4. Программное обеспечение многозадачности ос
Важным понятием для многозадачной ОС РВ является задача как набор операций (машинных инструкций), предназначенный для выполнения логически законченной функции системы. При этом задача конкурирует с другими задачами за получение контроля над ресурсами вычислительной системы. Принято различать две разновидности задач: процессы и потоки. Процесс представляет собой отдельный загружаемый программный модуль (файл), который, как правило, во время исполнения имеет:
собственные области памяти под код и данные, включая значения регистров и счетчика команд;
собственный стек;
собственное отображение виртуальной памяти (в системах с виртуальной памятью) на физическую;
собственное состояние.
Процесс находится в одном из типичных состояний:
«остановлен» – процесс остановлен и не использует процессор;
«терминирован» – процесс не использует процессор (процесс закончился, но еще не удален ОС);
«ждет» – процесс ждет некоторого события (аппаратное или программное прерывание, сигнал или другая форма межпроцессного взаимодействия);
«готов» – процесс не остановлен, не терминирован, не ожидает, не удален, но и не работает (не получил доступ к процессору, если в данный момент выполняется другой, более высокоприоритетный процесс);
«выполняется» – процесс выполняется и использует процессор.
Создание процесса состоит в присвоении новому процессу идентификатора процесса и подготовки информации, которая определяет окружение процесса. Загрузка процесса означает загрузку в память кода процесса. Если код программы загружен, процесс готов к выполнению. Он начинает конкурировать с другими процессами за ресурсы процессора. Процесс выполняется или блокировуется по тем или иным причинам. Завершение процесса означает освобождение всех ресурсов, выделенных процессу,– файловых дескрипторов, памяти и т.д.
Модель потока базируется на двух независимых концепциях: группировании ресурсов и выполнении программы. С одной стороны, процесс можно рассматривать как способ группирования родственных ресурсов в одну группу. У процесса есть адресное пространство, содержащее текст программы и данные, а также другие ресурсы. Ресурсами могут быть открытые файлы, обработчики сигналов, учетная информация и многое другое. Процесс можно рассматривать как поток исполняемых команд, или просто поток. У потока есть счетчик команд, отслеживающий порядок выполнения действий. У него есть регистры, в которых хранятся текущие переменные, а также стек, содержащий протокол выполнения процесса, где на каждую процедуру, вызванную, но еще не вернувшуюся, отведен отдельный фрейм. У процесса есть свое состояние. Потоки одного процесса выполняются в одном адресном пространстве, используют одни и те же глобальные переменные, ресурсы. Процессы используются для группирования ресурсов, а потоки являются объектами, поочередно выполняющимися на процессоре, и могут пользоваться общими участками кода и данных в рамках единого программного модуля.
Каждому процессу и каждому потоку в ОСРВ приписывается приоритет. Чем важнее процесс или поток, тем больше это число. Приоритет может быть фиксированным (назначается при создании процесса и не меняется в течение его жизни). В зависимости от алгоритмов планирования приоритет может изменяться в течение жизни.
Преимущества потоков:
1. Множество потоков способно размещаться внутри одного программного модуля (exe-файла), что позволяет экономить ресурсы как внешней, так и внутренней памяти.
2. Использование потоками общей области памяти позволяет эффективно организовать межзадачный обмен сообщениями (достаточно передать указатель на сообщение). Процессы не имеют общей области памяти, поэтому ОС должна либо целиком скопировать сообщение из области памяти одной задачи в область памяти другой (что для больших сообщений весьма накладно), либо предусмотреть специальные механизмы, которые позволили бы задаче получить доступ к сообщению из области памяти другой задачи.
3. Контекст потоков меньше, чем процессов, и время переключения между задачами-потоками меньше, чем между задачами-процессами.
4. Так как все потоки, а иногда и само ядро РВ размещаются в одном ЕХЕмодуле, значительно упрощается использование программ-отладчиков (debugger).
Недостатки потоков:
1. Потоки не могут быть подгружены динамически. Чтобы добавить новый поток, необходимо провести соответствующие изменения в исходных текстах и перекомпилировать приложение. Процессы, в отличие от потоков, подгружаемы, что позволяет динамически изменять функции системы в процессе ее работы.
2. Доступ потоков к областям данных друг друга, может привести к ситуации, когда некорректно работающий поток может испортить данные другого потока. Процессы же защищены от взаимного влияния, а попытка записи в «не свою» память приводит к возникновению специального прерывания по обработке «исключительных ситуаций».
Основные свойства задач. С точки зрения ОС, информация о задаче хранится в унифицированной структуре данных управляющем блоке (Task Control Block, TCB). В блоке хранятся такие параметры, как имя и номер задачи, верхняя и нижняя границы стека, ссылка на очередь сообщений, статус задачи, приоритет и т. п.
Приоритет – это целое число, присваиваемое задаче и характеризующее ее важность по сравнению с другими задачами, выполняемыми в системе. Приоритет используется планировщиком задач для определения того, какая из готовых к работе задач должна получить управление. Различают системы с динамической и статической приоритетностью. В первом случае приоритет задач меняется в процессе исполнения, а во втором – приоритет задач жестко задается на этапе разработки или во время начального конфигурирования системы.
Контекст задачи – это набор данных, содержащий всю необходимую информацию для возобновления выполнения задачи с того места, где она была ранее прервана. Часто контекст хранится в управляющем блоке (TСB) и включает в себя такие данные, как счетчик команд, указатель стека, регистры СРU и FPU и т. п. Планировщик задач при необходимости сохраняет контекст текущей активной задачи и восстанавливает контекст задачи, назначенной к исполнению. Такое переключение контекстов и является основным механизмом ОС РВ при переходе от выполнения одной задачи к выполнению другой.
Состояние (статус) задачи. С точки зрения ОС, задача может находиться в нескольких состояниях. Загруженная на выполнение задача может находиться в четырех состояниях:
1. Активная задача – это задача, выполняемая системой в текущий момент времени.
2. Готовая задача – это задача, готовая к выполнению и ожидающая у планировщика своей «очереди».
3. Блокированная задача – это задача, выполнение которой приостановлено до наступления определенных событий: освобождение необходимого задаче ресурса, поступление ожидаемого сообщения, завершение интервала ожидания и т. п.
4. Пустая задача (Idle Task) – это задача, запускаемая самой ОС в момент инициализации и выполняемая только тогда, когда в системе нет других готовых для выполнения задач. Пустая задача запускается с самым низким приоритетом и представляет собой бесконечный цикл «ничего не делать», предоставляя ОС удобный механизм отработки ситуаций, когда нет ни одной готовой к выполнению задачи.
Многократный запуск задач. Многозадачные ОС позволяют запускать несколько копий одной и той же задачи. Для каждой такой копии создается свой ТСВ и выделяется своя область памяти. Для экономии памяти используют один и тот же исполняемый код для всех запущенных копий. При этом программа обеспечивает реентерабельность и не должна использовать временные файлы с фиксированными именами, корректно осуществляя доступ к глобальным ресурсам.
Реентерабельность (повторная входимость) означает возможность без негативных последствий временно прервать выполнение какой-либо функции или подпрограммы, а затем вызвать эту функцию или подпрограмму снова. Частным проявлением реентерабельности является рекурсия, когда тело подпрограммы содержит вызов самой себя. Ошибки, связанные с нереентерабельностью, трудно обнаружить, а последствия они могут вызвать самые катастрофические.
Планирование задач. Важной частью любой ОСРВ является планировщик задач (диспетчер задач, супервизор), который определяет какая задача выполняется в системе в конкретный момент времени, т.е. делит между задачами ресурсы многозадачной вычислительной системы. К основным методам планирования относят: циклический алгоритм (round robin), разделение времени с равнодоступностью (time sharing with fairness), кооперативную многозадачность.
Наиболее часто используемый в ОСРВ принцип планирования – приоритетная многозадачность с вытеснением, идея которого состоит в том, что высокоприоритетная задача, как только для нее появляется работа, немедленно прерывает (вытесняет) низкоприоритетную. Самым простым методом планирования, не требующим никакого специального ПО и планировщика, является использование циклического алгоритма в стиле round robin (рис. 1.4):
void main (void)
{
for (;;) {
task0();
task1();
task2();
/* и т. д. */
}
}
Каждая «задача», представляющая собой отдельную подпрограмму, выполняется циклически. При этом надо придерживаться следующих правил:
1. Подпрограммы не должны содержать циклов ожидания
while (TRUE) {
if (switch_up()) {
lamp_off();
break;
}
}
2. Подпрограммы должны выполнять свою работу быстрее, чтобы дать возможность работать следующей подпрограмме.
3. При необходимости подпрограмма может сохранять свое окружение и текущие результаты, чтобы в следующем цикле возобновить работу с того же места.
Преимущества циклического алгоритма:
1. Простота использования и прозрачность для понимания.
2. Если исключить из рассмотрения прерывания, система полностью детерминирована. Задачи вызываются в одной и той же последовательности, что позволяет просто произвести анализ «наихудшего случая» и вычислить максимальную задержку.
a) Круговое планирование с вытеснением |
|
б) Невытесняющее планирование на основе приоритетов |
|
|
г) Планирование с немедленным вытеснением |
в) Вытесняющее планирование на основе приоритетов с точками вытеснения |
|
Рис. 1.4. Основные варианты планирования задач в СРВ |
3. Минимальные размеры кода и данных, т.к. в отличие от алгоритмов с вытеснением, для всех задач необходим только один стек.
4. Отсутствуют ошибки, обусловленные «гонками».
К недостаткам циклического алгоритма можно отнести отсутствие приоритетности и очередей. К тому же задачи вызываются независимо от того, должны ли они в данный момент что-либо делать или нет, а на прикладного программиста ложится максимальная ответственность за работоспособность системы.
Другим, широко используемым, является алгоритм планирования с режимом разделения времени. Существуют различные реализации в рамках этого алгоритма (timeslicing и time-sharing). Алгоритм реализуется следующим образом: каждой задаче отводится определенное количество квантов времени (обычно кратно 1 мс), в течение которых задача может монопольно занимать процессорное время. После того как заданный интервал времени истекает, управление передается следующей готовой к выполнению задаче с наивысшим приоритетом, которая выполняется в течение отведенного для нее промежутка времени, после чего все повторяется в стиле round robin.
К недостаткам алгоритма планирования с режимом разделения времени является, то что низкоприоритетные задачи могут никогда не получить управление, так как три высокоприоритетные задачи будут делить все процессорное время между собой. Единственную возможность для низкоприоритетных задач получить управление предоставляет ситуация, когда все высокоприоритетные задачи находятся в блокированном состоянии. Для решения этой проблемы применяется прием, получивший название равнодоступность (fairness). При этом реализуется принцип адаптивной приоритетности, когда приоритет задачи, которая выполняется слишком долго, постепенно уменьшается, позволяя менее приоритетным задачам получить свою долю процессорного времени. Равнодоступность применяется, главным образом, в многопользовательских системах и редко применяется в СРВ.
Кооперативная многозадачность – это еще один алгоритм переключения задач, реализованный в ОС Windows 3.х. Задача, получившая управление, выполняется до тех пор, пока сама по своей инициативе не передаст управление другой задаче. По сути это продолжение идеологии round robin, но в чистом виде мало применяется в СРВ.
Приоритетная многозадачность с вытеснением – наиболее часто используемый в ОС РВ принцип планирования, в котором высокоприоритетная задача, как только для нее появляется работа, немедленно прерывает (вытесняет) низкоприоритетную, т.е. если задача переходит в состояние готовности, она немедленно получает управление.
Планировщик анализирует момент выдачи критичных по времени управляющих воздействий и запускает на выполнение задачу, которая отвечает за ближайшие из них (алгоритм earliest deadline first, EDF).
В одной вычислительной системе могут одновременно сосуществовать задачи и «жесткого», и «мягкого» реального времени, и только одна из этих задач, обладающая наивысшим приоритетом, может быть по-настоящему детерминированной.