SWD Software Ltd. - официальный дистрибьютор QNX на территории России и стран бывшего СССР Операционная система реального времени QNX
Инструменты для создания надёжных встраиваемых систем и
интеллектуальных устройств любой сложности
QNX Software Systems - разработчик встраиваемой операционной системы QNX
  Стандартная версия

QNX: секретное оружие в стадии конверсии

История

QNX - компания легендарная и во многом загадочная, как, впрочем, и сама система. Загадочная, потому что продукция этой компании, операционная система QNX, использовалась и используется в самых критических и стратегических областях, таких как аэрокосмическая промышленность, энергетика, в том числе и ядерная, а также (насколько об этом можно судить) в военных разработках. Легендарной же QNX можно назвать хотя бы по той простой причине, что в течение двадцати лет у этой системы реального времени нет и никогда не было сколько-нибудь значительного конкурента. Все эти встроенные Linux и DOS, не говоря о Windows, даже и не приближались к лидеру в плане надежности кода и устойчивости интерфейсов.

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

Сегодня, когда "холодная война" ушла в прошлое и мир становится все более "однополюсным", QNX, понимая смысл перемен, включилась в "перестройку" и в порядке конверсии открыла доступ к своей платформе, в том числе и для вчерашних "потенциальных противников". В числе "конверсионных" направлений - встраивание операционной системы QNX в сетевое оборудование, медицинские приборы, автомобильную электронику, электронные киоски, персональные организаторы, телефонные аппараты и разнообразную бытовую технику, типа стиральных машин и интеллектуальных холодильников. Совершенно новыми эти решения назвать нельзя, новы, скорее, масштабы распространения и атмосфера повышенной открытости.

В общем, типичный переход на "гражданку", и это переход означает выход на массовый рынок, открытую конкуренцию, множество новых клиентов различного "достоинства". Для успешной работы в таких условиях не последнюю роль играет создание мирового сообщества разработчиков, поощрение разработки приложений на основе QNX - поскольку "продавать" операционку конечным пользователям будут именно приложения.

QNX Neutrino. "Крепкий орешек" v.6.2.1

Долгие годы QNX была системой стратегического значения, не предназначавшейся не только для экспорта, но даже и для того, чтобы быть темой для пресс-релизов. Считалось, что "все, кому нужно, знают все, что им нужно". Но рынок, даже для критических систем, существует, и, пока вы расслабляетесь, конкуренты не оставляют попыток занять ваше место. Поэтому, а также по причине упомянутой конверсии, QNX стала выходить из тени - и в результате код и среда разработки стали доступны для обозрения мировому сообществу.

Официально QNX называется RTOS, Run Time Operating System. В основе QNX, как и раньше, лежит компактное и стабильное настоящее микроядро. Поскольку система рассчитана на 100-процентно бесперебойную работу, то архитектура ядра и окружения предполагает динамическую конфигурацию - установка и удаление драйверов, сетевых протоколов, файловых систем, оконных интерфейсов и т. п происходит в режиме "hot plug", без прекращения работы. Все перечисленные компоненты работают в отдельных адресных пространствах, без типичных для других систем "оптимизаций" по заносу подключаемых компонент в монолитное или составное ядро. Как следствие - QNX умеет восстанавливать себя практически после любого программного сбоя, любой компонент может быть "признан недействительным" и повторно запущен. Существуют точки восстановления, "неразрушающей перезагрузки", после которой система блокирует участки кода, которые вызвали сбой (исключение), и продолжает работу без потери состояния, очистки памяти и инициализации процессора.

Истинное микроядро

Что включает в себя микроядро? Предельно ограниченный набор функций - девизом разработчиков явно было "что мы еще можем оттуда убрать", а не "что мы еще можем туда вставить". Оставшиеся сервисы: управление потоками выполнения, взаимодействие потоков (IPC), примитивы синхронизации. Все остальное, включая драйверы, сетевые протоколы и приложения любого уровня, работает как отдельные процессы, сообщаясь с ядром с помощью синхронных сообщений.

Сообщения передаются через "шину сообщений", по которой проходят все сигналы по подключению и отключению программных компонент "на лету". Следствие из общей шины сообщений - это экстраполяция локального IPC на процессорные кластеры. Если одно ваше приложение вызывает другое через системный вызов (а иных возможностей фактически и нет), то IPC прозрачно транслируется на другой процессор - и в результате приложения общаются тоже прозрачно. Применение кластерного механизма - доступ к ресурсам другого процессора, такого как файловые системы, устройства или сетевые подключения, без включения сетевых протоколов (кроме встроенного в ядро протокола Qnet). На основе такого доступа можно строить экстремально "тонкие" клиенты, все ресурсы получающие по сети. Протокол Qnet будет осуществлять маршрутизацию и баланс сетевого трафика - прозрачно для приложений. Сам Qnet работает практически через любую среду, например Ethernet или Internet (конечно, такой IPC будет крайне зависимым от среды).

