ВСТРАИВАЕМЫЕ СИСТЕМЫ

Операционная система QNX компании QNX Software Systems (QSSL, www.qnx.com) занимает особое место среди других ОС. Она предназначена прежде всего для управления процессами в реальном времени, но тем не менее сохранила и платформенную независимость, и универсальность, редко присущие управляющим системам. Благодаря этим качествам для разработки специализированных решений не требуется какой-либо инструментальной системы на базе ОС общего назначения (Windows или Linux, хотя такая возможность имеется): все необходимые средства включены в саму QNX. Микроядерная архитектура упрощает разработку и отладку драйверов для нестандартных внешних устройств, что очень важно для управляющей ОС. Но самое главное заключается в том, что QNX - система жесткого реального времени, что позволяет использовать ее в особо ответственных случаях, например в авиационной и ракетно-космической электронике, а весьма почтенный возраст этой ОС (первая ее версия появилась более 20 лет назад) служит дополнительным залогом ее надежности. Именно этим объясняется постоянный рост интереса к QNX, очередным свидетельством которого стала организованная в Санкт-Петербурге компанией SWD Software (www.swd.ru), официальным дистрибьютором QSSL в России и странах СНГ, 8-я международная конференция "QNX - Россия’2004", в работе которой приняли участие более 200 специалистов из стран СНГ.

На сегодняшний день наибольшее распространение получила четвертая версия ОС QNX. Она уже не развивается, но ее поддержка будет в полном объеме сохраняться и впредь. Однако для новых разработок целесообразно использовать последнюю версию ОС - QNX Neutrino 6.3, содержащую ряд существенных дополнений и улучшений, о которых собравшимся рассказал Питер ван дер Вин, главный архитектор ПО компании QSSL. К числу важнейших особенностей Neutrino он отнес:

- полную поддержку симметричных многопроцессорных систем (SMP);

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

- улучшенный встраиваемый веб-браузер QNX Voyager 2;

- полную поддержку трехмерной графики спецификации OpenGL v1.4, которую осуществляет разработчик самой ОС, а не сторонние производители. Библиотека Mesa, отвечающая за OpenGL, действует независимо от Photon microGUI и может использоваться и без нее;

- разнообразные файловые системы, обеспечивающие хранение и обработку файлов в ППЗУ, на жестких дисках, CD/DVD, а также на других вычислительных системах с доступом по сети;

- улучшенную поддержку сетевых технологий. В частности, имеется три версии стека протоколов TCP/IP: IPv4, IPv4/v6 (включая IPSec) и Tiny TCP/IP. В зависимости от своих потребностей разработчик может выбрать именно ту версию, которая ему необходима;

- среду исполнения Java в двух вариантах на основе виртуальной машины J9 корпорации IBM (www.ibm.com): WebSphere Embedded Environment, совместимую с Java 2 Mobile Edition (J2ME) корпорации Sun Microsystems (www.sun.com), и WebSphere Custom Environment, поддерживающую предопределенное подмножество спецификации Java 2 Standard Edition (J2SE) и обеспечивающую наращивание функциональности с помощью дополнительных модулей;

"Жесткое" и "мягкое" реальное время

Когда происходит какое-то событие (например, срабатывает некий датчик, оператор нажимает кнопку или приходит сигнал от таймера), оно должно быть адекватным образом обработано, но при этом недостаточно правильно обработать событие, нужно сделать это вовремя: бесполезно включать систему пожаротушения двигателя авиалайнера, если он уже успел взорваться. Однако подобные требования встречаются и в более "приземленных" областях. Так, очень многие, если не все, пользователи Windows регулярно прослушивают аудиозаписи или смотрят фильмы, даже не подозревая, что ОС, а точнее, набор драйверов и кодеков, должны успевать обрабатывать данные мультимедийных форматов (MP3, MPEG4 и т. п.) и выводить их на соответствующие внешние устройства (видеоадаптер и звуковую плату), причем делать это даже в том случае, если на компьютере параллельно работают другие программы (набирается текст в Word, скачивается электронная почта, записывается очередной CD-ROM и т. п.).

