Обзоры
Виртуальный сетевой компьютинг
0

Виртуальный сетевой компьютинг

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

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

Эволюция видеоподсистем

Нетривиальное применение технологии VNC — в качестве эмулятора X Window

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

Первое самое интересное и "неожиданно" (с точки зрения апологетов GUI, естественно) живучее воплощение видеоподсистемы — алфавитно-цифровой терминал (АЦТ). Если не вдаваться в технические подробности, то АЦТ в графической части представляет собой несложный автомат, осуществляющий визуализацию некоторого массива (например, исторически "прижившейся" размерности 24 x 80) кодов в соответствии с определенными правилами, отображающими значения кодов в растровые "картинки" (например, формата 9 x 15 пикселов). Тут следует отметить одну важную деталь — автор умышленно даже не упомянул о том, что обычно в ячейки массива кодов заносятся коды символов той или иной кодовой таблицы, а "закон отображения" фактически описывается растровым шрифтом для этих символов. Использованное в предыдущем предложении слово "обычно" означает только то, что оно означает, — потенциально АЦТ может отображать не просто буквы и цифры, а все, что допустимо отображать с использованием подобной техники визуализации.

Второе воплощение видеоподсистем — векторные графические дисплеи (ВГД), несмотря на ряд принципиальных достоинств (не утративших своей актуальности по сей день), оказалось недолговечным и быстро ушло со сцены. Сегодня уже трудно сказать, какая из этих ветвей была более высокоуровневой — в основе ВГД лежит также несложная и очень близкая к используемой в АЦТ модель данных — список, содержащий коды и параметры графических примитивов. Традиционно к последним относят точки и отрезки прямых, а иногда даже и намного более сложные геометрические конструкции — дуги, сплайны и т. д. Алгоритм работы управляющего автомата ВГД также исключительно прост — он постоянно "просматривает" элементы списка и прорисовывает их на экране. Во времена очень медленной электроники для устранения неизбежного эффекта мерцания картинки (на выполнение каждой операции "рисования" требуется время, и если суммарное время отображения списка будет больше, чем время послесвечения люминофора монитора, картинки находящихся в начале списка примитивов могут "погаснуть") в ВГД применяли весьма дорогие электронно-лучевые трубки (ЭЛТ) с длительным послесвечением и даже так называемые ЭЛТ с памятью. Возможно, что именно эти два фактора сыграли роковую роль в судьбе технологии векторных графических дисплеев.

VNC может использоваться для сохранения наработок на аппаратно устаревших или снятых с производства платформах, в частности на компьютерах Acorn

Несмотря на примитивность конструкций и использованных инженерных решений, с точки зрения разработчика операционных систем и системного ПО, АЦТ и ВГД являются исключительно высокоуровневыми устройствами. Доступные "со стороны" компьютера как интерпретаторы некоторого языка, АЦТ и ВГД позволяют применять самые совершенные программные технологии (заимствованные, например, из таких совсем далеких от приземленных проблем пользовательских интерфейсов разделов computer science, как теория формальных языков и теория построения компиляторов) при проектировании ОС и эффективно разделять ресурсы ЭВМ. Последнее, несколько смелое, заявление нуждается в дополнительном пояснении — "общение" на языковом уровне всегда требует значительно меньшей полосы пропускания каналов связи (людей, например, вполне устраивает 3 kHz).

Последнее, несколько смелое, заявление нуждается в дополнительном пояснении — с одной стороны, "общение" на языковом уровне всегда требует значительно меньшей полосы пропускания каналов связи (людей, например, вполне устраивает выработанная миллионами лет эволюции полоса 3 kHz), чем обмен "сырыми данными", с другой — обмен фразами некоторого языка высвобождает массу времени для их "обдумывания". Такое вольное изложение вполне корректно: системы на основе и АЦТ, и ВГД характеризуются крайне невысокими требованиями скорости обмена между терминалами и хост-компьютером, отнимают мизерное (в терминах даже по-черепашьи медленных процессоров) время на процедуры взаимодействия и, наконец, полностью освобождают хост от решения ресурсоемкой задачи визуализации объектов языка, на котором ведется "общение". Все это можно заменить эквивалентной фразой: "АЦТ и ВГД идеально подходят для построения мультипользовательских вычислительных систем". Ее актуальность не утрачена и по сей день.

