Мир системного программного обеспечения постоянно развивается, и тому есть немало причин: изменение аппаратно-программных платформ, появление новых концепций и технологий, ветвление существующих платформ с добавлением новых возможностей. Сильнее всего развиваются клоны операционной системы Unix, которая оказалась весьма жизнеспособной и гибкой. Unix работает сегодня на самых разных платформах — от встраиваемых и серверных систем до носимых компьютеров. Подобное многообразие в первую очередь обусловлено модульной структурой построения самой операционной системы и мощным API-интерфейсом.
Диалекты Unix могут использоваться в совершенно различных областях, причем одновременно сразу в нескольких. Примером тому может служить недавно появившаяся ОС QNX Real Time Platform (далее QNX RTP), которая занимает довольно обширную нишу, работая в качестве сервера баз данных, сервера сбора информации, а также как платформа для встраиваемых систем.
Для того чтобы понять, как возникла QNX RTP, следует немного рассказать о ее предшественницах. Первой на свет в 1980 году появилась операционная система QNX, которая прекрасно работала на процессорах i8088 (компьютеры IBM-XT). Затем, в 1981 году, вышла QNX2, предназначенная для процессоров i8088 и i80286. Позже компания QSSL создала операционную систему QNX4, которая предоставила много новых возможностей и была ориентирована на процессоры i80386 и выше.
Рассмотрим QNX RTP и сравним эту операционную систему с другими: QNX4, Windows 9x и Linux таблица 1. Почему предлагается сравнивать достаточно разные системы, ведь две из них созданы как встраиваемые (QNX RTP и QNX4), а две другие — как настольные операционные системы? QNX RTP, несмотря на свое микроядро, может использоваться как платформа для настольных систем, более того, к настоящему моменту в среду QNX RTP перенесено большое количество программ. В QNX RTP много схожих с Linux черт, однако, несмотря на это, одна операционная система не в состоянии полностью подменить другую.
Понятно, что каждая ОС предназначена для определенного круга задач и не имеет смысла сравнивать встраиваемую систему с системой для настольных компьютеров. Все эти сравнения приводятся лишь для того, чтобы высветить наиболее характерные черты новой операционной системы, а также выявить области, в которой эффективно применение QNX RTP.
Ядро
Что в операционной системе главное? Ее ядро. Для QNX RTP — это Neutrino 2.1, размер которого без учета диспетчера процессов составляет около 18 Кбайт. Может ли читатель назвать другую операционную систему, в которой POSIX-совместимое ядро было бы столь компактным? Несмотря на то что ядро QNX RTP POSIX-совместимое, в нем остался механизм взаимодействия процессов, позволяющий обмениваться информацией между различными процессами (механизм Send-Receive-Reply), характерный только для продуктов компании QSSL. Ядро состоит из наноядра и диспетчеризующего процесса, который загружается только при необходимости.
Ядро QNX4 занимает 10 Кбайт и имеет внутри себя процесс-диспетчер. Справедливости ради следует заметить, что и у QNX RTP, и у QNX4 ядро не содержит в себе ничего «лишнего», никаких драйверов устройств, никаких менеджеров, в том числе и стека TCP/IP, что, на мой взгляд, не является таким уж большим минусом.
Ядро Linux несоизмеримо больше и в самой минимальной конфигурации составляет не меньше 300 Кбайт. Вообще говоря, это не так уж страшно; доступны микросхемы ПЗУ достаточной емкости, чтобы вместить в себя такое ядро. Неприятность в том, что больший размер означает во многих случаях большее время выполнения, а стало быть, далеко не во всех системах реального времени можно быть использована ОС Linux. Вообще говоря, в Linux предусмотрена технология подгрузки модулей в процессе работы. Поэтому не обязательно собирать ядро ОС с тем или иным компонентом — подгрузить его можно будет позже, при необходимости. Такой подход позволяет экономить память. Сторонники этой операционной системы могут меня упрекнуть в том, что я не упомянул RT Linux; признаюсь, что с подобными системами я встречался только в статьях и проектах.
Искать ядро в Windows — занятие тяжелое и неблагодарное, поскольку в него интегрировано все, что только можно, включая графический интерфейс пользователя, звуковые, сетевые и прочие службы. Существует, правда, относительно компактная Windows CE, предназначенная для использования во встраиваемых системах и имеющая малый размер, но и здесь Microsoft осталась верной себе, не разбив различные службы операционной системы на компоненты.
Отметим, что в Linux и Windows драйверы устройств интегрированы в ядро, а в QNX RTP — это всего лишь процессы, которые могут загружаться и выгружаться по мере необходимости. На мой взгляд, такое построение ядра делает Linux и Windows менее стабильными, поскольку сбой любого встроенного в ядро компонента может привести к сбою всей системы в целом. Благодаря подобному отличию QNX RTP легко восстанавливается в случае сбоев отдельных компонентов.
Механизмы взаимодействия процессов
QNX RTP использует механизмы сокетов и сигналов, широко применяемые в Unix-системах. Более того, в QNX RTP увеличено число пользовательских сигналов, которые могут переносить данные; в большинстве других Unix-систем этого нет. Также можно использовать именованные и неименованные каналы и разделяемую память. Кроме того, наряду со стандартными механизмами QNX RTP поддерживает основной для нее механизм SRR (Send-Receive-Reply — «послать-получить-ответить»), перенесенный из QNX4 и характерный только для продуктов компании QSSL. Данный механизм реализован в ядре, в отличие от некоторых других механизмов взаимодействия процессов, которые выполнены в виде менеджеров (процессов), поддерживающих определенные службы. К примеру, для работы с POSIX-совместимой очередью сообщений должен быть запущен процесс mqueue.
QNX4 уступает QNX RTP в части сигналов. На практике данный механизм реализован здесь недостаточно полно. Фактически же, в QNX4 чаще всего используется именно механизм SRR, который позволяет передавать сообщения по всей QNX-сети, используя встроенный протокол FLEET. (Название этого сетевого протокола составлено из первых букв следующих терминов: Fault-tolerance — «отказоустойчивый», Load-balancing — «регулирующий нагрузку», Efficient — «эффективный», Extensible — «расширяемый», Transparent — «прозрачный».)
Linux, как и большинство клонов Unix, поддерживает интерфейс сокетов, POSIX-совместимые очереди, сигналы, каналы и разделяемую память. Недавно появилась реализация механизма SRR, однако, по сравнению с QNX здесь он работает существенно медленнее, поскольку реализован как надстройка и подвержен диспетчеризации, в то время как в QNX работает на уровне системных вызовов ядра.
Windows включает в себя сокеты, именованные каналы, разделяемую память и механизм Windows-сообщений. За исключением разделяемой памяти, все остальные механизмы взаимодействия процессов работают достаточно медленно. Причина этого кроется в архитектуре данной операционной системы.
Сеть
В QNX RTP, помимо FLEET, фирменного протокола компании QSSL, наличествует поддержка стека TCP/IP. Этого набора вполне достаточно для того, чтобы строить сложные распределенные системы сбора, обработки и хранения информации. Более того, большинство решений, использовавшихся в QNX4, может быть перенесено в QNX RTP с минимальными изменениями. При желании можно не включать поддержку стека TCP/IP и использовать только FLEET; возможно и обратное.
В QNX4 сеть базируется на протоколе FLEET, являющемся для этой операционной системы основным. Также есть реализация стека TCP/IP. При создании QNX предполагалось, что ресурсы отдельного компьютера должны быть видны и могут быть доступны для всех других узлов сети, построенной на основе протокола FLEET, и наоборот, один компьютер может быть представлен как кластер. Процессы, расположенные как на одном, так и на разных компьютерах, обмениваются друг с другом данными по единому протоколу.
Основной протокол для Linux — это TCP/IP. Также существует поддержка других сетевых протоколов, однако в большей степени это сделано из соображений совместимости.
В Windows поддерживаются все основные протоколы, что позволяет интегрировать эту операционную систему в разные сетевые структуры. Основные протоколы: TCP/IP и NetBEUI. Тем не менее, их реализация с точки зрения работоспособности не всегда безупречна. Например, неправильные IP-пакеты могут нарушить нормальное функционирование Windows.
Итак, все операционные системы достаточно хорошо подготовлены для серьезной работы в сетевой среде. Поддержка протокола FLEET в QNX RTP и QNX4 делает эти ОС хорошо приспособленными для задач обработки и передачи информации в реальном масштабе времени.
API разработчика
Говоря о разработке программных комплексов, в первую очередь речь заходит о ясном, простом и удобном интерфейсе взаимодействия разработчика с операционной системой. API-интерфейс должен предоставлять набор функций для доступа ко всем возможностям ОС: функции создания, управления и диспетчеризации процессов, управление их приоритетами, управление памятью, сетевыми операциями, взаимодействие процессов и многое другое.
В QNX RTP имеется большой набор функций, благодаря которому можно эффективно использовать возможности этой ОС. Сюда входят функции управления приоритетами, распределения памяти, создание и удаление процессов, синхронизация процессов, работа с таймерами, со всеми уже перечисленными способами взаимодействия процессов, работа с прерываниями, с оборудованием, получение информации о системе и ее состоянии, работа с файловой системой. Все API-интерфейсы можно условно разделить на две части: POSIX-совместимая часть, предназначенная для работы с механизмами, предусмотренными этим стандартом; и часть для работы с фирменными механизмами. Такое разделение позволяет четче представить, какие именно механизмы будут использоваться при разработке программ. Благодаря полной поддержке POSIX, в QNX RTP можно переносить программный код из Linux, FreeBSD и т.д., что существенно облегчает жизнь разработчикам и ускоряет процесс разработки.
Говоря о QNX4, можно сказать все то же, что и про QNX RTP, однако ее API немного отличается из-за того, что эта операционная система в меньшей степени поддерживает стандарт POSIX, нежели QNX RTP, что обусловливает дополнительные затраты на перенос программ из других ОС; тем не менее, мой собственный опыт показывает, что существенных препятствий при переносе программного обеспечения в среду QNX 4 не встречается.
Linux, широко используемая платформа, обладает мощным POSIX-совместимым API-интерфейсом, хорошо документированным и описанным. Благодаря тому, что Linux поставляется в исходных текстах, всегда можно разобраться с тем, как работает тот или иной механизм.
API-интерфейс Windows отличается некоторой запутанностью и содержит немалое количество недокументированных функций, что, в свою очередь, затрудняет процесс создания программ для приложений реального времени. Вместе с тем, в Windows наличествует ряд механизмов, предусмотренных POSIX. Учитывая огромное количество первоклассной документации по POSIX, можно сделать вывод о том, что наиболее полный и удобный набор функций предусмотрен именно этим стандартом. Соответственно, более предпочтительными для разработки программ являются операционные системы, поддерживающие стандарт POSIX, утвержденный независимой организацией и учитывающий большинство «тонких» мест, встречающихся при разработке.
Средства разработки
В каждой ОС имеются свои инструменты разработки. Без них ценность системы катастрофически падает: удобства проектирования, кодирования, отладки и диагностики сильно влияют на качество конкретной ОС.
В QNX RTP используется «джентльменский набор», характерный для многих клонов Unix: компиляторы gcc/g++ и других языков программирования, отладчик gdb, плюс большое количество других утилит GNU, облегчающих проектирование, создание и ведение программных проектов. Данные инструменты давно стали стандартными для многих разработчиков, включая и разработчиков Windows-приложений. Кроме того, GNU-инструментарий в среде Windows используется существенно реже, чем в других операционных системах, что связано с недостаточно последовательной поддержкой в ней стандарта POSIX. Имеется огромное количество программ, предназначенных для интеграции средств разработки с маркой GNU. Для QNX RTP можно использовать, например, пакет CodeWarrior компании Metrowerks, работающий в среде Windows и позволяющий использовать любые доступные для Windows компиляторы. Справедливости ради надо заметить, что появление GNU-инструментария в QNX RTP — это значительный шаг вперед, благодаря которому теперь можно полностью использовать всю богатую библиотеку программного обеспечения, созданную с помощью GNU-средств.
В QNX4 основным средством разработки являются компилятор, отладчик и утилиты компании Watcom. Кроме того, в среде QNX4 могут использоваться компиляторы и отладчики GNU, однако они существенно уступают продуктам Watcom. Имеются средства кросс-разработки Metrowerks CodeWarrior.
Linux-сообщество повсеместно использует средства разработки GNU.
Windows лидирует по количеству всевозможных средств разработки и набору компиляторов.
Графический интерфейс пользователя
Сегодня, пожалуй, никто не станет спорить с тем, что графический интерфейс является существенным подспорьем в работе, а сторонникам командной строки (к которым я себя причисляю) ничто не мешает открыть окно с командной оболочкой и работать в ней.
QNX RTP продолжает использовать Photon micro-GUI, простую графическую оболочку, которая легко настраивается и поддерживает национальные шрифты и раскладки. Ее проблемы в том, что реализация для QNX RTP еще очень молода и ей кое-чего не хватает. Например, отсутствует поддержка OpenGL и технологии буксировки, нет драйверов для некоторых графических адаптеров, однако есть все основания полагать, что ситуация эта выправится. Вместе с тем, что Photon microGUI построена по тем же принципам, что и сама ОС, данная графическая оболочка является очень быстрой. Существует также ее расширение Xphoton — дополнение, позволяющее запускать приложения, разработанные для X Window, которое существенно расширяет возможности microGUI Photon и позволяет использовать приложения, созданные для X. Для удобства разработки приложений с Photon имеется визуальная среда проектирования Photon Application Builder, которая позволяет создавать не только готовые приложения, но и отдельные компоненты.
Для QNX4 разработаны две графические оболочки: QNX-Windows и Photon microGUI. Если первая — всего лишь небольшое графическое расширение, хотя и неплохо зарекомендовавшее себя, то Photon — полноценная графическая оболочка, для которой разработано множество разнообразных программ, хотя Photon для QNX4 в меньшей степени поддерживает мультимедиа-расширения. Так как все операционные системы компании QSSL являются встраиваемыми, то и Photon microGUI также разработан с учетом этого и готов выступать в роли встраиваемого компонента.
Для Linux традиционной графической оболочкой является X Window. Благодаря исключительной гибкости настроек X Window, данная оболочка пользуется огромной популярностью, в том числе и в QNX.
В отличие от других систем, графическая оболочка в Windows встроена в ОС (строго говоря, это не совсем так — можно отказаться от использования оболочки, но вместе с этим вы теряете многозадачность и возвращаетесь к MS-DOS, более того, не будут запускаться все приложения написанные для защищенного режима). Данная оболочка достаточно удобная, хотя и не такая гибкая, как X Window.
Поддерживаемые платформы
Поддержка нескольких платформ — большой плюс для операционных систем. Подобные решения обладают большей гибкостью и на практике легче внедряются благодаря тому, что они более универсальны. QNX RTP поддерживает следующие платформы: x86; PowerPC; MIPS. QNX4 работает только на процессорах семейства x86. Linux — чемпион по платформам. Windows, так же как и QNX4, работает только на процессорах семейства x86.
Операционную систему QNX RTP для некоммерческого использования можно взять с сайта get.qnx.com, где хранится образ компакт-диска и исполняемый файл для установки в среде QNX4 и Windows. QNX4 — полностью коммерческая ОС, для того чтобы ее использовать, необходимо приобрести лицензии на ОС и ее компоненты. Linux — свободно распространяемая система. Windows — коммерческая ОС.
Итак, для некоммерческого использования доступны Linux и QNX RTP. В Linux-сообществе таково нормальное положение дел, а для QNX RTP это акция, цель которой — дать разработчикам возможность поближе познакомиться с ОС, ее возможностями и сообщить о своих впечатлениях и пожеланиях создателям ОС.
***
Каждая из перечисленных ОС предназначена для определенных целей: QNX4 — это встраиваемая система с микроядром, Linux — система с широким спектром применений, а Windows — ОС для настольных офисных систем. Тем не менее, несмотря на то, что QNX RTP построена на микроядре реального времени, она, с некоторыми ограничениями (дефицит офисных приложений) может быть использована и как настольная система. По удобству программирования она не уступает Unix-системам, а ресурсов для своей работы требует существенно меньше.
Думаю, что за системами, подобными QNX RTP, большое будущее: они надежны в работе, мобильны, легко расширяемы, без больших затруднений могут быть перестроены для нового круга задач и легко встраиваются в гетерогенные сети. QNX RTP — представитель нового поколения операционных систем. QNX RTP может работать в качестве сервера баз данных, Internet-сервера, как встраиваемая система для интеллектуальных контроллеров. По мере ее развития, у этой ОС наверняка появятся и другие применения.
Сергей Прожогин (s.prozhogin@swd.ru) — специалист отдела технической поддержки компании SWD (Санкт-Петербург).