Ранее было показано, каким образом взаимодействуют между собой процессы,
протекающие на разных машинах, при этом обращалось внимание на то, что
способы реализации взаимодействия могут быть различаться в зависимости от
используемых протоколов и сетевых средств. Более того, эти способы не
всегда применимы для обслуживания взаимодействия процессов, выполняющихся
на одной и той же машине, поскольку в них предполагается существование
обслуживающего (серверного) процесса, который при выполнении функций
open
или read
будет приостанавливаться драйвером. В целях
создания более универсальных методов взаимодействия процессов на основе
использования многоуровневых сетевых протоколов для системы BSD был
разработан механизм, получивший название ``sockets'' (гнезда). Рассмотрим
некоторые аспекты применения гнезд (на пользовательском уровне
представления).
Модель с использованием гнезд.
Процесс-клиент Процесс-сервер
| |
+--+ +--+
+-------------------------+--+ +--+--------------------------+
| Уровень гнезд | | Уровень гнезд |
+-------------------------+--+ +--+--------------------------+
| TCP | | TCP |
| Уровень протоколов | | | | Уровень протоколов |
| IP | | IP |
+-------------------------+--+ +--+--------------------------+
| Драйвер| | Драйвер |
| Уровень устройств Ethernet| |Ethernet Уровень устройств |
+-------------------------+--+ +--+--------------------------+
+---+ +---+
| |
С е т ь
Структура ядра имеет три уровня: гнезд, протоколов и устройств (рисунок). Уровень гнезд выполняет функции интерфейса между обращениями к операционной системе (системным функциям) и средствами низких уровней, уровень протоколов содержит модули, обеспечивающие взаимодействие процессов (на рисунке упомянуты протоколы TCP и IP), а уровень устройств содержит драйверы, управляющие сетевыми устройствами. Допустимые сочетания протоколов и драйверов указываются при построении системы (в секции конфигурации); этот способ уступает по гибкости вышеупомянутому потоковому механизму. Процессы взаимодействуют между собой по схеме клиент-сервер: сервер ждет сигнала от гнезда, находясь на одном конце дуплексной линии связи, а процессы-клиенты взаимодействуют с сервером через гнездо, находящееся на другом конце, который может располагаться на другой машине. Ядро обеспечивает внутреннюю связь и передает данные от клиента к серверу.