|
1.2.2.
Простейший случай взаимодействия двух
компьютеров
В самом простом случае взаимодействие
компьютеров может быть реализовано с помощью тех
же самых средств, которые используются для
взаимодействия компьютера с периферией,
например, через последовательный интерфейс RS-232C.
В отличие от взаимодействия компьютера с
периферийным устройством, когда программа
работает, как правило, только с одной стороны - со
стороны компьютера, в этом случае происходит
взаимодействие двух программ, работающих на
каждом из компьютеров.
Программа, работающая на одном компьютере, не
может получить непосредственный доступ к
ресурсам другого компьютера - его дискам, файлам,
принтеру. Она может только «попросить» об этом
программу, работающую на том компьютере,
которому принадлежат эти ресурсы. Эти «просьбы»
выражаются в виде сообщений, передаваемых
по каналам связи между компьютерами. Сообщения
могут содержать не только команды на выполнение
некоторых действий, но и собственно
информационные данные (например, содержимое
некоторого файла).
Рассмотрим случай, когда пользователю,
работающему с текстовым редактором на
персональном компьютере А, нужно прочитать часть
некоторого файла, расположенного на диске
персонального компьютера В (рис. 1.7). Предположим,
что мы связали эти компьютеры по кабелю связи
через СОМ-порты, которые, как известно, реализуют
интерфейс RS-232C (такое соединение часто называют
нуль-модемным). Пусть для определенности
компьютеры работают под управлением MS-DOS, хотя
принципиального значения в данном случае это не
имеет.
Рис. 1.7. Взаимодействие двух
компьютеров
Драйвер СОМ-порта вместе с контроллером
СОМ-порта работают примерно так же, как и в
описанном выше случае взаимодействия ПУ с
компьютером. Однако при этом роль устройства
управления ПУ выполняет контроллер и драйвер
СОМ-порта другого компьютера. Вместе они
обеспечивают передачу по кабелю между
компьютерами одного байта информации. (В
«настоящих» локальных сетях подобные функции
передачи данных в линию связи выполняются
сетевыми адаптерами и их драйверами.)
Драйвер компьютера В периодически опрашивает
признак завершения приема, устанавливаемый
контроллером при правильно выполненной передаче
данных, и при его появлении считывает принятый
байт из буфера контроллера в оперативную память,
делая его тем самым доступным для программ
компьютера В. В некоторых случаях драйвер
вызывается асинхронно, по прерываниям от
контроллера.
Таким образом, в распоряжении программ
компьютеров А и В имеется средство для передачи
одного байта информации. Но рассматриваемая в
нашем примере задача значительно сложнее, так
как нужно передать не один байт, а определенную
часть заданного файла. Все связанные с этим
дополнительные проблемы должны решить программы
более высокого уровня, чем драйверы СОМ-портов.
Для определенности назовем такие программы
компьютеров А и В приложением А и приложением В
соответственно. Итак, приложение А должно
сформировать сообщение-запрос для приложения В.
В запросе необходимо указать имя файла, тип
операции (в данном случае - чтение), смещение и
размер области файла, содержащей нужные данные.
Чтобы передать это сообщение компьютеру В,
приложение А обращается к драйверу СОМ-порта,
сообщая ему адрес в оперативной памяти, по
которому драйвер находит сообщение и затем
передает его байт за байтом приложению В.
Приложение В, приняв запрос, выполняет его, то
есть считывает требуемую область файла с диска с
помощью средств локальной ОС в буферную область
своей оперативной памяти, а далее с помощью
драйвера СОМ-порта передает считанные данные по
каналу связи в компьютер А, где они и попадают к
приложению А.
Описанные функции приложения А могла бы
выполнить сама программа текстового редактора,
но включать эти функции в состав каждого
приложения - текстовых редакторов, графических
редакторов, систем управления базами данных и
других приложений, которым нужен доступ к файлам,
- не очень рационально (хотя существует большое
количество программ, которые действительно
самостоятельно решают все задачи по
межмашинному обмену данными, например Kermit -
программа обмена файлами через СОМ-порты,
реализованная для различных ОС, Norton Commander 3.0 с его
функцией Link). Гораздо выгоднее создать
специальный программный модуль, который будет
выполнять функции формирования
сообщений-запросов и приема результатов для всех
приложений компьютера. Как уже было ранее
сказано, такой служебный модуль называется
клиентом. На стороне же компьютера В должен
работать другой модуль - сервер, постоянно
ожидающий прихода запросов на удаленный доступ к
файлам, расположенным на диске этого компьютера.
Сервер, приняв запрос из сети, обращается к
локальному файлу и выполняет с ним заданные
действия, возможно, с участием локальной ОС.
Программные клиент и сервер выполняют
системные функции по обслуживанию запросов
приложений компьютера А на удаленный доступ к
файлам компьютера В. Чтобы приложения компьютера
В могли пользоваться файлами компьютера А,
описанную схему нужно симметрично дополнить
клиентом для компьютера В и сервером для
компьютера А.
Схема взаимодействия клиента и сервера с
приложениями и операционной системой приведена
на рис. 1.8. Несмотря на то что мы рассмотрели очень
простую схему аппаратной связи компьютеров,
функции программ, обеспечивающих доступ к
удаленным файлам, очень похожи на функции
модулей сетевой операционной системы,
работающей в сети с более сложными аппаратными
связями компьютеров.
Рис. 1.8. Взаимодействие
программных компонентов при связи двух
компьютеров
Очень удобной и полезной функцией клиентской
программы является способность отличить запрос
к удаленному файлу от запроса к локальному файлу.
Если клиентская программа умеет это делать, то
приложения не должны заботиться о том, с каким
файлом они работают (локальным или удаленным),
клиентская программа сама распознает и перенаправляет
(redirect) запрос к удаленной машине. Отсюда и
название, часто используемое для клиентской
части сетевой ОС, - редиректор. Иногда
функции распознавания выделяются в отдельный
программный модуль, в этом случае редиректором
называют не всю клиентскую часть, а только этот
модуль.
|