Основные механизмы организации распределенных вычислений

QNX является сетевой операционной системой, которая позволяет организовать эффективные распределенные вычисления. Для этого на каждой машине, называ-

Основные механизмы организации распределенных вычислений - student2.ru 346________________ Глава 10. Краткий обзор современных операционных систем

емой узлом, помимо ядра и менеджера процессов должен быть запущен уже упо­мянутый ранее менеджер Net. Менеджер Net не зависит от аппаратной реализа­ции сети. Эта аппаратная независимость обеспечивается за счет сетевых драйверов. В операционной системе QNX имеются драйверы для сетей с различными техно­логиями: Ethernet и FastEthernet, Arcnet, IBM Token Ring и др. Кроме того, имеет­ся возможность организации сети через последовательный канал или модем.

В QNX версии 4 полностью реализовано встроенное сетевое взаимодействие типа «точка-точка». Например, сидя за машиной А, вы можете скопировать файл с гиб­кого диска, подключенного к машине В, на жесткий диск, подключенный к маши­не С. По существу, сеть из машин с операционными системами QNX действует как один мощный компьютер. Любые ресурсы (модемы, диски, принтеры) могут быть добавлены к системе простым их подключением к любой машине в сети. QNX обес­печивает возможность одновременной работы в сетях Ethernet, Arcnet, Serial и To­ken Ring, более одного пути для связи и балансировку нагрузки в сетях. Если ка­бель или сетевая плата выходит из строя и связь через эту сеть прекращается, система автоматически перенаправит данные через другую сеть. Все это происходит в режиме подключения (on-line), предоставляя пользователю автоматическую се­тевую избыточность и увеличивая эффективность взаимодействия во всей системе.

Каждому узлу в сети соответствует уникальный целочисленный идентификатор — логический номер узла. Любой поток выполнения в сети QNX имеет прозрачный доступ (при наличии достаточных привилегий) ко всем ресурсам сети; то же самое относится и к взаимодействию потоков. Для взаимодействия потоков, находящихся на разных узлах сети, используются те же самые вызовы ядра, что и для потоков, выполняемых на одном узле. В том случае, если потоки находятся на разных узлах сети, ядро переадресует запрос менеджеру сети. Для обмена в сети используется надежный и эффективный протокол транспортного уровня FLEET. Каждый из узлов может принадлежать одновременно нескольким QNX-сетям. В том случае, если сетевое взаимодействие может быть реализовано несколькими путями, для передачи выбирается менее загруженная и более скоростная сеть.

Сетевое взаимодействие является узким местом в большинстве операционных систем и обычно создает значительные проблемы для систем реального времени. Для того чтобы обойти это препятствие, разработчики операционной системы QNX создали собственную специальную сетевую технологию FLEET и соответствую­щий протокол транспортного уровня FTL (FLEET Transport Layer). Этот прото­кол не базируется ни на одном из распространенных сетевых протоколов вроде IPX или NetBios и обладает рядом качеств, которые делают его уникальным. Ос­новные его качества зашифрованы в аббревиатуре FLEET, которая расшифровы­вается следующим образом:

- Fault-Tolerant Networking — QNX может одновременно использовать несколь­
ко физических сетей, при выходе из строя любой из них данные будут «на лету»
перенаправлены через другую сеть;

- Load-Balancing on the Fly — при наличии нескольких физических соединений
QNX автоматически распараллеливает передачу пакетов по соответствующим

сетям;

Основные механизмы организации распределенных вычислений - student2.ru Сетевая операционная система реального времени QNX______________________ 347

- Efficient Performance — специальные драйверы, разрабатываемые фирмой QSSL для широкого спектра оборудования, позволяют использовать это оборудова­ние с максимальной эффективностью;

- Extensable Architecture — любые новые типы сетей могут быть поддержаны путем добавления соответствующих драйверов;

- Transparent Distributed Processing — благодаря отсутствию разницы между пе­редачей сообщений в пределах одного узла и между узлами нет необходимости вносить какие-либо изменения в приложения, для того чтобы они могли взаи­модействовать через сеть.

Благодаря технологии FLEET сеть компьютеров с операционными системами QNX фактически можно представлять как один виртуальный суперкомпьютер. Все ре­сурсы любого из узлов сети автоматически доступны другим, и для этого не нужно создавать никаких дополнительных механизмов с использованием технологии RPC. Это значит, что любая программа может быть запущена на любом узле, при­чем ее входные и выходные потоки могут быть направлены на любое устройство на любых других узлах [18].

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

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

