BlackBerrys.ru
×
  • Создать...

ОС реального времени QNX


Данный обзор посвящен операционной системе реального времени (ОСРВ) под названием QNX. Какая ОС может исправно работать 20 лет без перезагрузки? QNX может быть интересна не только специалистам по встраиваемым и высоконадёжным системам, но и широкому кругу «обычных» пользователей. Именно на базе данной ОСРВ работает популярный планшет BlackBerry PlayBook от компании RIM.

Общие сведения о QNX.

Операционная система реального времени QNX не является ответвлением какой-либо UNIX-подобной системы, например, дистрибутивом или клоном Linux. Да, эта система UNIX-подобна, но она является самостоятельной. Данная ОСРВ основывается на своем «микроядре», имеет поддержку стандартов POSIX (последние версии). В 1981 году вышла первая версия QNX, за ней последовали QNX2, QNX4 и QNX 6 (QNX Neutrino). QNX2 широко использовалась в 80-е годы, но кое-где встречается и до сих пор. Расцвет версии QNX4 пришелся на 90-е годы, в это время она вполне успешно конкурировала с Windows. На рубеже столетий началось развитие новой ветки ОСРВ QNX: QNX6 (QNX Neutrino). Последняя версия достаточно современна – она вышла в начале 2000-х годов. По сравнению с предшественницами она предоставляет множество новых возможностей: поддержку разделяемых библиотек, поддержку многопроцессорности, поддержку отличных от x86 аппаратных архитектур, например, SH4, ARM, PowerPC, MIPS и др. Серьезной переработке подверглись сетевая подсистема, графическая система Photon и другие подсистемы ОСРВ. В данной версии появилась возможность простого портирования сетевых драйверов NetBSD в QNX6.

В ОСРВ QNX есть множество положительных моментов, таких как отличная встроенная справка, простота разработки под данную ОС, высокая надёжность, модульная структура и т.д. На этом и остановимся, дабы не перехвалить.

Подробнее хотелось бы остановиться на последней версии ОСРВ QNX — QNX6, которая поддерживает большинство необходимых современных технологий и на которой базируются все новые проекты. Предыдущая версия – QNX4 – уже не развивается, а лишь поддерживается производителем, для нее нет некоммерческих или пробных лицензий. Поддержка данной версии проявляется в исправлении багов и обновлении драйверов. Поэтому дальше речь пойдет о новой версии QNX6.

Где применяется QNX.

QNX представляет собой операционную систему, необходимую для построения встраиваемых систем. Ее основными характерными особенностями являются модульность и вытекающая из нее масштабируемость. Это позволяет QNX находить свое применение как в персональных ПК, так и в миниатюрных контроллерах. Кроме того, имеется возможность строить производительные сетевые кластеры при помощи прозрачной сети QNX.

Сфера применения QNX обусловлена высокой надежностью системы и включает в себя: металлургическую и нефтегазовую промышленность, а также военную и медицинскую технику. Под конец прошлого десятилетия в ОСРВ QNX стал делаться упор на поддержку мультимедийных технологий. Появился QNX-базированный планшетный ПК BlackBerry PlayBook и проект QNX Car.

Из чего состоит QNX6. Компоненты и состав QNX6 часто вызывают недоумение у не слишком продвинутых пользователей. Постараемся разъяснить ситуацию дабы избежать путаницы. Варианты поставки QNX6 за 10 лет ее существования применялись самые разные. Сейчас используется самая удачная упрощенная схема QNX 6.5.0. Ниже приведены два ее основных компонента:

  • QNX SDP (Software Development Platform). Состоит из QNX Neutrino, библиотек для разработки и заголовочных файлов, компиляторов и среды разработки Momentics IDE на базе Eclipse.
  • QNX Neutrino. Состоит из графической среды, утилит, драйверов, набора микроядер и т.д. для аппаратных платформ SH4, ARM, PowerPC, MIPS и x86.

Заметим, что QNX SDP доступен для Linux- и Windows-платформ.

Официально присутствует лишь поддержка нескольких дистрибутивов Linux, однако на практике требуется по сути лишь современная Java. Многие девелоперы работают под QNX в инструментальной системе на базе ArchLinux 64-бит.

Хотелось бы уточнить, что QNX SDP является набором средств кроссплатформенной разработки под операционную систему QNX Neutrino.

Программное обеспечение под ОСРВ QNX Neutrino.

В дистрибутив QNX6 входят не только драйвера и микроядро, а также ряд консольных утилит (общих для всех UNIX-подобных систем и специфичных для QNX). Кроме того, здесь есть самостоятельная графическая среда, не совместимая с X-Window и Windows — графическая подсистема на базе Photon 2.0. Системный сервис XPhoton поможет запустить использующие X-протокол графические приложения.

Также для QNX6 доступны основанные на технологиях Adobe Flash Lite 3 и Qt/Embedded (сейчас в Foundry27 версия 4.7.1) графические среды.

