Сетевой диспетчер (Network Manager), который взаимодействует непосредственно с микроядром, расширяет его функциональность таким образом, что механизм взаимодействия процессов (то есть обмен сообщениями) становится прозрачным для приложений в сетевом отношении, то есть данный компонент ответственен за организацию передачи сообщений между процессами, исполняющимися на разных узлах.
Микроядро и менеджер процессов взаимодействуют с сетевым диспетчером посредством специальной области памяти, доступ к которой осуществляется неблокирующим образом. Содержимое этой области представляет собой очередь передач, которые должен осуществить сетевой диспетчер.
Для обеспечения взаимодействия процессов по сети ОС QNX использует виртуальные цепи (virtual circuits), с каждой из которых связан некоторый буфер. Память под такой буфер выделяется при создании виртуальной цепи; буфер содержит данные, которые подлежат передаче на другой узел.
На рисунке ниже показаны потоки данных и последовательность, в которой соответствующие подсистемы ОС QNX получают управление при посылке сообщения на удаленный узел (или ответе на сообщение):
Далее приведены этапы посылки сообщения (ответа на сообщение):
На следующем рисунке показаны схема движения данных и передачи управления при приеме сообщения:
Прием сообщения происходит в следующей последовательности:
Сетевой диспетчер (так же как и диспетчеры устройств и файловой системы) не содержит кода, привязанного к конкретной модели сетевого интерфейса. Весь такой код помещет в драйверы сетевых интерфейсов. Взаимодействие между сетевым диспетчером и такими драйверами осуществляется через очереди, размещаемые в области памяти, доступной как диспетчеру, так и драйверам. На драйвера сетевых интерфейсов возлагаются следующие задачи: формирование пакетов (packetization), обеспечение правильного порядка пакетов (sequencing), а также осуществление ретрансмиссий в случае, если необходима надежная передача данных с гарантированной доставкой.
Каждый узел в сети QNX идентифицируется двумя числами: физический идентификатор и логический идентификатор. Физический идентификатор - это синоним MAC-адреса. Логический идентификатор состоит, в свою очередь, также из двух чисел - логического идентификатора сети и логического индентификатора узла в этой сети.
Необходимость введения логического идентификатора обусловлена следующими недостатками идентификатора физического. Во-первых, при соединении двух или более сетей может возникнуть конфликт. Ээто актуально не для всех сетевых технологий - так, для Ethernet, где MAC-адрес уникален в мировом масштабе, проблема конфликта физических адресов не может возникнуть. Для технологий, где на физический адрес узла отведено 1-2 байта, эта проблема может возникнуть (например, Arcnet - на идентификатор сетевого интерфейса такого типа отведено всего 8 бит). Во-вторых, при соединении сетей эти сети могут оказаться в смысле используемой технологии передачи данных (Ethernet, Token Ring, Arcnet и т.д.)
Логический идентификатор (узла или сети) - это целое число, назначаемое администратором системы. Как правило, номера узлов назначаются последовательно, начиная с 1. Номер 0 зарезервирован для обозначения локального узла. Взаимное отображение физических и логических адресов производится сетевыми диспетчерами.
Если узел входит в несколько сетей, то сетевой диспетчер обеспечивает, во-первых, балансировку загрузки сетей и, во-вторых, повышенную отказоустойчивость.
Дата последней модификации: 2009-07-25