Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
gos_2012_priborostroenie_(6,7,8).doc
Скачиваний:
6
Добавлен:
04.08.2019
Размер:
111.1 Кб
Скачать

Оконная система X window. Назначение и основные концепции построения (событийное программирование, типы сообщений, буферизация сообщений)

X Window - это стандартная для UNIX-подобных ОС оконная система. Она была разработана как система предоставляющая возможность разным типам машин взаимодействовать друг с другом посредством сети (X was designed to allow many different types of machines to cooperate within a network).

Назначение:

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

Основные концепции или “How it works”:

  • «Дисплей» и «экраны».

    • в X Window существуют понятия "дисплей" (display) и "экран" (screen), при этом под "дисплеем" понимается компьютер, у которого есть устройства ввода в виде клавиатуры и мыши, а также один или БОЛЕЕ "экранов". Если экранов несколько, то им могут соответствовать как реальные физические устройства, так и виртуальные экраны.

  • X Window - это сетевая система.

    • Это означает, что приложение может работать не обязательно на том компьютере, к которому подключен данный "дисплей". X Window построена снизу вверх, причем так как это сетевая система , то на обоих концах «соединения» приложения принимают и отсылают сообщения друг другу через X протокол. Эти приложения называются клиентом и сервером, но в отличии от традиционного восприятия распределенных систем, сервер всегда выполняется на том конце соединения, который взаимодействует непосредственно с дисплеем (см. пункт выше). На другом конце соединения работают клиенты, написанные при помощи библиотеки Xlib. Ситуация проиллюстрирована на рисунке выше.

  • Менеджер окон - отдельная часть.

    • В состав X Window входит особая программа, называемая "менеджер окон" (window manager). Именно эта программа определяет внешний вид окон, в которых "рисуют" другие программы. Таким образом, X Window не подразумевает какого-то конкретного внешнего вида окон (например, цвет заголовка окна или вид/расположение кнопки "свернуть окно"). Это определяется оконным менеджером. Стандартный дистрибутив X Window включает в себя простой оконный менеджер twm (стандартно для Gnome до версии 3 это был Metacity, позднее им стал Mutter и GnomeShell). Другие дистрибутивы могут содержать иные менеджеры окон.

  • Программы, приводимой в действие событиями.

    • X Window основана на концепции "программы, приводимой в действие событиями" (event-driven programm). Это означает, что не программа диктует пользователю, что надо делать в конкретный момент (например, выбрать из меню какой-то пункт), а наоборот, пользователь практически в любой момент может задавать действия, которые должна выполнить программа. Главный цикл программы для X Window, как правило, получает информацию о событиях от X-сервера и обрабатывает их. К событиям, помимо действий пользователя (нажатие клавиш клавиатуры, кнопок мыши, перемещение мыши), относится также взаимодействие с другими программами (например, в результате свертывания окна какой-то программы, оказалась видна ранее закрытая часть окна, что требует реакции в виде перерисовки этой части окна).

  • Расширяемость

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

Типы сообщений и буфферизация сообщений (“The X protocol” and “Buffering”).

X протокол определяет что делает каждый пакет с данными, который был перемещен между Xlib И сервером в обоих направлениях. Даже когда сервер и клиент выполняются на одной и той же машине, весь обмен идет через этот протокол, но уже по внутреннему каналу вместо внешней сети. Существуют 4 типа пакетов, которые используются протоколом, это:

  • Запросы (requests)

  • Ответы (replies)

  • События (events)

  • Ошибки (errors)

Запросы. Пакет типа «запрос» посылается от клиента к серверу. Запрос может нести большую объем информации, например, сменить цвет или же нарисовать линию. Большинство процедур клиента генерируют запросы.

Ответы. Пакет типа «ответ» посылается от сервера клиенту в качестве отклика на некоторые запросы. Не все запросы сопровождаются ответами, только те, которые запрашивают информацию. Например, запросы, которые определяют отрисовку какого либо объекта не генерируют «ответа». Запросы, которые требуют ответа называются возвратный запрос (не знаю как перевести лучше “round-trip request”, если дословно, то запрос туда и обратно). Разработчики должны минимизировать количество возвратных запросов, так как при наличии задержках в сети они начинают медленнее работать.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]