Третье воплощение видеоподсистем — растровые графические дисплеи (РГД) — стало доминирующим практически сразу после "свержения ига мэйнфреймов" процессом персонализации компьютеров. На фоне своих "примитивных" предшественников, в ходе эволюции становившихся все "умнее", РГД, с точки зрения программиста, заняли пустующую нишу "простейших". Здесь ни о каких языках взаимодействия речь даже и не шла. Обмен велся (и по сей день фактически ведется) "сырыми данными" — парами (адрес, цвет), указывающими положение и цвет одного пиксела в растровой "картинке", и вся тяжесть процессов визуализации перекладывается "на плечи" центрального процессора. Естественно, в части возможностей разделения ресурсов "чистые" РГД ничего собой не представляли — им нужны "толстые линии связи" (очень высокая полоса пропускания) и море ресурсов процессора. Правда, за эту плату РГД позволяют рисовать красивые цветные картинки почти без всякого мерцания…

После расцвета РГД наступила "эпоха гибридов". Идея объединения достоинств представителей всех воплощений видеоподсистем недолго витала в воздухе. В середине 70-х годов уже начали создаваться первые гибридные конструкции. От интеллектуальности АЦТ- и ВГД-архитектур они позаимствовали языковой принцип общения с компьютером, от РГД — высокое качество изображения. Процесс совершенствования идеи гибридной видеоподсистемы привел к появлению множества эволюционных ветвей, в том числе и самых известных, популярных и живучих разработок: X Window и DPS (Display PostScript). Менее известны замечательные 3D-терминалы, "общавшиеся" с основным компьютером на высокоуровневых языках описания графических объектов, векторно-растровые гибриды и т. д.

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

Место VNC

На радость системным администраторам VNC позволяет использовать практически любой современный палмтоп и даже Nokia Communicator в качестве графической консоли

Термин "виртуальный сетевой компьютинг" (VNC) на самом деле означает… не слишком строгое определение понятий "сервер/клиент" и до обаятельности примитивный протокол обмена между ними. Не вдаваясь пока в детали, попробуем найти ему место в нашей картине эволюции графических подсистем.

В отличие от класса "простейших" (РГД) VNC "как бы" обладает принципиальной способностью к "общению" с компьютером на языковом уровне. В то же время "язык общения" VNC убог настолько, что на его фоне речь незабвенной Эллочки Людоедки может показаться шедевром ораторского искусства. Отсюда и это закавыченное "как бы", и невозможность отнести VNC к классу "традиционных гибридных видеоподсистем". По сравнению со 158 "иероглифами из алфавита" X Window (именно столько сообщений различного типа определены стандартом X-протокола) менее 20 "буквочек" в алфавите VNC — RFB-протоколе кажутся просто смешными. В части же семантики языка "узость кругозора" VNC еще раз заставляет вспомнить героиню Ильфа. Все, о чем "знает" VNC, — прямоугольный фрагмент пиксельного изображения. Поэтому X Window с его скрытыми за короткими иероглифами X-протокола сложнейшими интегративными понятиями, объединяющими десятки характеристик, только обзорное изучение которых требует несоизмеримо большего по сравнению с объемами всего журнала материала, выглядит настоящим технологическим монстром.

Итак, ни к классу РГД, ни к классу гибридных видеоподсистем отнести VNC нельзя. Но вот если вспомнить, как работает АЦТ, то можно сказать, что VNC — это в некотором роде современная реинкарнация… доброго старого алфавитно-цифрового терминала. Судите сами: семантика языков АЦТ и VNC подразумевает управление процедурами адресации и визуализации прямоугольных фрагментов изображения, АЦТ (по крайней мере — высококлассные модели) и VNC способны удаленно загружать пиксельные "картинки" и, наконец, реализации VNC и АЦТ соизмеримы по сложности (во многих случаях VNC оказывается даже проще). Так как наименования для нового класса видеоподсистем, подобных VNC, не существует (впрочем, и вся предпринятая попытка классификации весьма условна), а "подсказка", кроющаяся в аббревиатуре названия протокола RFB (Remote Frame Buffer — удаленная видеопамять), не слишком хорошо отражает потенциальные возможности VNC, будет вполне допустимым назвать этот класс "независимой расширяемой видеоподсистемой" (НРВ). Почему именно так — станет понятно немного позже.

Механика VNC

ОС Oberon, оснащенная VNC-клиентом, представляет собой почти идеальный "тонкий компьютер", позволяющий эффективно утилизировать устаревшие аппаратные средства

Главный принцип, лежащий в основе VNC, хорошо известен — "разделяй и властвуй". Поток низкоуровневых событий, вызывающих единственно доступные РГД операции типа "отобразить точку с координатами", здесь заменен значительно менее интенсивным потоком операций — "отобразить прямоугольник с координатами". И, можно сказать, это все. Точнее, — почти все. Элементарность процесса перехода от операций РГД к операциям VNC позволила реализовать серверы и клиенты этой системы для фактически всех ОС и аппаратных платформ, включая такие неожиданные экземпляры, как палмтопы. На сегодняшний день только VNC обеспечивает возможность удаленной работы с любыми графическими приложениями, выполняющимися, например, под управлением ОС Windows или Unix/X Window с помощью карманных устройств с низким разрешением экрана или низкопроизводительных (вплоть до 8-битовых) встраиваемых устройств.