Кроме того, QNX поддерживает pkgsrc (систему управления пакетами, в которой есть множество доступных программ с открытыми исходниками в виде скриптов для сборки и собранных бинарных пакетов).
В QNX нетрудно собрать хорошо написанный код на языке C благодаря поддержке спецификации POSIX.
QNX6: типы лицензий. QNX является коммерческой операционной системой, поэтому для ее установки вам будет нужна лицензия. Ниже приведены виды лицензий QNX6:

  • Некоммерческая. Позволяет осуществлять некоммерческую разработку и работать с QNX.
  • Пробная. Выдается на месяц (30 дней). Дает возможность ознакомиться со средой разработки и полнофункциональной версией QNX для оценки целесообразности последующего приобретения ОСРВ.
  • Академическая. Выдается высшим учебным заведениям для работы преподавателей и обучения студентов.
  • Коммерческая. Необходима для коммерческой разработки ПО или устройств на базе QNX. В данном случае ОСРВ QNX6 покупается у дистрибьютора.

Для ознакомления лучше всего подходит некоммерческий вариант лицензии, который ничего не стоит и не имеет ограничений на сроки действия.

Как зарегистрировать аккаунт в myQNX.

Регистрация вам потребуется для доступа к сообществу Foundry27 и многим разделам сайта qnx.com. Данная процедура достаточно проста и не займет много времени. Зайдите на сайт www.qnx.com и кликните по ссылке Login, расположенной в верхнем углу справа. Далее следует выбрать пункт меню New member. После этого в нижней части экрана откроется форма для регистрации. В ней вы должны будете указать свой e-mail и пароль (с подтверждением). После заполнения нажмите кнопку Create Account. Далее вам придется заполнить анкету, после чего на указанный ранее почтовый ящик придет код подтверждения, который необходимо указать на следующей странице в специальной форме. Вот и все – вы зарегистрированы и можете скачать дистрибутив QNX.

Как зарегистрировать некоммерческую лицензию.

Прежде всего, вам следует перейти на страницу Non-commercial developers. Там вам предложат скачать QNX SDP под конкретную инструментальную платформу, в которой вы намерены заниматься разработкой. Шаг номер один можно пока пропустить и сразу перейти ко второму. Проверьте корректность указанных данных и укажите, что вы согласны с условиями лицензионного соглашения, после этого нажмите кнопку Submit. После завершения всех вышеперечисленных действий на ваш электронный адрес вышлют лицензию. Если вы случайно удалили письмо с лицензионным ключом, то вы всегда сможете его посмотреть на сайте qnx.com в  профиле.

Процессы, потоки и микроядро ОСРВ QNX.

В данной главе мы коснемся определения микроядра и решаемых им задач, расскажем о системной архитектуре QNX, а также (в качестве приятного бонуса) разрушим два мифа, связанных с QNX.

О стандартах POSIX. Первая версия операционной системы реального времени QNX вышла в 1981 году. С того времени при создании более новых версий разработчики использовали накопленный опыт и делали систему все совершеннее и удобнее для девелоперов. В итоге QNX Neutrino поддерживает профили прикладных окружений (Application Environment Profiles, AEP), дополнительные расширения реального времени (Additional Realtime Extensions), расширения реального времени (Realtime Extensions), управление потоками (threads) и другие стандарты POSIX 1003.1.

Считается, что любая POSIX платформа базируется на UNIX, а значит, она слишком масштабна и велика для встраиваемых решений. Однако для ОСРВ QNX данное утверждение ошибочно. В ее случае посредством стандарта POSIX описана не реализация, а интерфейс. При этом под POSIX может скрываться даже микроядро.

Далее хотелось бы обрисовать преимущества POSIX в QNX:

  1. Удобство для девелоперов. Знающие POSIX и UNIX девелоперы могут легко сориентироваться и осуществлять разработку под QNX – им будет знакома большая часть ОС.
  2. Возможность повторного использования программного кода. Хорошо оттестированный и отлаженный в одной из POSIX систем код можно легко использовать в другой, например, QNX.

Таким образом, преимущества POSIX в QNX очевидны.

Истинное ядро. В основе ОСРВ QNX лежит микроядерная архитектура. Прежде чем продолжить статью, хотелось бы дать определение микроядра в терминологии QNX. В последнее время популярность данного термина стремительно растет. Микроядерными называют подавляющее большинство систем с ядрами небольшого размера. Для совсем маленьких ядер используется термин наноядро. Однако для QNX такой подход не совсем верен. В данном случае небольшой размер ядра не является самоцелью. В QNX многие функции ОС вынесены за пределы ядра в область пользовательских приложений. Это касается, например, поддержки файловой системы. При этом функционал микроядра ограничен, оно в основном занято обеспечением межзадачного взаимодействия:

  • Управлением таймерами;
  • Управлением сигналами;
  • Синхронизацией потоков;
  • Планированием потоков;
  • Управлением потоками;
  • Обменом сообщениями (основная функция микроядра).

Хотелось бы заметить, что управление процессами возложено не на микроядро, а на так называемый администратор процессов. Последний скомпонован в один модуль с микроядром и, можно сказать, является настоящим ядром всей системы.