Помимо процессорных кластеров, QNX поддерживает также и SMP для отдельных потоков - естественно, что приложение должно быть спроектировано для многопоточной среды, чтобы получить выгоду от работы на нескольких процессорах. Использование SMP можно комбинировать с Qnet для построения кластеров как одно-, так и много- процессорных систем - перекомпиляции приложений не потребуется.

Подальше от спутников, поближе к "чайникам"

Перечисленные выше возможности QNX - это, так сказать, "родные" и изначально критичные для системы характеристики. Но, вместе с тем, разработчикам было не чуждо стремление приблизить систему к разработчику приложений, сделать среду QNX популярной и коммерчески состоятельной на новых рынках бытовой техники.

Для этого был создан несколько аскетический, но вполне приятный и самодостаточный интерфейс пользователя - Photon MicroGUI. Он предоставляет все основные примитивы графической оконной системы: окна, кнопки, меню и так далее. Позднее появление этой оболочки сыграло положительную роль - в нее изначально были заложены современные идеи, так сказать "символы" XXI века: полная поддержка Unicode, "плугабельно-скинабельный" интерфейс (то есть как внешний вид, так и функциональность штатно могут быть изменены во время работы), встроенный интерфейс с Java (Java получает отдельные окна в качестве своего viewpoint).

Совместимость? Без проблем

Первоначально QNX 6 задумывалась как POSIX-совместимая система - POSIX API был реализован на самом раннем этапе, так что нет никакой "библиотеки POSIX-совместимости" или чего-то подобного. Если вы привыкли к программированию в Unix или Linux, можете продолжать в том же духе и под QNX, проблем не возникнет. Помимо прочего, "родной" POSIX занимает меньше места в памяти и быстрее работает.

Среда разработки - плацдарм атаки на TTM

Что сегодня особенно важно на рынке ПО - это сокращение времени выхода на рынок (TTM, Time To Market). Для быстрого создания новых приложений необходима "дружественная" среда разработки приложений. Пренебрежение этим фактом делает продвижение среды или технологии весьма проблематичным. Например, отсутствие (или недостаток) комфортабельных условий для разработки сдерживает разработку под Plan9 - хотя с технической стороны эта система дает фору многим другим "исторически сложившимся" системам.

Другие необходимые компоненты для привлечения разработчиков - достоверная и актуальная свободно распространяемая документация и поддержка сетевых ресурсов (конференций) для разработчиков.

Eclipse - пришелец из открытых систем

Известно несколько попыток создать "открытую" среду разработки. Это вполне естественно, если сложить три составляющие:

  • разработчики нуждаются в консистентной, универсальной и настраиваемой среде разработки;
  • никто не хочет платить лицензионные отчисления владельцам "фирменных" технологий;
  • наконец, крупные корпорации, понимая важность создания инфраструктуры вокруг своих конечных продуктов, осуществляют щедрый contribution в мировое сообщество разработчиков.

Одним из самых перспективных кандидатов среди "контрибьюшинов" в сфере разработки ПО был и остается Eclipse - IDE-среда разработки, созданная на базе оболочки Websphere Studio Workbench компании IBM. Eclipse написан на Java - таким образом, проблема переносимости и универсальности этой среды решена изначально. Модульная архитектура Eclipse позволяет разработчикам и потребителям этой технологии свободно модифицировать, встраивать и добавлять возможности без перекомпиляции всего кода, адаптируя возможности Eclipse под свои нужды.

Кросс-разработка? Un Momentics

Мудрым решением, с точки зрения разработчиков, стало использование Eclipse в качестве новой среды для разработки под QNX. "Мод" получил название Momentics и был полностью интегрирован в поставку "QNX для разработчиков" - загружаемый "диск разработчика" включает все компоненты среды разработки. Существует как коммерческая его версия, так и версия для частного и ознакомительного использования. Последняя отличается более скромным набором поддерживаемых платформ.

Основные особенности Momentics, унаследованные от Eclipse, это возможность подключать модули для различных целевых процессоров (x86, MIPS, PowerPC, ARM, StrongARM, XScale, SH-4), различных языков программирования (C, C++, Embedded C++, Java) и различных платформ разработчика (Windows, Solaris или в собственном режиме под QNX Neutrino). Помимо прочего, Momentics располагает согласованным под всеми платформами интерфейсом, построенным по принципу "передачи токена внимания" (то есть нужные инструменты и окна всплывают по мере необходимости).

