Система X Window

Пользовательский интерфейс практически всех UNIX-систем базируется на системе X Window System (которую часто называют просто X), разработанной в 1980-е годы в Массачусетском технологическом институте (MIT) как часть проекта Athena.
Она обладает хорошей переносимостью и работает целиком в пользовательском пространстве. Первоначально она предназначалась для подключения большого количества удаленных пользовательских терминалов к центральному вычислительному серверу, поэтому логически разбита на клиентское и серверное программное обеспечение, которое потенциально может работать на разных компьютерах. На современных персональных компьютерах обе ее составляющие могут работать на одной и той же машине. В Linux-системах популярные среды рабочих столов Gnome и KDE работают поверх X-системы.

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

Может показаться странным, что X-сервер всегда находится внутри пользовательских компьютеров, а X-клиент может быть вне его, на удаленном вычислительном сервере, но стоит лишь подумать об основной задаче X-сервера — отображении битов на экране, как сразу становится понятно, почему нужно держать его ближе к пользователю. С точки зрения программы именно клиент предписывает серверу какие-то действия вроде отображения текста и геометрических фигур. А сервер (в локальном персональном компьютере) делает, как и все серверы, лишь то, что ему сказано.

Схема клиента и сервера для случая, когда X-клиент и X-сервер размещаются на разных машинах, показана на рис. 5.27. Но при запуске Gnome или KDE на одной машине в роли клиента выступает какая-нибудь прикладная программа, использующая X-библиотеку, которая общается с X-сервером на той же самой машине (но использует TCP-подключение через сокеты аналогично тому, как это делалось бы в случае использования удаленного компьютера).

Рис. 5.27. Клиенты и серверы в системе X Window System, разработанной в MIT


Смысл предоставления возможности запуска X Window System в качестве надстройки над UNIX (или над другой операционной системой) на отдельной машине или с использованием сети заключается в том, что X-система фактически определяет протокол обмена данными между X-клиентом и X-сервером (см. рис. 5.27). И не

важно, где именно находятся клиент и сервер — на одной машине, отделены друг от друга на 100 метров и связаны по сети или их разделяют тысячи километров и они связаны через Интернет. Во всех случаях протокол и работа системы имеют идентичный характер.

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

Для облегчения программирования в среде X-системы в качестве ее составной части предоставляется инструментарий под названием Intrinsics. На этом уровне осуществляется управление кнопками, полосами прокрутки и другими элементами графического интерфейса, именуемыми виджетами (widgets). Для создания настоящего графического интерфейса пользователя с универсальными восприятием и поведением необходим другой уровень (или несколько уровней). Один из примеров — Motif (см. рис. 5.27) — является основой для общей среды рабочего стола — Common Desktop Environment, используемой в Solaris и других коммерческих UNIX-системах. Во многих приложениях используются вызовы к Motif, а не к Xlib. В Gnome и KDE имеется структура, похожая на ту, которая показана на рис. 5.27, только в них используются другие библиотеки. В Gnome используется библиотека GTK+, а в KDE — библиотека Qt.

Также стоит заметить, что управление окнами не является частью самой X-системы. Решение о его отделении было принято преднамеренно. Этим занимается отдельный процесс X-клиента под названием менеджер окон. Он управляет созданием, удалением и перемещением окон на экране. Для управления окнами он посылает команды X-серверу, предписывая, что нужно делать. Зачастую он работает на той же машине в качестве X-клиента, но теоретически может работать где угодно.

Такая модульная конструкция, состоящая из нескольких уровней и многочисленных программ, придает X-системе высокую степень переносимости и гибкости. Она была перенесена на большинство версий UNIX, включая Solaris, все варианты BSD, AIX, Linux и т. д., предоставляя разработчикам приложений возможность использовать стандартный интерфейс для нескольких платформ. Она также была перенесена на другие операционные системы. Для сравнения, в Windows система управления окнами и графический интерфейс пользователя перемешаны в интерфейсе графических устройств — GDI и расположены в ядре, что усложняет их поддержку и, конечно же, делает невозможным их перенос.