Когда ядро получает запрос на передачу данных процессу, находящемуся на уда­ленном узле, он переадресовывает этот запрос менеджеру Net, в подчинении кото­рого находятся драйверы всех сетевых карт. Имея перед собой полную картину состояния всего сетевого оборудования, Net может отслеживать состояние каж­дой сети и динамически перераспределять нагрузку между ними. В случае, когда одна из сетей выходит из строя, поток данных автоматически перенаправляется в другую доступную сеть, что очень важно при построении высоконадежных сис­тем. Кроме поддержки собственного протокола, Net обеспечивает передачу паке­тов TCP/IP, SMB (Server Message Block)' и многих других, используя то же сете-

Основные механизмы организации распределенных вычислений - student2.ru 1 Сетевая технология взаимодействия клиента и сервера, разработанная фирмой IBM и активно ис­пользуемая компанией Microsoft в своих операционных системах. В последнее время компания Microsoft стала называть ее CIFS (Common Internet File System).

Основные механизмы организации распределенных вычислений - student2.ru Основные механизмы организации распределенных вычислений - student2.ru 348________________ Глава 10, Краткий обзор современных операционных систем

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

При проектировании системы реального времени, как правило, необходимо обес­печить одновременное выполнение нескольких приложений. В QNX/Neutrino' параллельность выполнения достигается за счет использования потоковой модели POSIX, в которой процессы в системе представляются в виде совокупности пото­ков выполнения. Поток является минимальной единицей выполнения и диспет­черизации для ядра Neutrino; процесс определяет адресное пространство для по­токов. Каждый процесс состоит минимум из одного потока. Операционная система QNX предоставляет богатый набор функций для синхронизации потоков. В отли­чие от потоков, само ядро не подлежит диспетчеризации. Код ядра исполняется только в том случае, когда какой-нибудь поток вызывает функцию ядра, или при обработке аппаратного прерывания.

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

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

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

Основные механизмы организации распределенных вычислений - student2.ru ' Neutrino — один из проектов микроядерной ОС.

Основные механизмы организации распределенных вычислений - student2.ru Основные механизмы организации распределенных вычислений - student2.ru Сетевая операционная система реального времени QNX______________________ 349

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

Другие функции позволяют программе получать сообщения только тогда, когда она уже ожидает их приема, а не блокироваться до тех пор, пока не прибудет сооб­щение. Можно также транслировать сообщение другой задаче без изменения иден­тификатора передатчика. Задача, которая транслировала сообщение, в транзакции невидима.

Кроме того, операционная система QNX обеспечивает объединение сообщений в структуру данных, называемую очередью. Очередь сообщений — это просто область данных в третьей, отдельной задаче, которая временно принимает передаваемое со­общение и немедленно отвечает передатчику. В отличие от стандартной передачи сообщений, передатчик немедленно освобождается для того, чтобы продолжить свою работу. Задача администратора очереди — хранить в себе сообщение до тех пор, пока приемник не будет готов прочитать его; делает он это, запрашивая сообщение у ад­министратора очереди. Любое количество сообщений (ограничено только возмож­ностью памяти) может храниться в очереди. Сообщения хранятся и передаются в том порядке, в котором они были приняты. Может быть создано любое количество очередей. Каждая очередь идентифицируется своим именем.

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

Порт подобен флагу, известному всем задачам на одном и том же узле (но не на разных узлах). Он имеет только два состояния, которые могут трактоваться как «присоединить» и «освободить», хотя пользователь может интерпретировать их по-своему, например «занят» и «доступен». Порты используются для быстрой про­стой синхронизации между задачей и обработчиком прерываний устройства. Они нумеруются от нуля до 32 максимум (на некоторых типах узлов возможно и боль­ше). Первые 20 номеров зарезервированы для операционной системы.

С портом может быть выполнено три операции:

- присоединить порт,
- отсоединить порт,

- послать сигнал в порт.

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

Основные механизмы организации распределенных вычислений - student2.ru Основные механизмы организации распределенных вычислений - student2.ru 350________________ Глава 10. Краткий обзор современных операционных систем

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

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

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

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

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

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

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

Основные механизмы организации распределенных вычислений - student2.ru Семейство операционных систем OS/2 Warp компании IBM__________________351

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

Наши рекомендации