Лекция 9. Программно-инструментальная платформа QNX6 (ppt

advertisement
ВСТРОЕННЫЕ СИСТЕМЫ УПРАВЛЕНИЯ
Лекция 9
ПРОГРАММНОИНСТРУМЕНТАЛЬНАЯ
ПЛАТФОРМА QNX6
А. Астапкович
Государственный университет аэрокосмического приборостроения, СПб, 2012
Встроенные системы управления
ПЛАТФОРМА QNX
История QNX
Операционная система QNX имеет многолетнюю историю .
Изначально это многозадачная , многопользовательская, многоконсольная
ОСРВ с микроядерной структурой.
В настоящее время на практике используются две версии
программно-инструментальных платформ:
 QNX4 для систем управления с централизованной структурой (ОСРВ QNX4.X)
 QNX6 для систем управления с распределенной структурой (ОСРВ Neutrino) .
Концепция NEUTRINO
Глобальной целью проекта Neutrino было создание универсальной,
развиваемой, масштабируемой и ОСРВ.
Эта операционная система должна была быть пригодной для построения
систем реального времени на самом широком спектре реализаций
аппаратной компоненты, начиная с одноядерных автономных устройств и
до сетевых систем управления на базе многоядерных процессоров, как уже
выпускаемых, так и новых модификаций.
Платформа QNX6 включает в себя:
• операционную систему реального времени QNX Neutrino;
• программно-инструментальную среду QNX Momentics,
реализованную на базе IDE Eclipse;
• пакеты программного обеспечения промежуточного слоя QNX Aviage.
Базовые стандарты
Реализация базовых компонент микроядра Neutrino соответствует стандартам :
POSIX 1003.1, 1003.1a
1003.1b Realtime
1003.1c Threads
1003.1d Realtime Extensions
1003.13 Realtime Profile Support
Стандарты семейства POSIX 1003.1 используют модель операционной системы
с возможностью выполнения многих процессов в квазипараллельном режиме.
При этом предполагается, что каждый процесс имеет свою, защищенную память,
недоступную для компонентов другого потока (стандарт ARINC-653).
Thread (нить)
Определение
“ Нить это компонент в процессе исполнения”
наиболее адекватно смыслу, но слово процесс уже занято !
A –адресное пространство
Компонент
(подпрограмма, функция)
OC
T – временные слоты
Нить (thread) является синонимом потока

В литературе ( переводной) используют оба термина
Потоки (нити)
Алгоритм функционирования многоканальной системы реального времени
представляет собой некоторое множество взаимодействующих нитей
(потоков) и процессов.
Реализация компонентов осуществляется под управлением базовой
сущности называемой нитью (thread). Понятие нить введено в стандарте
POSIX, и оно представляет собой компонент в стадии реализации.
.
A-адресное пространство
OC
Нити
(прикладные
задачи)
Tc
T-время
При диспетчеризации FIFO потоку предоставляется процессор на столько,
сколько ему необходимо
 Совокупность нитей образует процесс, который должен иметь хотя бы одну нить.
Процессы
Совокупность нитей образует процесс, который должен иметь хотя бы одну
нить. Количество нитей в процессе может варьироваться.
Процесс обладает собственным защищенным адресным пространством
A-адресное пространство
OC
Нити
Процесс 1
Нити
Процесс 2
T-время
 Процессы могут реализовываться, как на одном аппаратном модуле, так и
на системе модулей, объединенных в сеть
Концепция декомпозиции
Наличие механизма процессов с технологической точки зрения
разработки ПО обеспечивает :
Возможность единообразного способа декомпозиции задачи
на модули
Параллельную разработку (отладку ) модулей с
минимизацией проблем при интеграции системы
Увеличение качества конечного продукта за счет увеличения
количества ошибок и облегчения организации
сопровождения
Встроенные системы управления
Состав платформы QNX6
Интегрированные программно-инструментальные среды (IDE)
Описание алгоритма
Трансляция или
cредствами IDE :
компиляция кода,
объекты ОСРВ,
сборка кода
компоненты
Корректировка
описания алгоритма,
Отладка с
использованием
симулятора
Прошивка кода в макет
устройства или в опытный
образец
модификация
алгоритма
Отладка с использованием
внутрисхемного эмулятора
Integrated Development Environment (IDE) – специализированный
аппаратно-программный комплекс для разработки систем управления
встраиваемого класса.
Совокупность возможных реализаций IDE образует платформу поддержки разработки.
Структура платформы QNX6
ИНСТРУМЕНТАЛЬНЫЙ КОМПЬЮТЕР С OC: WINDOWS, SOLARIS, QNX NEUTRINO
Инструментарий для разработки
кода приложения на языках C/C++,
JAVA
Монитор
целевых
систем
Символьный
РАБОЧЕЕ
отладчик
ПРОСТРАНСТВO IDE
Профайлер
(на базе ECLIPSE)
приложений
Построитель
Системный
приложений
профайлер
PHOTON
Последовательный
коммуникационный
канал ETHERNET
АППАРАТНАЯ СОСТАВЛЯЮЩАЯ РАЗРАБАТЫВАЕМОЙ СИСТЕМЫ
Аппаратная компонента
Платформа обеспечивает возможность разработки программного обеспечения
для систем управления, реализуемых на базе микропроцессоров:
•Intel x8, AMD
- CISC архитектура фирмы INTEL;
•MIPS
- RISC архитектура фирмы MIPS Technologies;
•ARM, StrongARM- RISC архитектура фирмы Advance Risc Machine;
•SH-4
- RISC архитектура фирмы Renesas;
•PowerPC
- RISC архитектура фирмы IBM.
При этом обеспечивается поддержка наиболее распространенных шин:
ISA, PCI, VME,STD, STD 32 и PC/104.
Встроенные системы управления
Концепция ОСРВ Neutrino
Рекомендуемая литература:
Роберт Кртен.
Введение в QNX Neutrino 2-е изд., 2011
Микроядерная архитектура
•
•
•
•
Концепция построения ОСРВ Neutrino :
использование микроядерной архитектуры;
модульная организация системы;
информационный обмен между процессами посредством сообщений;
поддержка платформенного подхода.
Менеджер процессов
Выделяет и поддерживает адресные пространства процессов. При
запуске процесса осуществляет выделение ему памяти и активирует
его потоки (нити).
При необходимости использовать другой поток в другом процессе
менеджер процессов переключает адресное пространство.
Запуск процессов осуществляется разными способами, которые
реализуются системными компонентами Neutrino.
Менеджер процессов обеспечивает не только управление процессами,
но и операции работы с памятью и файловой системой.
Защита памяти
Для защиты памяти Neutrino имеет в своем составе опционально подключаемый
компонент управления памятью (Memory Management Unit – MMU).
Этот компонент обеспечивает работу с таблицами описания распределения
памяти между процессами.
Эти таблицы используются аппаратным модулем микропроцессора, для
анализа корректности выполняемых действий.
Обычно MMU делит память на страницы по 4 кБайта.
Программный сторожевой таймер
Защита памяти реализуется аппаратными средствами и блокирует возможность
несанкционированного доступа к памяти. Как правило, такие ситуации возникают
из-за ошибок в разрабатываемом программном обеспечении.
Процесс, компонент которого попытался изменить память другого процесса,
блокируется и возникшая ситуация протоколируется, что обеспечивает
разработчикам возможность анализа возникшей ситуации.
Реализация этой возможности, получившей название программный сторожевой
таймер, обеспечивает ряд возможностей, существенно облегчающих отладку.
Следует подчеркнуть, что эта возможность существенно облегчает
анализ сбойных ситуаций при опытной и штатной эксплуатации
системы, когда на передний план выходят перемежающиеся
отказы для плохо детерминированных условий эксплуатации.
Встроенные системы управления
МИКРОЯДРО NEUTRINO
Объекты микроядра
Описание алгоритма управления представляет собой программу на языке
высокого уровня (C,JAVA) написанную в соответствии с набором правил
QNX6.
Программа пишется с использованием пользовательских функций,
учитывающих специфику реализуемого алгоритма управления, и системных
функций из библиотек QNX6.
Системные функции обеспечивают работу с базовыми объектами микроядра
Системные
Микроядро
Объекты
микроядра
вызовы
Объекты микроядра Neutrino
.
Идентификация потоков
Как правило нити (потоки)
конкретного приложения
информационного обмена между собой
требуют
Способ обмена определяет конечные результаты обработки информации
(реализацию предписанного алгоритма управления), так как это влияет
напрямую на временную структуру реализуемого алгоритма.
Соответственно, помимо нитей в набор объектов микроядра входят
компоненты, обеспечивающих информационное взаимодействие нитей
между собой в процессе выполнения: connection, channel, pulse.
С одной стороны потоки используют общее адресное пространство своего
процесса, а с другой, имеют собственные данные, которые обеспечивают
идентификацию потоков при информационных обменах. Эти данные
называются атрибутами потока.
Атрибуты потока
Количество потоков внутри процесса может динамически меняться в
процессе исполнения.
Создание потока осуществляется посредством вызова функции pthread
create() , которая выделяет и инициализирует все необходимые потоку
ресурсы внутри адресного пространства процесса.
tid
register set
stack
signal mask
thread
local storage
cancellation
handlers
Атрибуты потока Neutrino
порядковый номер внутри своего процесса
собственный указатель на команду (IP) и
указатель на стэк (SP)
стэк потока, сохраняемый внутри адресного
пространства процесса
маска сигналов
память для хранения локальных данных нити
(Thread Local Storage -TLS) , таких как: tid,pid,
stack, stack base, errno.
Функции формирования данных при
уничтожении нити
После успешного завершения этих операций производится постановка
потока в очередь на выполнение.
Состояния потока
READY – поток ожидает ресурса
для выполнения пока процессор
исполняет другу нить с большим
или равным приоритетом
RUNNING- компонент выполняется
процессором
SIGSUSPEND – выполнение
приостановлено до получения сигнала
INTERRUPT– поток блокирован и
ожидает сигнала прерывания
DEAD – выполнение завершено и
поток ожидает присоединения к
другому потоку
Диспетчеризация потоков
Диспетчеризация потоков осуществляется автономно, без учета
состояния своего и других процессов.
Потоки, готовые к исполнению образуют очереди, упорядоченные в
соответствии с приоритетами.
Список дисциплин традиционен для QNX : FIFO, RR и адаптивная.
С этой точки зрения, поток может находится в трех состояниях :
выполнения, быть вытесненным другим потоком с большим приоритетом
или быть заблокированным.
В работающей системе приоритет потока может изменяться либо
путем прямой манипуляции, либо средствами микроядра при
получении им сообщения от потока с большим приоритетом.
Информационное взаимодействие
процесов в Neutrino
Информационное взаимодействие
Поддержка модели потоков подразумевает возможность использования общих
данных для реализации своих компонент.
Иерархия способов обмена двухуровневая. Она включает в себя обмены
внутри процесса и обмены информацией нитями из разных процессов.
Ключевая особенность Neutrino - обмен посредством сообщениями между
процессами (Inter Process Communication, IPC).
Обмен сообщениями по сути дела является тем клеем, который связывает
модули Neutrino и прикладные компоненты в единое целое и призван обеспечить
универсальность этой операционной системы.
Типы коммуникаций
Сообщение представляет собой пакет байтов, пересылаемых одним процессом другому.
На структуру и содержание сообщения не накладывается никаких ограничений.
Разновидности типов коммуникаций Neutrino
Тип
Передача сообщений
(message-passing)
Уровень реализации
Микроядро
Сигналы (signals)
Микроядро
POSIX очереди
(POSIX message queues)
Разделяемая память
(shared memory)
Внешний процесс
Трубы (pipes)
Внешний процесс
FIFO
Внешний процесс
Менеджер процессов
Так как речь идет о системах управления реального времени, требуется
обеспечить синхронизацию информационно-взаимодействующих
процессов .
Механизм реализации IPC
Передаваемые сообщения адресуются не посредством указания адреса нити
получателя и адреса нити отправителя, а путем предварительного создания
описания каналов и соединений.
ПРОЦЕСС CLIENT
ПРОЦЕСС SERVER_1
Cоединение
ПОТОК_ 1
(Connection)
ПОТОК_ 1
ConnectAttach()
ПОТОК_ 2
ПОТОК_ 2
Канал
(Channel)
ПОТОК_ M
ПОТОК_ K
ChannelCreate()
Поток, который ожидает сообщения, должна создать канал для его передачи. Поток, которому
требуется послать сообщение должна сначала установить соединение путем подключения к
каналу.
Эти операции выполняются путем вызова соответствующих системных
функций
ChannelCreate() и ConnectAttach(). У этих функций есть антиподы ChannelDestroy() и
ConnectDetach(). После установления соединения процесс клиент может посылать сообщения,
пользуясь системной функцией MsgSend().
Синхронизация обменов
В общих чертах это осуществляется следующим образом:
текущее состояние процесса описывается соответствующей переменной;
посылка сообщения, ожидание и прием сообщения соответствующим
образом меняют текущее состояние процесса;
 поток, вызвавший вызов системной функции MsgSend()для отправки
сообщения другому потоку, который может находится внутри другого
процесса, будет блокирован до тех пор, пока поток адресант сообщения
не выполнит вызова системной функции MsgReceive(), обработает
полученное сообщение и не выполнит вызова системной функции
MsgReply().
ОБРАБОТКА ПРЕРЫВАНИЙ
Механизм обработки прерываний
В Neutrino при появлении сигнала прерывания от аппаратного модуля,
управление передается на уровень микроядра, которое осуществляет
подготовительные работы по запуску обработчика прерываний,
реализуемых пользовательским компонентом.
В одноканальном приближении ключевым параметром является время
реакции на событие (interrupt latency) представляющее временной интервал
между появлением сигнала прерывания и началом выполнения первой
команды соответствующего обработчика прерываний.
Это время относительно невелико. Однако, оно может существенно
возрасти, если система прерываний будет заблокирована, например,
каким-либо системным процессом.
Задержка диспетчеризации
Обработка прерываний осуществляется запуском диспетчером потока (нити)
обработчика соответствующего прерываний, обладающим высоким приоритетом.
Таким образом, содержательная реакция на сигнал прерывания последует лишь
после начала выполнения этой нити.
Для определения задержки при таком варианте обработки прерываний введена
характеристика, называемая задержка диспетчеризации (scheduling latency).

Задержка диспетчеризации определяется, как временной интервал между
моментом исполнения последней инструкции обработчика прерываний,
фиксирующего появление аппаратного прерывания, и началом выполнения
первой команды нити драйвера, обрабатывающей это прерывание.
Системный таймер
Системные функции clock(), timer(), synch() используются для
отслеживания времени суток и измерения длительности временных
интервалов.
С помощью этих функций Neutrino обеспечивает возможность
синхронизации часов между несколькими системами.
Приложение, запрашивающее сервис, нуждающийся в тайм-ауте,
запрашивает у микроядра автоматический запуск таймера в случае
перехода приложения в определенное состояние.
Запуск таймера и запрос сервиса в этом случае реализуются как
атомарная операция, исключающая неоднозначность.
Инструментальная среда QNX Momentics
Философия подхода
Neutrino разрабатывалась с учетом необходимости обеспечить ее удобную
интеграцию в программно-инструментальные платформы.
Пара базовых элементов Neutrino микроядро и менеджер процессов
(Process Manager) называется procnto.
Блок procnto поставляется в двух модификациях, одна из которых
предназначена для использования в процессе отладки.
Эта инструментальная версия называется proconto-instr и обладает широким
наборов средств для трассировки и мониторинга состояния разрабатываемой
системы управления в процессе исполнения разрабатываемого кода.
История развития
QNX6 имеет в своем составе компонент Photon, предназначенный для обеспечения
графического интерфейса (Graphic User Interface – GUI).
Его реализация базируется на механизме обмена сообщениями. Этот интерфейс
ориентирован на использование оконных интерфейсов Windows и Unix, с которыми
он связывается посредством использования удаленного пользовательского интерфейса
(Remote User Interface – RUI).
Разработка этой оболочки велась одновременно с разработкой Neutrino.

В настоящее время для разработки c Neutrino начинает
широко использоваться IDE QNX Momentics.
ПРИНЦИПЫ РЕАЛИЗАЦИИ
Программно-инструментальная среда QNX Momentics представляет
собой унифицированную среду для разработки многокомпонентных и
разнородных систем управления.
QNX Momentics состоит из ядра Eclipse, к которому подключены
специализированные QNX расширения.
Eclipse представляет собой универсальную расширяемую платформу,
обеспечивающую возможность создания и поддержки специализированных сред
поддержки разработки, путем объединении компонент IDE.
Архитектура и способ реализации Eclipse ( язык JAVA ) обеспечивают его
Переносимость и расширяемость.
Символьный отладчик Momentics
Символьный отладчик Momentics обеспечивает возможность:
•
одновременно отлаживать несколько приложений, написанных на C, C++ и/или Java;
•
отлаживать многопоточные приложения, контролируя каждый поток по отдельности
и отслеживая передачу управления между ними;
•
отлаживать несколько процессов, выполняющихся одновременно на
микропроцессорах с различными архитектурами ;
•
динамически подключаться отладчиком к любому выполняющемуся процессу;
•
проводить анализ дамп-файлов при аварийном завершении отладочного теста.
ОКОННЫЙ ИНТЕРФЕЙС
Монитор и навигатор
Связь с аппаратной компонентой разрабатываемой системы обеспечивают
такие компоненты инструментальной среды, как монитор и навигатор
целевых систем.
Монитор целевых систем предоставляет информацию о системах и процессах
и используется совместно с навигатором целевых систем.
Навигатор позволяет разработчику привязывать проекты к IP-адресам
аппаратных модулей или именам хостов, однозначно определяя текущую
программно-аппаратную конфигурацию целевой системы.
Возможности монитора
Монитор целевых систем позволяет в режиме исполнения программного кода
отследить использование ресурсов, конкретными процессами и потоками.
Можно проконтролировать расход памяти и ресурсов процессора, как для всей
системы в целом, так и для каждого процесса в отдельности.
Монитор позволяет отслеживать ряд атрибутов потока, таких как его текущее
состояние, дисциплина планирования, использование процессора, размер стека,
состояния сигналов, карты памяти программы, файловые дескрипторы и т.д .
С помощью монитора можно выявлять потенциальные ситуации взаимных
блокировок, просматривая графическую диаграмму отношений блокирования.
Инструментальные версии
Разработка программного обеспечения для систем управления
обладает рядом существенных отличий по сравнению с разработкой
программного обеспечения для чисто информационных систем.
Возможность отслеживания динамики поведения каналов управления
при отладке программного обеспечения, опция, которая существенно
повышает производительность разработчиков и качество
программного кода.
При этом следует подчеркнуть, что использование описанных выше
возможностей по отладке могут выполняться лишь с
инструментальной версией ядра (proncto).
Download