- •1.1. Эволюция вычислительных систем
- •Системы пакетной обработки
- •Многотерминальные системы - прообраз сети
- •Появление глобальных сетей
- •Первые локальные сети
- •Создание стандартных технологий локальных сетей
- •Современные тенденции
- •Многомашинные системы
- •1.2. Вычислительные сети - частный случай распределенных систем
- •Мультипроцессорные компьютеры
- •Связь компьютера с периферийными устройствами
- •1.2.2. Простейший случай взаимодействия двух компьютеров
- •Топология физических связей
- •Адресация узлов сети
- •Как это выглядит в сетях
- •Установление соответствия между адресами
- •Обобщенная задача коммутации
- •Определение информационных потоков
- •Определение маршрутов
- •Оповещение сети о выбранном маршруте
- •Продвижение — распознавание потоков и коммутация на каждом транзитном узле
- •Мультиплексирование и демультиплексирование
- •Коммутация каналов и коммутация пакетов
- •Виртуальные каналы в сетях с коммутацией пакетов
- •Декомпозиция задачи сетевого взаимодействия
- •Протокол. Интерфейс. Стек протоколов
- •Модель osi Общая характеристика модели osi
- •Физический уровень
- •Канальный уровень
- •Функции канального уровня
- •Сетевой уровень
- •Транспортный уровень
- •Сеансовый уровень
- •Представительный уровень
- •Прикладной уровень
- •Сетезависимые и сетенезависимые уровни
- •3.2. Алгоритмы доступа к среде
- •3.3. Сети Token Ring и fddi.
- •3.5. Устройства сетей Ethernet
- •Стандартные стеки коммуникационных протоколов
1.2.2. Простейший случай взаимодействия двух компьютеров
В
самом простом случае взаимодействие
компьютеров может быть реализовано с
помощью тех же самых средств, которые
используются для взаимодействия
компьютера с периферией, например, через
последовательный интерфейс RS-232C. В
отличие от взаимодействия компьютера
с периферийным устройством, когда
программа работает, как правило, только
с одной стороны - со стороны компьютера,
в этом случае происходит взаимодействие
двух программ, работающих на каждом из
компьютеров.
Программа,
работающая на одном компьютере, не может
получить непосредственный доступ к
ресурсам другого компьютера - его дискам,
файлам, принтеру. Она может только
"попросить" об этом программу,
работающую на том компьютере, которому
принадлежат эти ресурсы. Эти "просьбы"
выражаются в виде сообщений,
передаваемых по каналам связи между
компьютерами. Сообщения могут содержать
не только команды на выполнение некоторых
действий, но и собственно информационные
данные (например, содержимое некоторого
файла).
Рассмотрим
случай, когда пользователю, работающему
с текстовым редактором на персональном
компьютере А, нужно прочитать часть
некоторого файла, расположенного на
диске персонального компьютера В (рис.
1.7).
Рис. 1.7. Взаимодействие двух компьютеров
Предположим, что мы связали эти компьютеры по кабелю связи через COM-порты, которые, как известно, реализуют интерфейс RS-232C (такое соединение часто называют нуль-модемным). Пусть для определенности компьютеры работают под управлением MS-DOS, хотя принципиального значения в данном случае это не имеет. Драйвер COM-порта вместе с контроллером COM-порта работают примерно так же, как и в описанном выше случае взаимодействия ПУ с компьютером. Однако при этом роль устройства управления ПУ выполняет контроллер и драйвер СОМ-порта другого компьютера. Вместе они обеспечивают передачу по кабелю между компьютерами одного байта информации. (В "настоящих" локальных сетях подобные функции передачи данных в линию связи выполняются сетевыми адаптерами и их драйверами.) Драйвер компьютера В периодически опрашивает признак завершения приема, устанавливаемый контроллером при правильно выполненной передаче данных, и при его появлении считывает принятый байт из буфера контроллера в оперативную память, делая его тем самым доступным для программ компьютера В. В некоторых случаях драйвер вызывается асинхронно, по прерываниям от контроллера.
Таким образом, в распоряжении программ компьютеров А и В имеется средство для передачи одного байта информации. Но рассматриваемая в нашем примере задача значительно сложнее, так как нужно передать не один байт, а определенную часть заданного файла. Все связанные с этим дополнительные проблемы должны решить программы более высокого уровня, чем драйверы COM-портов. Для определенности назовем такие программы компьютеров А и В приложением А и приложением В соответственно. Итак, приложение А должно сформировать сообщение-запрос для приложения В. В запросе необходимо указать имя файла, тип операции (в данном случае - чтение), смещение и размер области файла, содержащей нужные данные.
Чтобы передать это сообщение компьютеру В, приложение А обращается к драйверу СОМ-порта, сообщая ему адрес в оперативной памяти, по которому драйвер находит сообщение и затем передает его байт за байтом приложению В. Приложение В, приняв запрос, выполняет его, то есть считывает требуемую область файла с диска с помощью средств локальной ОС в буферную область своей оперативной памяти, а далее с помощью драйвера COM-порта передает считанные данные по каналу связи в компьютер А, где они и попадают к приложению А.
Описанные функции приложения А могла бы выполнить сама программа текстового редактора, но включать эти функции в состав каждого приложения - текстовых редакторов, графических редакторов, систем управления базами данных и других приложений, которым нужен доступ к файлам, - не очень рационально (хотя существует большое количество программ, которые действительно самостоятельно решают все задачи по межмашинному обмену данными, например Kermit - программа обмена файлами через COM-порты, реализованная для различных ОС, Norton Commander 3.0 с его функцией Link). Гораздо выгоднее создать специальный программный модуль, который будет выполнять функции формирования сообщений-запросов и приема результатов для всех приложений компьютера. Как уже было ранее сказано, такой служебный модуль называется клиентом. На стороне же компьютера В должен работать другой модуль - сервер, постоянно ожидающий прихода запросов на удаленный доступ к файлам, расположенным на диске этого компьютера. Сервер, приняв запрос из сети, обращается к локальному файлу и выполняет с ним заданные действия, возможно, с участием локальной ОС. Программные клиент и сервер выполняют системные функции по обслуживанию запросов приложений компьютера А на удаленный доступ к файлам компьютера В. Чтобы приложения компьютера В могли пользоваться файлами компьютера А, описанную схему нужно симметрично дополнить клиентом для компьютера В и сервером для компьютера А. Схема взаимодействия клиента и сервера с приложениями и операционной системой приведена на рис. 1.8. Несмотря на то что мы рассмотрели очень простую схему аппаратной связи компьютеров, функции программ, обеспечивающих доступ к удаленным файлам, очень похожи на функции модулей сетевой операционной системы, работающей в сети с более сложными аппаратными связями компьютеров.
Рис. 1.8. Взаимодействие программных компонентов при связи двух компьютеров
Очень удобной и полезной функцией клиентской программы является способность отличить запрос к удаленному файлу от запроса к локальному файлу. Если клиентская программа умеет это делать, то приложения не должны заботиться о том, с каким файлом они работают (локальным или удаленным), клиентская программа сама распознает и перенаправляет (redirect) запрос к удаленной машине. Отсюда и название, часто используемое для клиентской части сетевой ОС, - редиректор. Иногда функции распознавания выделяются в отдельный программный модуль, в этом случае редиректором называют не всю клиентскую часть, а только этот модуль.
