Оконная система Photon microGUI
Многие встроенные системы нуждаются в пользовательском интерфейсе. Для сложных приложений или для максимальной простоты использования, естественным выбором является графическая оконная система. Однако оконные системы настольных ПК требуют слишком много системных ресурсов для практического применения во встроенных системах, где память и стоимость ограничены. QNX – единственная ОС РВ, имеющая свою оконную систему с профессиональным графическим интерфейсом даже для примитивного электронного устройства с ограниченными ресурсами.
Photon – компактный (256К) оконный пакет, поддерживающий стандарт Motif. Модульная структура Photon microGUI дает разработчикам свободу создания функционально наполненных и гибко расширяемых приложений во встраиваемых средах. Используя технологию удаленного пользовательского интерфейса (Remote User Interface – RUI), можно наблюдать и контролировать графическую среду встроенной системы на базе QNX в окне графического интерфейса Windows 95/98/NT или UNIX. Приложения RUI "знают" о скоростях обмена и могут работать по последовательным или сетевым соединениям. Во встраиваемых системах, это дает возможность снабдить графическим интерфейсом бесконсольный "черный ящик" и удаленно контролировать его, используя стек TCP/IP, фактически из любой точки земного шара.
Используя клиентский модуль Citrix ICA (Independent Computer Architecture) для Photon, можно получить обратную совместимость, если потребуется управлять сеансом пользователя в Windows 95/98/NT из окна Photon. При создании оконной системы Photon microGUI применена архитектура микроядра, успешно воплощенная в QNX для создания POSIX ОС для встроенных систем.
Для реализации ОС на основе микроядра необходимо добиться максимальной эффективности IPC (от IPC зависит производительность всей ОС). Благодаря механизму IPC в QNX с низкими издержками, стало возможным создание структуры GUI как графического "микроядра", окруженного командой процессов, взаимодействующих через IPC.
Архитектура Photon отличается от построения графической системы по классической схеме клиент/сервер, используемой в X Window System, за счет ограничения функциональности, реализуемой внутри графического микроядра (или сервера), и распределения большей части функций GUI между взаимодействующими процессами.
Микроядро Photon выполняется как маленький процесс (размер кода 45K), реализуя только несколько фундаментальных примитивов, которые внешние опциональные процессы используют для построения более высокого уровня функциональности оконной системы. Для микроядра Photon "окна" не существуют. Микроядро Photon не может также "рисовать" что-либо или управлять мышью либо клавиатурой.
Рис. 2.25. Photon использует последовательность регионов, начиная от корневого региона на заднем плане пространства событий до графического региона спереди. События рисования двигаются от регионов приложений к графическому региону. События ввода возникают в регионе курсора/клавиатуры и двигаются по направлению к корневому региону |
Для управления средой GUI, Photon создает 3-мерное "пространство событий" и ограничивается только оперированием регионами и выполнением отсечения и направления различных событий по мере их прохождения сквозь регионы в этом пространстве событий (рис. 2.25).
Эта абстракция напоминает концепцию микроядра ОС, которое не поддерживает функции ввода/вывода для устройств или файловой системы, а полагается на внешние процессы, предоставляющие эти услуги высокого уровня. Это обеспечивает масштабируемость ОС и GUI, построенных на основе микроядра, по размеру и функциональности.
В основе "абстракции" микроядра Photon лежит воображаемое графическое пространство событий, в которое другие процессы могут помещать регионы. Используя QNX IPC для связи с микроядром Photon, эти процессы управляют своими регионами для предоставления графических сервисных функций высокого уровня или для выполнения функций пользовательских приложений. Для систем с ограниченными ресурсами Photon может масштабироваться "вниз" за счет удаленияпроцессов, предоставляющих сервисные функции, а за счет добавления процессов, предоставляющих сервисные функции, Photon может масштабироваться "вверх" до полнофункциональной настольной системы.
"Пространство событий" можно представить как пустое трехмерное пространство с "корневым регионом" на заднем плане. Приложения помещают регионы в трехмерное пространство между корневым регионом и пользователем; они используют эти регионы для генерации и приема различных типов событий в этом пространстве.
Процессы, выполняющие обслуживание драйверов устройств, помещают регионы на передний план пространства событий. В дополнение к управлению пространством событий и корневым регионом, микроядро Photon поддерживает экранный указатель (курсор), проецируемый как события рисования по направлению к пользователю.
Двигающиеся в пространстве событий события можно представить себе как "фотоны" (что и дало название оконной системе). Сами события состоят из набора прямоугольных областей и прикрепленных к ним данных. По мере движения событий в пространстве событий их прямоугольники пересекают регионы, принадлежащие различным процессам (приложениям).
Про события, которые двигаются от корневого региона, говорят, что они перемещаются наружу (по направлению к пользователю), в то время как про события от пользователя говорят, что они двигаются внутрь, по направлению к корневому региону.
Взаимодействие между событиями и регионами лежит в основе ввода и вывода в Photon. События мыши, клавиатуры и светового пера двигаются от пользователя к корневому региону, с "прикрепленным" к ним положением курсора. События рисования возникают в регионах и двигаются по направлению к региону устройства и пользователю.
Каждому региону соответствует прямоугольная область, определяющая его положение в 3-мерном пространстве событий. Регион также имеет атрибуты, определяющие, как он взаимодействует с различными классами событий при пересечении ими региона.
Взаимодействие региона с событиями определяется двумя битовыми масками чувствительности и непрозрачности. Маска чувствительности определяет, должен ли процесс-владелец региона оповещаться о пересечении региона тем или иным событием. Каждый бит маски чувствительности определяет, чувствителен ли регион к определенному типу событий. Когда событие пересекает регион, для которого установлен бит (равен 1), копия этого события помещается в очередь процесса-владельца региона, извещая приложение о прохождении события через регион. Такое извещение никак не изменяет само событие. Маска непрозрачности определяет прозрачность региона для тех или иных событий. Каждый бит этой маски определяет, является ли регион прозрачным для определенного типа события. При прохождении события сквозь "непрозрачный" регион, оно модифицируется.
Подобно регионам, события могут относиться к различным классам и иметь различные атрибуты. В отличие от большинства оконных систем, Photon классифицирует не только ввод (перо, мышь, клавиатура т.д.), но и вывод (запросы рисования) как события. События могут генерироваться как регионами, которые процессы поместили в пространство событий, так и самим микроядром Photon. Приложения могут либо ждать наступления событий, и при этом блокироваться, либо получать асинхронные извещения о приходе события.
Графические драйверы реализованы как процессы, которые помещают регион на переднем плане пространства событий. Регион графического драйвера чувствителенк событиям рисования, исходящим из пространства событий. Графический драйвер получает события рисования, когда они пересекают его регион. Работа драйвера заключается в том, чтобы преобразовать результирующий список в визуальное отображение на контролируемом графическом оборудовании.
Одно из преимуществ использования списка прямоугольников внутри события состоит в том, что каждое передаваемое драйверу событие представляет собой фактически "пакет" запросов.
Поскольку графический драйвер помещает регион в пространство событий Photon, то одновременно могут быть запущены несколько графических драйверов для нескольких видеоадаптеров, при этом каждый драйвер имеет регион, чувствительный к событиям рисования. Эти регионы могут быть расположены рядом, либо перекрывать друг друга произвольным образом. Photon наследует от QNX сетевую прозрачность и приложения или драйверы Photon выполняются на любом узле сети, позволяя дополнительным графическим драйверам расширять графическое пространство Photon за счет физических дисплеев других компьютеров в сети. За счет перекрытия регионов графических драйверов, события рисования могут дублироваться на нескольких экранах.
Photon разработан с учетом поддержки национальных символов. Следуя стандарту Unicode (ISO/IEC 10646), Photon предоставляет разработчикам возможность создавать приложения, поддерживающие основные мировые языки. Photon обеспечивает немерцающую анимацию через специальный виджет-контейнер с "двойным буфером" (PtDBContainer), который создает специальный контекст в памяти для отрисовки изображений и использует блок разделяемой памяти, достаточный для хранения изображения соответствующего размера.
Photon предусматривает встроенную поддержку печати с выводом на различные устройства, включая файлы битовых карт; PostScript; Hewlett-Packard PCL; Epson ESC/P2; Canon; Lexmark.
Photon также содержит виджет/диалог выбора принтера, облегчая печать из приложений.
Добавление Менеджера окон превращает Photon в полнофункциональный настольный графический интерфейс (GUI). Менеджер окон не является обязательным и может отсутствовать в большинстве встроенных систем. Менеджер окон позволяет пользователям манипулировать окнами приложений, изменяя их размер, перемещая и минимизируя. Менеджер окон использует концепцию фильтрации событий. Он помещает дополнительные регионы за регионами приложений, на которых "нарисованы" элементы управления окнами. Так как вид и поведение интерфейса определяются заменяемым Менеджером окон, то можно реализовать различные виды пользовательских интерфейсов. В результате Photon демонстрирует уникальные характеристики:
· низкие требования к объему памяти позволяют Photon обеспечивать высокий уровень функциональности оконной оболочки, где ранее было возможно только использование графической библиотеки;
· Photon обладает очень гибкой, наращиваемой архитектурой, которая позволяет разработчикам расширять возможности графического интерфейса в необходимом для своего приложения направлении;
· благодаря гибкости кросс-платформенной связи, приложения Photon могут быть использованы в любой настольной среде.
Дата добавления: 2016-04-06; просмотров: 1093;