Концепции
Модульность и масштабируемость
Пространство событий
События
Регионы
Открытость
Архитектура
Графическое ядро
Драйверы ввода-вывода
Менеджеры
Реализация
Ядро системы Photon
Видеодрайверы
Драйвер устройств ввода Pointer
Менеджер окон pwm
Менеджер Рабочего стола pdm
Драйвер принтера Photon.ps
Средства сетевого взаимодействия
Методы оптимизации
Технология Jump Gate
Инкапсуляция
Приложения
Производительность
Потенциальные сферы применения

Волей судьбы и усилиями прессы получилось так, что для большинства людей понятие "графический пользовательский интерфейс" (GUI) прочно ассоциируется с MS Windows. Многочисленные обзоры, в которых сопоставляются Windows и другие ОС, касаются в основном их возможностей как операционных сред. Что же касается концепций работы с графикой, то здесь почти полный штиль, поскольку обе системы в этом отношении очень похожи. Долгожданная Windows 95 тоже представляет собой всего лишь 32-х разрядную (почти!) версию Windows 3.11, с новым пользовательским интерфейсом и улучшенной (но все равно неполноценной) многозадачностью.

Между тем за пределами Microsoft тоже есть жизнь, а творческая мысль не остановилась после появления Windows.

Графические системы1 , концептуально отличные от MS Windows, были в свое время предложены в проектах X Window, NextStep и некоторых других. Сегодня придумать что-нибудь действительно оригинальное уже довольно сложно, так что если это кому-то удается, то, безусловно, заслуживает внимания. Данная статья посвящена анализу графической системы Photon microGUI, базирующейся на совершенно новых идеях. Система предназначена для ОС QNX (см. "Мир ПК", # 3/95, с. 65), но концепции, реализованные в ней, настолько необычны, что ознакомиться с ними имеет смысл любому программисту, даже если он не работает с ОС QNX.

Концепции

Читателям, знакомым с ОС QNX, известно, что для нее уже давно существуют две графические системы - QNX Windows и X Window. Тем не менее, несмотря на значительные издержки, фирма QNX Software Systems Ltd. (QSSL) предприняла разработку еще одной, совершенно новой графической системы. Объясняется это тем обстоятельством, что оба указанных продукта были разработаны достаточно давно, причем посторонними фирмами, и ни одна из них не реализует в полной мере возможности, предоставляемые ОС QNX в ее современном виде.

Одно из основных достоинств ОС QNX - масштабируемость, отсутствие которой - недостаток практически всех известных графических систем: ни MS Windows, ни OS/2, ни X Window, ни даже QNX Windows не являются масштабируемыми в такой степени, чтобы их можно было использовать в системах c ограниченными ресурсами. В то же время QNX ориентирована, в первую очередь, на встроенные системы реального времени, и ее графическая система, конечно же, должна эффективно работать именно при ограниченных ресурсах.

Решение этой задачи потребовало применения нетрадиционных подходов и настолько оригинальных технологий, что на созданную ею графическую систему Photon фирма QSSL получила патент. Эта система была отмечена наградами многих выставок и журналов, в том числе наградой журнала Byte 1995 года за самую оригинальную технологию.

Модульность и масштабируемость

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

Кроме того, модульная архитектура при неудачном проектировании порождает громоздкие системы, в которых трудно разобраться даже самим разработчикам. Говорят, что хорошо летает только тот самолет, который выглядит элегантно. Для того, чтобы модульная система хорошо работала, в ее основе должна лежать какая-то красивая идея. Система Photon обязана своими достоинствами идее пространства событий.

Пространство событий

Ключевым понятием любой графической системы является понятие события. Событие характеризуется набором атрибутов, в том числе координатами объекта, с которым оно связано (Рис. 1). Ядро системы отвечает за определение адресата, - модуля, который должен обработать событие. События и объекты существуют в одной плоскости. Основная идея, реализованная в системе Photon, состоит в введении третьей координаты - оси событий. В результате события и объекты связываются в единое пространство. Эта концепция, несмотря на свою простоту, имеет очень интересные следствия.

События

Событие представляет собой сообщение ОС QNX с определенной структурой и семантикой, которое ядро Photon посылает всем "заинтересованным" приложениям.

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

Регионы

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

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

При прохождении события через непрозрачные для него регионы область определения события трансформируется. Если первоначально эта область представляет собой прямоугольник, то при поступлении события к адресату она, в общем случае, выглядит как швейцарский сыр и задается списком прямоугольников меньшего размера. Особенно наглядно этот процесс проявляется, например, для событий DRAW/EXPOSE: когда приложение пытается себя перерисовать, графический драйвер получает только те фрагменты картинки, которые не перекрыты на экране другими программами (т. е. регионами).

Открытость

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

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

Разработчики системы Photon попытались решить и эту проблему нетривиальным способом, применив технологию инкапсуляции, что позволяет считать систему открытой. Для понимания этой технологии требуется познакомиться с архитектурой системы.

Архитектура

Рассмотренные выше идеи позволили спроектировать и реализовать систему весьма необычной архитектуры, которая, в свою очередь, создает богатые возможности для разработчиков, прежде всего при создании систем, более сложных, чем традиционные приложения типа текстовых процессоров или электронных таблиц. Познакомимся с ее компонентами (Рис. 2).

Графическое ядро

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

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

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

Таким образом, в Photon события, регионы и приложения могут быть произвольным образом распределены по сети.

Драйверы ввода-вывода

Это обычные приложения, управляющие устройствами ввода (указательные устройства и клавиатура) и устройствами вывода (видеосистема и принтеры). Технологически взаимодействие между ядром, драйверами и приложениями выглядит следующим образом.

Ядро при запуске создает два фиксированных региона - корневой регион (root) и регион устройств (device). Если представить себе пространство событий в виде аквариума, то корневой регион - это сторона, противоположная наблюдателю (пользователю). Ближняя к нему сторона соответствует экрану монитора, а регион устройств находится посередине между воображаемыми стенками.

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

Необходимость в существовании формального региона устройств объясняется принятой технологией указания относительного положения регионов вдоль оси событий. При создании региона его положение задается неявно, через понятия предков, потомков и братьев. Потомок (child) всегда ближе к наблюдателю, чем предок (parent), а брат потомка может быть ближе, чем потомок (brother-in-front), либо дальше (brother-behind), но в любом случае ближе предка. Регионы драйверов являются потомками региона устройств, а регионы прочих приложений - потомками корневого региона. Кроме того, благодаря региону устройств ядро имеет возможность получать интересующие его события от драйверов до того, как они попадут к приложениям.

Менеджеры

В состав системы входят менеджер окон pwm и менеджер Рабочего стола pdm. Как и драйверы, менеджеры - это обычные приложения. Менеджеры устанавливают свои специальные регионы в той же области, где находятся регионы пользовательских приложений.

В системе X Window можно выбирать только менеджер окон. Photon позволяет отключить и pwm, и pdm, или использовать их поодиночке. Например, менеджер окон является лишним в системе видеонаблюдения, работающей в полноэкранном режиме, а менеджер рабочего стола практически нужен только для системы разработчика.

Реализация

Photon поставляется только в 32-разрядной версии на шести дискетах (на четырех - исполняемые модули, на двух - инструментарий разработчика) и устанавливается в течение 10 мин. Программа способна автоматически опознать тип видеоадаптера и мыши и запустить соответствующие драйверы. Перезагрузок не требуется. В комплект поставки, помимо книжек, входит также оперативная справочная система в формате HTML и программа просмотра (Рис. 3). Чтобы посчитать конфигурационные файлы, хватит пальцев одной руки, и разобраться в них несложно.

Подобная скромность имеет простое объяснение: система не пытается объять необъятное. Ее возможности направлены на решение одной задачи - эффективно выполнять графические приложения в условиях ограниченности ресурсов. Однако в системе имеется необходимый сервис.

Ядро системы Photon

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

Услугами одного ядра может пользоваться произвольное число приложений (в том числе драйверов), работающих на любом узле (в том числе другой ОС, связанном с узлом, где находится ядро через протокол TCP/IP). Координатное пространство, поддерживаемое ядром, определено в границах от -32 765 до +32 765 пикселов по обеим осям. По горизонтальной оси координаты растут традиционно - слева направо, а по вертикальной - сверху вниз, что позволяет использовать привычную для программистов систему координат на экране (начало координат по умолчанию соответствует левому верхнему углу экрана).

Видеодрайверы

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

Видеодрайвер обеспечивает построение основных графических примитивов и поддержку шрифтов. Вид курсоров (как программных, так и аппаратных) также обеспечивается видеодрайвером, поскольку их образы хранятся в шрифтовых файлах. Внутренний формат представления цвета - 24-битное RGB, с возможностью аппаратно-независимого представления в формате HSV. Формат представления символов - мультибайтный, что соответствует стандарту ISO 10646-1.

На момент подготовки данной статьи поддерживаются и автоматически распознаются следующие типы видеоадаптеров:

  • VGA;
  • Super VGA (Video 7, Paradise, Trident, Tseng, Cirrus Logic, ATI);
  • Cirrus Logic 54xx, 6440;
  • S3 based (801/805, 911/924, 928, Trio32/64/64V+, 864, 964, 868, 968);
  • ATI Mach 8/32/64;
  • Western Digital W+D90C24 A/A2;
  • Chips & Technologies CT65545.
  • Приведенный список, на первый взгляд, не слишком велик, однако при ближайшем рассмотрении можно обнаружить, что он охватывает подавляющее большинство современных видеосистем, поскольку они строятся на микросхемах типа S3, ATI Mach или Cirrus Logic. Во всех известных автору моделях блокнотных ПК также используются видеоадаптеры CT65xxx, WD90C24x или CLGD6440/74xx. Пожалуй, единственный пробел - это отсутствие драйверов для адаптеров Matrox и новых моделей Number Nine (типа Imagine 128). Впрочем, учитывая их цену, для нашей страны это пока малоактуально.

    В комплект поставки входит также драйвер phinx, способный транслировать графические команды системы Photon в X-протокол. Это означает, что его можно запустить "поверх" работающего драйвера X Window, и тогда станут доступны сотни адаптеров, поддерживаемых системой X Window (в том числе #9 Imagine 128 и Matrox MGA). Быстродействие, конечно, пострадает, но, по меньшей мере, будет не хуже чем в случае VGA.

    Заметим, что X-протокол может передаваться по сети, использующей протокол TCP/IP, что позволяет пользователям системы X Window при наличии TCP-соединения с QNX-сервером, на котором работает ядро Photon, запустить систему Photon в окне.

    Драйвер устройств ввода Pointer

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

    Когда мышь перемещается, Pointer направляет событие PTR_MOVE региону устройств, который пропускает его дальше, к приложениям, и уведомляет об этом событии владельца (ядро). Ядро посылает событие DRAW от региона устройств обратно, в сторону региона видеодрайвера, для перерисовки указателя мыши. Когда событие попадает в приложение, последнее имеет возможность определить, над каким объектом находится указатель, и при необходимости изменить его внешний вид путем соответствующего обращения к видеодрайверу. Аналогичным образом обрабатываются клавиатурные события.

    На момент подготовки данной статьи поддерживаются и автоматически распознаются следующие типы координатных устройств (мышей и сенсорных экранов):

  • Microsoft Serial/Bus;
  • Mouse Systems Serial/Bus (не распознается, но поддерживается);
  • Logitech;
  • ATI Bus Mouse;
  • Air Mouse;
  • PS/2 Mouse;
  • Elographics IntelliTouch/Accutouch screen;
  • Microtouch screen;
  • Compaq Spratly Interface (Concerto) screen.
  • Менеджер окон pwm

    Этот компонент требуется только для систем с поддержкой многооконного интерфейса. Pwm реализует управление окнами в стиле OSF/Motif, хотя в процессе доработки Photon оформление окон стало больше похоже на Windows 95. Кроме того, pwm поддерживает корневое меню Рабочего стола и панель задач.

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

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

    Менеджер Рабочего стола pdm

    Этот компонент требуется только для систем с поддержкой полноценного Рабочего стола (то есть для систем разработки). Pdm реализует довольно простой механизм управления, не являющийся объектно-ориентированным. Внешне он также неоднократно менялся в ходе бета-тестирования и в конце концов стал похож на горизонтально расположенную в нижней части экрана панель управления MS Office 95, только неподвижную и большего размера.

    Группы приложений представляются в виде закладок и не могут быть организованы иерархически. Число пиктограмм, помещающихся в видимую часть закладки, довольно мало, особенно при низком разрешении (впрочем, разработчику, имеющему маленький монитор с низким разрешением, вообще стоит поискать другой способ убить время), так что их приходится прокручивать, что не очень удобно.

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

    Драйвер принтера Photon.ps

    Этот компонент требуется только для систем с поддержкой печати. На момент подготовки данной статьи единственным официально поддерживаемым типом принтеров являлись PostScript-совместимые устройства. Это пока самый большой недостаток системы, хотя она и не предназначена для офисного использования.

    Кроме того, для системы QNX-Photon доступна бесплатная подсистема просмотра/печати GhostScript, первоначально разрабатывавшаяся для UNIX-X Window и поддерживающая лазерные, струйные и матричные принтеры наиболее распространенных моделей.

    Средства сетевого взаимодействия

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

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

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

    Модуль phrelay - это сервер удаленного доступа, предназначенный для передачи событий от графического ядра удаленному клиенту, способному их обрабатывать и генерировать. Единственным стандартным клиентом является модуль phditto, остальные не входят в комплект поставки и продаются отдельно.

    Методы оптимизации

    Одно из достоинств системы Photon - интеллектуальность модуля phrelay: он не просто передает события, а пытается сделать это максимально эффективно, с тем чтобы добиться приемлемой скорости даже на таком узкополосном канале связи, как телефонная линия. Для достижения этой цели phrelay использует три метода: оптимизацию протокола, кэширование и сжатие данных.

    Как уже отмечалось, система X Window тоже позволяет осуществлять удаленный доступ, но ценой больших затрат памяти на обеих сторонах, и кроме того, этот механизм работает приемлемо только на широкополосном канале типа Ethernet. Доступ по модему практически нереален, поскольку X-протокол неэффективен при передаче по последовательному, узкополосному каналу.

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

    Каждый клиент сервера phrelay кэширует графические объекты, назначает им тэги-идентификаторы (tags) и передает их обратно серверу. При удалении объекта из кэша клиент посылает уведомление серверу phrelay. Таким образом, phrelay знает состояние кэша у клиентов и при обработке перерисовки (события EXPOSE) передает им только те объекты, которых у них нет, причем он может делать это заранее, используя промежутки низкой нагрузки.

    При передаче событий phrelay выполняет сжатие данных по протоколу BPE (Byte Pair Encoding), для которого характерна высокая степень сжатия, низкие затраты на распаковку, средние затраты на упаковку и минимальные затраты на служебные данные. При передаче по последовательному каналу phrelay посылает вместе с данными контрольные суммы, используя алгоритм подсчета контрольных сумм CRC-32. Клиенты могут проверять достоверность получаемых данных, вычисляя контрольные суммы, и, в случае ошибки, запрашивать повторение передачи.

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

    Описанные методы оптимизации позволили добиться серьезных успехов: удаленный клиент может работать с приемлемым временем реакции даже через модем со скоростью 19200 байт/с, которая при наличии хорошего модема достижима даже на плохих телефонных линиях. Система Photon предоставляет два метода использования сетевых возможностей, описываемых ниже.

    Технология Jump Gate

    Эта технология реализована на уровне прикладного интерфейса, благодаря чему она автоматически доступна для всех приложений. Суть ее состоит в том, что любое приложение можно отправить на другой узел, где работает другое графическое ядро. Иначе говоря, приложение совершает "гиперпространственный прыжок".

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

    Инкапсуляция

    Технология, позволяющая отобразить фрагмент пространства событий в окне другой (или той же самой) графической системы, возможно работающей с другой ОС, получила название технологии инкапсуляции. Она реализуется с помощью модулей phditto, phrelay, phinx, а также клиентов phrelay, поставляемых отдельно для различных операционных систем.

    Можно запустить Photon внутри Photon, задав, например, для первой системы режим 1024x768 точек, для второй (внутри первой) - 800x600 точек, а для третьей (внутри второй) - 640x480 точек и т.д. Эта возможность очень полезна для отладки менеджеров, драйверов и т.п.

    Для системы UNIX-X Window инкапсуляция обеспечивается драйвером phinx, реализующим протокол TCP/IP. Можно запустить Photon в окне системы X Window на том же самом компьютере, где она работает, что дает возможность исполнять и отлаживать приложения для системы Photon, пользуясь привычными средствами среды X Window.

    Для систем Windows 3.x/95/NT и OS/2 Warp поставляется клиент phrelay, называемый Phindows (Рис. 5), а для Macintosh анонсирован клиент Phintosh. Эти продукты также позволяют запустить Photon в окне соответствующей системы, что дает возможность организациям, вынужденным работать с перечисленными системами, но нуждающимся в уникальных возможностях, обеспечиваемых системой Photon, установить один QNX-сервер и получать прямой доступ к приложениям Photon с любого узла, работающего с любой ОС.

    На мой взгляд, такой подход эффективнее и удобнее, чем варианты вроде WABI или SoftWindows, при которых пользователи должны жертвовать либо совместимостью, либо производительностью.

    Приложения

    Доступные приложения - традиционно слабое место всех новых систем, даже таких известных, как Windows NT, OS/2 или Solaris. Разумется, Photon не исключение, особенно учитывая разницу в масштабах фирм-разработчиков. В комплект поставки входят всего несколько утилит, демонстрационные программы и традиционный набор игр.

    Это неудивительно, учитывая, что система предназначена в основном для корпоративных клиентов, намеренных разрабатывать приложения самостоятельно. Однако кое-что уже можно найти в виде бесплатных программ, например в виде незабвенных Doom, MPEG Player, CD Audio Player, Ghostview. Фирма QSSL также объявила о предстоящем выпуске для Photon WWW-клиента WebGazer с поддержкой языка Java, а также новой оригинальной разработки - логического анализатора распределенных сетевых приложений Deja-View.

    Тем временем многие независимые разработчики, выпускавшие продукты для среды QNX Windows и X Window, уже объявили о выходе версий для системы Photon. На нашей местной почве тоже кое-что произрастает - кроме очевидных средств поддержки национальной клавиатуры и шрифтов; уже разработана по крайней мере одна промышленная система класса SCADA, предназначенная для облегчения задачи автоматизации производственных процессов. Короче говоря, лед тронулся.

    Самое же главное заключается в том, что система Photon действительно очень удобна для разработки новых приложений, особенно для программистов, знакомых с X Window. Помимо богатого набора виджетов, средства разработки включают довольно мощный визуальный генератор приложений, позволяющий получить код на языке Си и делать с ним все, что угодно.

    Производительность

    Несмотря на то, что основной упор при разработке системы делался не на графическую мощь, а на масштабируемость и гибкость, Photon работает в общем случае практически с той же скоростью, что и X Window для QNX, особенно при использовании видеоускорителей, поддерживающих аппаратный курсор, списки зон отсечения и двойную буферизацию.

    Более того, фирма-разработчик постоянно совершенствует драйверы для системы Photon, так что за время бета-тестирования ее производительность выросла по меньшей мере вдвое. В анонсированной версии Photon 1.1 видеодрайверы будут существенно переработаны для поддержки режима TrueColor (сейчас этот режим поддерживается только для адаптеров ATI Mach32) и увеличения производительности. Кроме того, будет расширен их ассортимент.

    Для тестирования использовалась программа воспроизведения MPEG-файлов mpeg_player, перенесенная из среды X Window. На ПК с процессором Pentium-90, 16 Мбайт ОЗУ и видеоадаптером S3 Trio64 PCI, работающим под управлением системы Photon, видеофайл проигрывался со скоростью 10,37 кадров в секунду. Под управлением системы X Window для QNX на той же машине скорость составила 10,49 кадров в секунду. Следует иметь в виду, что версия X11R5 для QNX является самой быстрой версией X Window для архитектуры Intel x86. Даже Doom нормально работает на этой же машине (в окне) с разрешением до 640Ё480 точек, что следует признать весьма недурным результатом. Одним словом, начало хорошее.

    Потенциальные сферы применения

    Минимальный вариант системы, для которого достаточно около 400 Кбайт свободной памяти, состоит из графического драйвера, графического ядра Photon и драйвера Pointer. Еще как минимум 512 Кбайт для ОС QNX, плюс некоторое количество памяти для приложений, и вы получаете графическую систему, работающую с 1-2 Мбайт памяти (это емкость очень дешевой микросхемы флэш-памяти). Зная, что ОС QNX может быть записана в такую память и поддерживает формат XIP (eXecute-In-Place), можно сконструировать множество необычных по возможностям, компактных и недорогих графических устройств. Именно этот рынок и является основной целью разработчиков системы Photon.

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

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

    Представьте себе систему слежения за подвижными объектами, в которой есть несколько операторов, отвечающих за определенные участки территории. Если у каждого из них имеется монитор с фрагментом единого графического пространства, то при выходе объекта из зоны одного оператора он автоматически появится на мониторе другого. При этом операторы могут видеть экраны друг друга и даже перемещать окна между собой.

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

    Наконец, по мере появления готовых приложений, например класса SCADA, использование системы Photon может оказаться более выгодным или более эффективным, чем применение системы X Window. Осталось только подождать.


    1 Чтобы избежать обсуждения вопроса о том, является ли та или иная версия MS Windows, X Window, QNX Windows, NextStep или Photon оболочкой или настоящей ОС, и чтобы подчеркнуть, что все они реализуют графический интерфейс пользователя, далее все подобное ПО мы будем называть "графическими системами".


    Игорь Николаевич Коваленко, технический директор АО "ИнфоМаркет" (г. Санкт-Петербург), тел. (812) 247-03-33, e-mail: info@infomarket.spb.su
    2893