"Традиционные" ОС - Windows или Linux - обычно справляются с подобной работой. Тем не менее бывает, что в самый неподходящий момент система вдруг начинает, например, сбрасывать свой кэш на диск, что на какое-то время блокирует нормальную работу других программ. В домашней (или офисной) системе дело может закончиться в худшем случае испорченной болванкой CD/DVD или раздражающими паузами в воспроизведении музыки или видео, но на том же авиалайнере подобные непредвиденные задержки способны привести к катастрофе. Эти рассуждения подводят нас к пониманию того, чем же отличается от обычной ОС система "жесткого" реального времени: она гарантирует, что обработка любого события будет выполнена не позже строго определенного временного интервала, тогда как система "мягкого" реального времени обычно лишь выполняет это требование.

Для обеспечения гарантированного времени отклика на событие недостаточно провести серию экспериментов и выбрать наихудший результат. Для ОСРВ "жесткого" реального времени этот показатель должен в обязательном порядке определяться путем анализа алгоритмов ее работы и выявления наихудшей последовательности событий, т. е. выводиться аналитически. Чтобы подобный анализ был практически осуществим, алгоритмы работы ядра системы должны быть достаточно простыми и не зависящими нетривиальным образом от множества плохо поддающихся анализу факторов; кроме того, должны неукоснительно выдерживаться определенные временные характеристики, в частности максимальное время работы с запрещенными прерываниями. Конечно, можно не проводить детальный анализ, а просто указать время реакции, заведомо превышающее самый худший случай, однако это лукавый подход: так можно и OS/360 объявить системой "жесткого" реального времени (сегодня принес оператору колоду перфокарт, завтра пришел за итоговой распечаткой :)).

- механизм асинхронного обмена сообщениями, введенный по просьбам заказчиков и призванный уменьшить накладные расходы на обмен сообщениями между приложениями;

- доступ к аппаратным счетчикам производительности, что дает возможность точнее профилировать приложения и определять узкие места для дальнейшей оптимизации;

- поддержку USB 2.0 и устройств массовой памяти USB;

- адресацию более 4 Гб оперативной памяти.

Особо следует остановиться на интегрированном комплекте разработчика QNX Momentics. Этот инструментарий функционирует как под управлением самой QNX, так и в операционных системах Microsoft Windows, Sun Solaris и различных дистрибутивах Linux. IDE Momentics основана на открытой платформе Eclipse версии 2.1.2, что позволяет достаточно просто расширять набор инструментов, в том числе за счет решений сторонних производителей.

В качестве языков программирования Momentics предлагает Cи, C++ и Java. Среди наиболее заметных улучшений последней версии можно отметить использование нового компилятора GCC 3.3.1, обеспечивающего лучшую совместимость со стандартом C99 и генерирующего более эффективный код. Тем не менее присутствует и старый компилятор GCC 2.95.2.

В IDE Momentics встроена поддержка протокола управления версиями CVS, благодаря чему облегчается создание приложений достаточно крупными коллективами разработчиков.

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

Весьма часто при проектировании встраиваемых систем нужны драйверы для нестандартных устройств. Здесь на помощь приходят комплекты разработки драйверов (DDK), сводящие к минимуму затраты на получение новых драйверов. Если новое устройство относится к типу, поддерживаемому DDK (аудио-, сетевые и графические адаптеры, устройства ввода, принтеры, символьные и USB-устройства), разработчик должен написать лишь аппаратно-зависимый код, все остальное уже имеется. Но даже в случае совершенно нестандартного устройства проще использовать имеющийся в составе DDK каркас драйвера, дополняя его необходимыми функциями.

Для создания графических приложений, использующих среду QNX Photon microGUI, в состав IDE Momentics входит построитель приложений PhAB, значительно упрощающий и ускоряющий разработку. Он дает возможность использовать готовые шаблоны и обширную палитру доступных элементов управления (виджетов).

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

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