Теперь перейдем к краткому обзору X-системы с уровня Xlib. При запуске X-программа создает подключение к одному или нескольким X-серверам, назовем их рабочими станциями, даже если они будут сосуществовать на одной и той же машине с самой X-программой. X-система рассматривает эти подключения как надежные в том смысле, что потерянные и продублированные сообщения обрабатываются сетевым программным обеспечением и не нужно заботиться об ошибках обмена данными. Обычно для связи между клиентом и сервером используется протокол TCP/IP.

При обмене данными используются четыре вида сообщений:

♦ команды вывода графики от программы к рабочей станции;

♦ ответы рабочей станции на программные запросы;

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

♦ сообщения об ошибках.

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

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

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

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

Примерная неполная структура X-программы показана в листинге 5.1. Она начинается с нескольких необходимых заголовков, за которыми следует ряд определений переменных. Затем осуществляется подключение к X-серверу, указанному в виде параметра процедуры XOpenDisplay. После этого происходит выделение окну ресурсов, и его дескриптор сохраняется в переменной win. На практике здесь должна происходить инициализация. Затем программа сообщает менеджеру окон о существовании нового окна, чтобы он мог взять его под свое управление.

Листинг 5.2. Структура прикладной программы X Window

#include

#include

main(int argc, char *argv[]) {

Display disp;

Window win;

GC gc;

*/


XEvent event; int running = 1;


XFreeGC(disp, gc); /* избавление от графического

контекста */

XDestroyWindow(disp, win); /* высвобождение пространства памяти

окна */

XCloseDisplay(disp); /* разрыв сетевого подключения */

}

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

Основной цикл состоит из двух операторов и логически выглядит намного проще соответствующего цикла в Windows. Первый оператор получает событие, а второй осуществляет его диспетчеризацию по типу этого события для его дальнейшей обработки. Когда какое-нибудь событие свидетельствует об окончании программы, переменной
running присваивается значение 0 и цикл завершается. Перед выходом программа избавляется от графического контекста, окна и подключения.

Следует заметить, что графический интерфейс пользователя нравится далеко не всем. Многие программисты предпочитают традиционный интерфейс, основанный на использовании командной строки, который рассматривался ранее в этом разделе. X-система управляет им с помощью клиентской программы под названием xterm. Эта программа имитирует работу почтенного интеллектуального терминала VT102, укомплектованного всеми эскейп-последовательностями. Такие редакторы, как vi и emacs, а также другие программы, использующие базу данных termcap, работают в подобных окнах без каких-либо изменений.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Система X Window:

  1. § 39 Классификация договоров в отдельных видах. – Римская классификация. – Система прусского закона, французского и австрийского кодекса. – Система русского свода. – Система настоящего изложения.
  2. Тема 15 Правова система і система права. Система законодавства та систематизація нормативно-правових актів
  3. Глава 4. Система права и система законодательства
  4. §5. Система военных судов в РФ как часть системы судов общей юрисдикции
  5. Единство и взаимосвязь правовой системы и системы правового общества
  6. § 1.3. Система трудового права і система трудового законодавства
  7. § 33 Общее правило о переходе наследства к детям. – Отличие отделенных от неотделенных. – Право представления. – Право родительское. – Право боковых родственников. – Римская система определения прав по классам и степеням. – Германская система определения прав по линиям и коленам.
  8. § 14 Отношения супругов по имуществу. – Германское начало общения имуществ в браке и римская система приданого. – Особое имущество жены. – Разнообразные системы западных законодательств. – Раздел имуществ по прекращении брака. – Ограничения брачных договоров и сделок между супругами. – Английский закон об отношениях супругов по имуществу.
  9. § 34 Смешанные системы в новейших законодательствах. – Происходящее от различия сих систем различие в порядке раздела и в допущении права представления. – Ограничение наследственного права пределами родства. – Ограничение женщин. – Разделение наследства между родами. – Возвращение подаренного родителями. – Наследование супругов и незаконных детей и родителей. – Закон наследования в Англии.
  10. СИСТЕМА
  11. СИСТЕМА НЕРВНАЯ
  12. Тема 20. Смешанные правовые системы
  13. СИСТЕМА ТЕЙЛОРА
  14. 3. Система законодавства
  15. СИСТЕМА ЭРРАТИЧЕСКАЯ
  16. СИСТЕМА ИНДИКАЦИИ