Многочисленные оценки показателей производительности VNC убедительно доказывают, что у системы есть очень хорошие перспективы. Так, отображение VNC-клиентом удаленно запускаемого броузера Netscape, отображающего главную страницу AltaVista, порождает весьма скромный трафик в сети (всего около 0,13 Mbps) и визуально не слишком "заторможенно" выглядит по сравнению с локальной работой даже в случае cоединения клиента и сервера по 10 Mbps сети.

Вкратце процессы, происходящие на клиентской и серверной стороне при использовании VNC-технологии, можно описать незамысловатой последовательностью действий. В процессе установки соединения, именуемом в терминологии VNC "начальным рукопожатием", VNC-сервер информирует клиента о диапазоне поддерживаемых версий протокола, из которого клиент выбирает ему подходящую и сообщает о ней серверу (это решение кажется очень удачным в условиях быстрого развития свободно распространяемой системы). После согласования версий сервер оповещает клиента о необходимости и схеме аутентификации, и наступает короткая фаза определения прав клиента. Механизм этот очень прост: сервер отправляет клиенту 16-байтовый случайный запрос, из которого с помощью DES-алгоритма и предъявленного пользователем пароля создается 16-байтовый ответ, возвращаемый серверу. Если в результате процедуры аутентификации успешно определены права клиента, сервер уведомляет его о переводе "общения" в новую фазу — инициализацию.

Цель инициализации — выработка механизмов устранения барьеров в отличиях организаций и физических реализаций так или иначе связанных с графической подсистемой аппаратных и программных средств. Следует отметить, что разработчиками VNC такая непростая задача решена "малой кровью" и с тщательным соблюдением одного-единственного, но гарантирующего сохранение "тонкости" реализации VNC-клиента правила — все ресурсоемкие операции трансформации форматов данных выполняются на серверной стороне.

После "подстройки" сервера к возможностям клиента наступает главная фаза работы VNC — обновление видеопамяти и передача информации о событиях. Вся она "укладывается" фактически в три слова "языка" RFB: запроса на обновление фрагмента видеопамяти (FramebufferUpdateRequest), сообщения о нажатии клавиши и сообщения об изменении состояния позиционирующего устройства (например, мыши).

Главная идея VNC — обновление фрагмента видеопамяти — заключается в следующем: клиент запрашивает прямоугольную область видеопамяти, которая его "интересует" (возможно, всю видеопамять), и указывает режим обновления — относительный или абсолютный. В последнем случае сервер просто передаст содержимое всего интересующего участка видеопамяти клиенту (обычно это необходимо выполнить в начале работы). Но затем клиент запрашивает относительный режим обновления, и начинается самое главное: сервер передает не всю интересующую область видеопамяти, а только изменившиеся ее фрагменты, аппроксимируя их прямоугольниками. Более того, в массе случаев никакой передачи пиксельной информации может вообще не понадобиться — когда она уже есть в видеопамяти клиента, и содержащий ее прямоугольник достаточно просто переместить. Так, перемещение большого окна над фоновой картинкой не вызовет "взрыва" передачи данных в VNC-системе. Для указания подобных событий протокол RFB содержит специальный формат управляющего "слова".

Итак, мы подошли к моменту, когда уже знаем и главные принципы работы VNC, и то, что системы на основе этого протокола уже сегодня принципиально работоспособны. Но… Успех реализации данной системы в рамках традиционных ОС не должен затенять возможные перспективы развития VNC-подобных систем и, что главное, — перспективы их применения в качестве архитектурного элемента современных ПК и ОС.

Структурированная графика

Сегодня клиенты и серверы VNC легально бесплатно доступны практически для всех платформ с сайта разработчиков www.uk.research.att.com/

С точки зрения программиста сегодняшняя реализация VNC значительно повышает уровень абстракции, де-факто стандартный для РГД, динамически создавая вместо одного большого пиксельного массива некую структуру, отражающую изменения в этом массиве. Достигаемая за счет структуризации возможность удаленной работы с графическими приложениями — это всего лишь следствие скрытой причины, а именно — сокращения полосы пропускания, необходимой для работы видеоподсистемы. Соответственно, такая возможность представляет собой куда больший практический интерес, чем решение задачи создания "сверхтонких" клиентов. Ведь если изначально разработать видеоподсистему, основанную на структурированном буфере изображений, можно добиться очень высоких показателей производительности при скромных возможностях шин. А последнее — это серьезная "болезнь" современных компьютерных архитектур.


Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: