Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 91
Текст из файла (страница 91)
По существу, сеть из машин с операционными системами QNX действует какодин мощный компьютер. Любые ресурсы (модемы, диски, принтеры) могут бытьдобавлены к системе простым их подключением к любой машине в сети. QNX обеспечивает возможность одновременной работы в сетях Ethernet, Arcnet, Serial и Token Ring, более одного пути для связи и балансировку нагрузки в сетях. Если кабель или сетевая плата выходит из строя и связь через эту сеть прекращается,система автоматически перенаправит данные через другую сеть.
Все это происходитв режиме подключения (on-line), предоставляя пользователю автоматическую сетевую избыточность и увеличивая эффективность взаимодействия во всей системе.Каждому узлу в сети соответствует уникальный целочисленный идентификатор —логический номер узла. Любой поток выполнения в сети QNX имеет прозрачныйдоступ (при наличии достаточных привилегий) ко всем ресурсам сети; то же самоеотносится и к взаимодействию потоков. Для взаимодействия потоков, находящихсяна разных узлах сети, используются те же самые вызовы ядра, что и для потоков,выполняемых на одном узле. В том случае, если потоки находятся на разных узлахсети, ядро переадресует запрос менеджеру сети.
Для обмена в сети используетсянадежный и эффективный протокол транспортного уровня FLEET. Каждый изузлов может принадлежать одновременно нескольким QNX-сетям. В том случае,если сетевое взаимодействие может быть реализовано несколькими путями, дляпередачи выбирается менее загруженная и более скоростная сеть.Сетевое взаимодействие является узким местом в большинстве операционныхсистем и обычно создает значительные проблемы для систем реального времени.Для того чтобы обойти это препятствие, разработчики операционной системы QNXсоздали собственную специальную сетевую технологию FLEET и соответствующий протокол транспортного уровня FTL (FLEET Transport Layer).
Этот протокол не базируется ни на одном из распространенных сетевых протоколов вродеIPX или NetBios и обладает рядом качеств, которые делают его уникальным. Основные его качества зашифрованы в аббревиатуре FLEET, которая расшифровывается следующим образом:Q Fault-Tolerant Networking — QNX может одновременно использовать несколько физических сетей, при выходе из строя любой из них данные будут «на лету»перенаправлены через другую сеть;• Load-Balancing on the Fly — при наличии нескольких физических соединенииQNX автоматически распараллеливает передачу пакетов по соответствующимсетям;Сетевая операционная система реального времени QNX347• Efficient Performance — специальные драйверы, разрабатываемые фирмой QSSLдля широкого спектра оборудования, позволяют использовать это оборудование с максимальной эффективностью;a Extensable Architecture — любые новые типы сетей могут быть поддержаныпутем добавления соответствующих драйверов;О Transparent Distributed Processing — благодаря отсутствию разницы между передачей сообщений в пределах одного узла и между узлами нет необходимостивносить какие-либо изменения в приложения, для того чтобы они могли взаимодействовать через сеть.Благодаря технологии FLEET сеть компьютеров с операционными системами QNXфактически можно представлять как один виртуальный суперкомпьютер.
Все ресурсы любого из узлов сети автоматически доступны другим, и для этого не нужносоздавать никаких дополнительных механизмов с использованием технологииRPC. Это значит, что любая программа может быть запущена на любом узле, причем ее входные и выходные потоки могут быть направлены на любое устройствона любых других узлах [18].Например, утилита make в операционной системе QNX автоматически распараллеливает компиляцию пакетов из нескольких модулей на все доступные узлы сети,а затем собирает исполняемый модуль по мере завершения компиляции на узлах.Специальный драйвер, входящий в комплект поставки, позволяет использоватьдля сетевого взаимодействия любое устройство, с которым может быть ассоциирован файловый дескриптор, например последовательный порт, что открываетвозможности для создания глобальных сетей.Достигаются все эти удобства за счет того, что поддержка сети частично обеспечивается и микроядром (специальный код в его составе позволяет операционнойсистеме QNX фактически объединять все микроядра в сети в одно ядро).
Разумеется, за такие возможности приходится платить тем, что мы не можем получитьдрайвер для какой-либо сетевой платы от кого-либо еще, кроме фирмы QSSL,то есть использоваться может только то оборудование, которое уже поддерживается. Однако ассортимент такого оборудования достаточно широк и периодически пополняется новейшими устройствами.Когда ядро получает запрос на передачу данных процессу, находящемуся на удаленном узле, он переадресовывает этот запрос менеджеру Net, в подчинении которого находятся драйверы всех сетевых карт.
Имея перед собой полную картинусостояния всего сетевого оборудования, Net может отслеживать состояние каждой сети и динамически перераспределять нагрузку между ними. В случае, когдаодна из сетей выходит из строя, поток данных автоматически перенаправляетсяв другую доступную сеть, что очень важно при построении высоконадежных систем. Кроме поддержки собственного протокола, Net обеспечивает передачу пакетов TCP/IP, SMB (Server Message Block) 1 и многих других, используя то же сетеСетевая технология взаимодействия клиента и сервера, разработанная фирмой IBM и активно используемая компанией Microsoft в своих операционных системах. В последнее время компанияMicrosoft стала называть ее CIFS (Common Internet File System).348Глава 10.
Краткий обзор современных операционных системвое оборудование. При этом производительность компьютеров с операционнойсистемой QNX в сети приближается к производительности аппаратного обеспечения — настолько малы задержки, вносимые операционной системой.При проектировании системы реального времени, как правило, необходимо обес1печить одновременное выполнение нескольких приложений. В QNX/Neutrinoпараллельность выполнения достигается за счет использования потоковой моделиPOSIX, в которой процессы в системе представляются в виде совокупности потоков выполнения.
Поток является минимальной единицей выполнения и диспетчеризации для ядра Neutrino; процесс определяет адресное пространство для потоков. Каждый процесс состоит минимум из одного потока. Операционная системаQNX предоставляет богатый набор функций для синхронизации потоков. В отличие от потоков, само ядро не подлежит диспетчеризации. Код ядра исполняетсятолько в том случае, когда какой-нибудь поток вызывает функцию ядра, или приобработке аппаратного прерывания.Напомним, что операционная система QNX базируется на концепции передачисообщений.
Передачу и диспетчеризацию сообщений осуществляет ядро системы.Кроме того, ядро управляет временными прерываниями. Выполнение остальныхфункций обеспечивается задачами-администраторами. Программа, желающая создать задачу, посылает сообщение администратору задач (модуль task) и блокируется для ожидания ответа.
Если новая задача должна выполняться одновременнос порождающей ее задачей, администратор задач task создает ее и, отвечая, выдаетпорождающей задаче идентификатор созданной задачи. В противном случае никакого сообщения не посылается до тех пор, пока новая задача не закончится самапо себе. Тогда в ответе администратора задач будут содержаться конечные характеристики закончившейся задачи.Сообщения различаются количеством данных, которые передаются от одной задачи точно к другой задаче. Данные копируются из адресного пространства первойзадачи в адресное пространство второй, и выполнение первой задачи приостанавливается до тех пор, пока вторая задача не вернет ответное сообщение.
В действительности обе задачи кратковременно взаимодействуют во время выполнения передачи. Ничто, кроме длины сообщения (максимальная длина может достигать64 Кбайт), не заботит QNX при передаче сообщения. Существует несколько протоколов, которые могут быть использованы для этой цели.Основные операции над сообщениями: послать, получить и ответить, а такженесколько их вариантов для обработки специальных ситуаций.
Получатель всегдаидентифицируется своим идентификатором задачи, хотя существуют способы ассоциировать имена с идентификатором задачи. Наиболее интересные вариантыопераций включают в себя возможность получать (копировать) только первуючасть сообщения, а затем получать оставшуюся часть такими кусками, какие потребуются. Это может быть полезным, поскольку позволяет сначала узнать длинусообщения, а затем динамически распределить принимающий буфер. Если необходимо задержать ответное сообщение до тех пор, пока не будет получено и обраNeutrino — один из проектов микроядерной ОС.Сетевая операционная система реального времени QNX349ботано другое сообщение, то чтение первых нескольких байтов дает вам компактный «обработчик», через который позже можно получить доступ ко всему сообщению.
Таким образом, задача оказывается избавленной от необходимости хранить всебе большое количество буферов.Другие функции позволяют программе получать сообщения только тогда, когдаона уже ожидает их приема, а не блокироваться до тех пор, пока не прибудет сообщение. Можно также транслировать сообщение другой задаче без изменения идентификатора передатчика. Задача, которая транслировала сообщение, в транзакцииневидима.Кроме того, операционная система QNX обеспечивает объединение сообщенийв структуру данных, называемую очередью.
Очередь сообщений — это просто областьданных в третьей, отдельной задаче, которая временно принимает передаваемое сообщение и немедленно отвечает передатчику. В отличие от стандартной передачисообщений, передатчик немедленно освобождается для того, чтобы продолжить своюработу. Задача администратора очереди — хранить в себе сообщение до тех пор, покаприемник не будет готов прочитать его; делает он это, запрашивая сообщение у администратора очереди.