Операционная система QNX 4.Архитектура системы

Интерфейс Микроядро/Сетевой администратор


Ядро и Администратор процессов взаимодействуют с Сетевым администратором через специальную неблокирующую очередь в памяти. Фактически эта очередь представляет собой список передач, которые должен выполнить Сетевой администратор. Элементы очереди содержат всю информацию для конкретных операций (например, Send(), Reply(), создание виртуального канала, передача сигнала на другой узел и т.д.).

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

На рис.26 представлены потоки данных и управляющих воздействий при передаче сообщений удаленным узлам.

Процесс выдает Send() или Reply() удаленному узлу

Рис. 26

В случае выдачи Send() или Reply() на удаленный узел, происходят следующие действия:

  1. Процесс вызывает функции Send() или Reply(), после чего ядро копирует данные из адресного пространства процесса в буфер соответствующего виртуального канала (ВК), определенного функцией Send() или Reply();
  2. Ядро ставит заявку в очередь к Сетевому администратору в порядке времени ее поступления, указывая в ней отправителя, удаленного получателя и указатели на данные в буфере виртуального канала. Если до этого очередь была пуста, то запускается proxy Cетевого администратора, оповещая его о том, что появилась работа;
  3. Сетевой администратор принимает заявку из очереди;
  4. Сетевой администратор начинает передачу по сети. Он отвечает за доставку.

В случае передачи сигнала или создании ВК заявку в очередь ставит не ядро, а Администратор процессов. При этом Сетевой администратор обеспечивает передачу информации по назначению таким же образом.

На рис. 27 представлены потоки данных и управляющих воздействий при приеме сообщений от удаленного узла.

Процесс принимает Send() или Reply() от удаленного узла.

Рис. 27

Если удаленный узел послал сообщение так, как это было описано выше, то на узле, принимающем сообщение, будет происходить следующее:

  1. По сети поступают данные;
  2. Сетевой администратор копирует данные сообщения в соответствующий буфер виртуального канала;
  3. Сетевой администратор оповещает ядро о завершении приема;
  4. Ядро копирует данные из буфера виртуального канала в буфер процесса (предполагая, что он был RECEIVE- или REPLY-блокирован).

Любые управляющие сообщения, принимаемые Сетевым администратором, немедленно передаются Администратору процессов посредством стандартной функции Send(). Эти управляющие сообщения используются для передачи сигналов и создания ВК.



Содержание раздела