Хотя набор возможностей Momentics может показаться аскетическим, по мере работы вы обнаружите, что под простым интерфейсом скрыто гораздо больше, чем кажется на первый взгляд. В частности, реализованы QNX-специфические Wizards, сквозной поиск теста в проекте (типа Find in Files), управление проектами и ставший в открытых системах стандартом де-факто механизм групповой разработки и контроля версий CVS.

Все это позволяет работать на очень профессиональном уровне: автоматически генерировать проекты, откатывать файлы и целые проекты целиком, исследовать системные состояния потоков и счетчиков, блокировки (особенно важный параметр для RTOS!), очереди сообщений.

Особое отличие среды Momentics (как, впрочем, и Eclipse или Sun ONE Studio) - это немодальная отладка. То есть вы можете выполнять один или несколько фрагментов кода, причем они могут выполняться на разных "целевых" платформах и быть написанными на разных языках. Дополнительные опции - подключение к уже запущенному процессу и анализ дампа "свалившегося" процесса. Естественно, поддерживаются все типы отладки: точки останова, пошаговое прохождение, просмотр стека и переменных.

Визуальные возможности - такие как список "ToDo", формируемый на основе возникших ошибок компиляции, подсказки при наведении курсора на переменные, сохранение рабочей области и прочие "радости разработчика" - будут хорошо знакомы вам по другим известным IDE. Кроме того, в наличии все средства редактора: раскраска, автоотступы, отображение структуры проекта (файлов, классов, модулей), автодополнение ввода и т.д.

Помимо основных средств кроссплатформенной компиляции, Momentics снабжен несколькими инструментами, специфичных для отладки встроенных систем. Уникальный инструмент - сборщик загрузочных образов, собирающий все необходимые библиотеки и файлы вашего проекта для записи на загрузочный CD или для прожигания на ROM-диск. При этом отслеживаются зависимости библиотек: все нужные библиотеки будут включены, все ненужные функции из них будут удалены - это особенно важно, если объем памяти целевой платформы ограничен.

Для кластерных систем незаменим навигатор по удаленным станциям, в том числе по реальным, подключенным по сети, или виртуальным бездисковым станциям, работающим в режиме эмуляции. Инструмент позволяет изучать удаленные системы (например, просматривать запущенные процессы и занятые вычислительные ресурсы), что тоже крайне важно, поскольку встроенные системы зачастую не имеют пользовательского интерфейса - и локальная отладка приложений на них невозможна.

exit (0);

Конечно, "конверсионные" разработки (в том числе отечественные) внесут неизбежный элемент хаоса и могут снизить надежность "в среднем" QNX-систем. Но, по крайней мере, можно надеяться, что, опираясь на надежный фундамент QNX, новые приложения заранее получают преимущество, уходя в отрыв от конкурентов, строящих свои критические системы "на песке".

QNX и Virtual PC

Как-то в статье о VMWare (К+П, № 3/2003) я допустил ошибку - сказал, что QNX работает в этой среде, за что получил замечание от внимательного читателя. Совершенно верно: QNX не работает под VMWare, он работает под Virtual PC - имейте это в виду, если это для вас важно.

Внимание! Хотя QNX способна работать на самых непритязательных "камнях", под VPC она почему-то очень любит "поедать" такты вашего процессора. VPC по определению не может получить больше 50% среднестатистической мощности в фоновом режиме - но в режиме переднего плана, даже без фокуса ввода, претендует на все 100%. Так что, запуская QNX под Virtual PC, не стоит уводить VPC в фон и параллельно играть в игры, воспроизводить MP3, смотреть кинофильмы или запускать архиватор - в противном случае вы рискуете повесить "вычислители" в QNX, в частности менеджер пакетов, интенсивно использующий ресурсы процессора для разархивации.

QNX в России

Если вы думаете, что все описанное - далеко и недоступно, вы ошибаетесь. Система QNX активно продвигается на просторах СНГ и, в частности, в России. Интересы QNX на всем постсоветском пространстве с 1996-го года представляет компания SWD Software Ltd. Эта же компания проводит ежегодную конференцию "QNX-Россия".

QNX и базы данных

Одним из самых критических приложений для разработчика является система управления базами данных, RDBS. Поэтому нелишним будет знать, что QNX изначально поддерживает RDBMS Empress (производимую одноименной компанией - Empress Software). Эта RDBMS изначально создавалась для QNX - и, следовательно, была оптимизирована для встроенных приложений и ограниченных ресурсов. Тем не менее, система поддерживает методы доступа SQL, ODBC и JBDC и обладает всеми признаками "взрослых" СУБД.

Узнать больше о продуктах Empress и получить их тестовые версии можно на http://empress.com/.

Арсений Чеботарев, "Комиздат"