Микроядро системы QNX выполняет все вышеперечисленные функции. В отдельные модули вынесена поддержка дисков, драйверы сети и т.д. Запуск и работа модулей напоминает обычные пользовательские процессы. Отсюда вытекают очевидные преимущества QNX перед системами на основе монолитного ядра:

  1. Микроядро обеспечивает повышенную надежность системы. Например, ошибка в драйвере не вызовет крах системы и микроядра. Перезапуск системы также не потребуется – достаточно в любой момент перезапустить драйвер.
  2. Микроядро обеспечивает увеличение модульности. Нужно всего лишь запустить требуемые менеджеры, чтобы конечная целевая система была сконфигурирована согласно требованиям.
  3. Микроядро значительно легче протестировать и отладить, т.к. его исходный код существенно меньше, чем у монолитного ядра.

Микроядро QNX написано не на ассемблере. Некоторые девелоперы считают, что микроядро QNX Neutrino написано на ассемблере и этим объясняется его компактность и производительность. Однако это не соответствует действительности. Язык, на котором написано  ядро QNX Neutrino – С. А компактность и производительность объясняется применением отлаженных структур и алгоритмов.

Потоки и процессы в QNX. ОСРВ QNX поддерживает потоки, о чем вы можете узнать, ознакомившись со спецификациями POSIX. Более того, как раз потоки в QNX считаются минимальной «единицей выполнения», только ими управляет микроядро системы. Любой процесс в QNX имеет один или несколько потоков, т.е. его можно рассматривать как своеобразный «контейнер потоков».

Простейший процесс содержит всего один поток, однако зачастую может потребоваться выполнение нескольких алгоритмов в одном процессе в параллельном режиме. Рассмотрим маленький пример из ОСРВ QNX. Менеджер файловой системы в параллельном режиме может принимать и обрабатывать запросы сразу от нескольких процессов (клиентов). Менеджер, работающий в один поток, был бы неудобен тем, что при обращении к нему даже второго клиента, он был бы вынужден ожидать, пока завершится запрошенная ранее операция. Менеджер файловой системы в QNX может параллельно и одновременно обслужить сразу несколько приложений благодаря тому, что он работает в несколько потоков.

Любые процессы в ОСРВ QNX выполняются в собственном виртуальном адресном пространстве и находятся в изоляции друг от друга. Memory Management Unit, MMU или «Блок управления памятью» как раз и отвечает за реализацию данной защиты. Чтобы произошел запуск QNX, обязательным условием является наличие в процессоре устройства блока управления памятью. При этом в одном адресном пространстве работают потоки одного процесса.

Существует еще одна схема реализации систем: все задачи в системе – это потоки, работающие в одном адресном пространстве. Такая схема служит для облегчения межпроцессного взаимодействия. Однако при этом вся система может потерпеть крах от ошибки в любом из потоков. Кроме того, система, реализованная по данному принципу, гораздо сложнее в отладке и сопровождении.

В QNX решена проблема слишком медленного переключения контекстов между процессами. Для устранения слишком медленного переключения контекстов между процессами в UNIX-системах появились потоки. В итоге многие считают, что переключение контекстов между процессами в принципе происходит весьма неспешно. Выходит, что если в системе использовано микроядро и передача сообщений, то по сравнению с использованием монолитного ядра в ней больше переключений контекстов. Отсюда делают вывод, что подобные системы (в т.ч. QNX) работают медленнее. Однако в архитектуре QNX Neutrino проблема производительности переключения контекстов успешно решена. В данной ОСРВ разница в скорости переключения контекстов между потоками и процессами практически отсутствует.

Этапы существования потока. Потоки в работающем процессе создаются и удаляются динамически. Поток создается, например, при помощи функции pthread_create(). При этом автоматически инициализируются и выделяются необходимые ресурсы. Его выполнение начинается с вышеописанной функции в адресном пространстве процесса. Задействованные ресурсы высвобождаются одновременно с завершением потока (его можно завершить, например, при помощи функции pthread_exit()).

Запущенный поток может иметь два состояния:

  • Blocked – блокирован
  • Ready – готов

Поток может быть заблокирован из-за множества различных причин. Если набрать команду pidin, являющуюся специфичным вариантом утилиты ps для QNX, то можно увидеть множество различных состояний среди которых:

  • NANOSLEEP
  • SIGWAITINFO
  • RECEIVE
  • SEND и др.

Заключение. В данной статье мы коснулись роли микроядра QNX и рассказали о пользе POSIX. Если вы заинтересованы в изучении QNX и хотите узнать систему глубже, воспользуйтесь «Системной архитектурой QNX Neutrino» (System Architecture QNX Neutrino). Данную документацию можно найти на сайте www.qnx.com в электронном виде на английском языке. Кроме того, имеется доступный в печатном виде русский перевод этой документации.

Автор оригинальной статьи ob1
Продолжение статьи…


Комментарии

Вы должны быть зарегистрированы, чтобы оставить комментарий

Зарегистрируйтесь, это просто!


Зарегистрироваться

Уже зарегистрированы?


Войти сейчас