Теория и практика программирования на Си в Unix

       

IP представляют собой два фактических


UNIX и TCP/ IP представляют собой два фактических стандарта.
Основной активной единицей системы UNIX является процесс. Процессы создаются системным вызовом fork (), идентифициру- ются номером PID и принадлежат группе процессов. Процессу или группе процессов можно послать сигнал, являю- щийся программным прерыванием. Необходимо отличать вводы-выводы в режиме буферизации (ис- пользование стандартной библиотеки Си) и вводы выводы без буферизации (использование библиотеки UNIX). Протоколы TCP/IP предлагают два вида транспортных услуг:
- TCP/IP: с установлением логического соединения, позволяющий вести надежный обмен байтовыми потоками;
- UDP: без установления логического соединения, позволяющий вести ненадежный обмен сообщениями. Служба определяется номером порта (идентификатор с целым значением).
Для установления связи с удаленной службой необходимо определить или знать адрес Internet удаленной машины и номер порта службы. TCP включает в себя буферизации.БИБЛИОГРАФИЯ
Источником вдохновения при написании данной главы служила [STEVENS 90].
Для тех, кто хотел бы узнать побольше о концепциях и реали- зации UNIX в качестве справочных руководств рекомендуется [BACH 89] и [LEFFLER 89].
Описанию основных понятий UNIX посвящено довольно много руководств :
[KERNIGHAN 86],[RIFFLET 89],[ROCKIND 88],[RIFFLET 90],[CURRY 90] ...
Что касается TCP/IP - то, в качестве введения можно использовать RFC
[ZEBR_TAG_td ALign="Left" vAlign="TOP">

Целью распределенной обработки данных является выполнение обработки наиболее приспособленным для этого процессором. Распределение не подразумевает параллелизма, но возможность "распараллелить" распределенную обработку существует. Мы ввели основные понятия, о которых в дальнейшем будет рассказано более подробно:
- распределенная, или разделенная, или совместно выполняемая программа: выполнение программы двумя и более машинами, объединенными в сеть;
- пользователю безразлично местоположение различных ресурсов, необходимых для успешного выполнения программы, которую он выполняет со своего рабочего места;
- модель "клиент-сервер" (initiator-responder по терминологии OSI): клиентом является процесс, запрашивающий услуги у сервера, причем этот второй процесс может находиться на том же компьютере, а может и нет.

Интерфейссокет или TLI:интерфейс выше TCP или UDP
XDR:представление данных
RPC,NCS: вызов удаленных процедур
NFS,RFS:управление распределением файлов
X11:работа с окнами
Рис 2.6. Средства и услуги TCP



[ZEBR_TAG_td ALign="Left" vAlign="TOP">


Как осуществить выбор из различных внутрисистемных IPC? Большинство механизмов поддерживают работу в стиле "производитель-потребитель" (программные каналы, именованные программные каналы, файлы-сообщения). Только общая память обеспечивает неразрушающее считывание. Часто бывает достаточно именованных программных каналов (самых простых в пользовании IPC). Файлы-сообщения обеспечивают возможность отбора по типу. Использование общей памяти следует оставить для случаев, когда это необходимо из соображений эффективности. Запуск удаленного процесса можно осуществить с помощью функций system (), popen () или rexec ().
[ZEBR_TAG_td ALign="Left" vAlign="TOP">


Сокеты представляют собой интерфейс входа в сеть - надстройку транспортной службы. Термин "сокет" обозначает одновременно библиотеку функций и точку входа в канал связи, то есть дескриптор, полученный посредством примитива socket (). Программирование сокетов заключается в комбинировании определенного числа примитивов для считывания или записи потока байтов или сообщений. Сокеты позволяют входить в сеть, как в файл. Этот интерфейс гибкий, но достаточно низкого уровня. Существуют два режима его применения, в зависимости от использования сокетов типа SOCK_STREAM или SOCK_DGRAM. В первом случае устанавливается соединение с TCP, во втором, работа идет с UDP в режиме дейтаграмм. Для упрощения программирования сокетов можно создать библиотеку более высокого уровня, позволяющего передавать простые типы данных (целые, с плавающей запятой, символы, массивы...). Можно обеспечить доступ к базе данных посредством программных продуктов, использующих сокеты (программные средства SQL), причем применение этих продуктов прозрачно для пользователя.
[ZEBR_TAG_td ALign="Left" vAlign="TOP">


Как и сокет-интерфейс, библиотека TLI позволяет расширить механизмы межпроцессной коммуникации с одной машины на несколько машин, связанных в сеть. TLI представляет собой интерфейс - надстройку над транспортным уровнем, представляющий три группы примитивов:
- примитивы управления, позволяющие определение и присвоение имен точкам коммуникации и согласование опций протоколов связи;
- примитивы коммуникации с установлением соединения;
- примитивы коммуникации без установления соединения.
Ввод и вывод модулей делают механизм STREAMS хорошо приспособленным к разработке средств коммуникации и ,особенно, сете-вых протоколов. Один протокол можно легко заменить на другой, в той степени, в какой эти протоколы имеют равнозначный интерфейс и семантику услуг. Один и тот же модуль может быть повторно использован при конструировании различных служб. Библиотека TLI более полная, чем сокет-интерфейс, но и несколько более сложная в реализации. Она интересна тем, что позволяет писать программы, независимые от используемой транспортной службы. Кроме того, она освобождает программиста от системного интерфейса STREAMS и от вызовов, контролирующих протекание процесса (в частности, сигналов). Ее использование будет расширяться в зависимости от желания разработчиков соответствовать стандарту. TLI использовалась группой X/Open под именем XTI (X/Open Transport Interface).
[ZEBR_TAG_td ALign="Left" vAlign="TOP">


NFS обеспечивает прозрачный доступ к удаленным файловым сис- темам, расположенным на разнотиповых машинах. NFS использует RPC (Remote Procedure Call) для обеспечения диалога между кли- ентом и сервером и XDR (eXternal Data Representation) для об- мена данными, связанными с протоколом. Что касается нижних уровней протокола, текущие версии NFS используют UDP. Производительность : от 200 до 600 К/сек при чтении и от 50 до 100 К/сек при записи.
Отслеживающая программа lockd позволяет управлять одновре- менным доступом к файлам или записям.
Несмотря на свои недостатки, NFS - это технологически зрелый продукт, удобный как для пользователей, так и для администраторов рабочих станций UNIX.
[ZEBR_TAG_td ALign="Left" vAlign="TOP">


RFS (Remote File Sharing) - система разделения ресурсов, разработанная AT&T и используемая, в частности, фирмой Sun. RFS позволяет обрабатывать файлы и/или периферийные устройства (кассетные накопители,принтеры,модемы ...), расположенные на удаленных машинах так, как если бы они были локальными. Кроме того, RFS позволяет разделять специальные файлы UNIX (именованные каналы), которые можно использовать для взаимодействия двух удаленных процессов в сети. По сравнению с NFS, RFS имеет то преимущество, что позволяет разделять периферийные устройства и специальные файлы. Кроме того, RFS, в отличие от NFS, адресует устройства не физически, а по имени. Сервер имен преобразует имя в адрес. С другой стороны, восстановление в случае сбоя является менее тонким, а производительность более низкой (при чтении), чем у NFS. RFS, таким образом, можно использовать в качестве дополнения к NFS. Эти два продукта могут сосуществовать в одной системе
[ZEBR_TAG_td ALign="Left" vAlign="TOP">


X Window - это распределенный, многооконный, графический интерфейс пользователя, очень распространенный в среде пользователей UNIX. Механизмы реализации используют модель клиент-сервер и асинхронные коммуникации. Клиент - это прикладная программа. Сервер - это программа, которая контролирует и управляет интерфейсом изображения (дисплеем). Она, таким образом, отвечает за вывод на экран, управление мышкой и клавиатурой и за отслеживанием действий пользователя.
X Window - это мощное инструментальное средство, позволяющее разрабатывать прикладные программы. Прикладные программы могут, к примеру, выполняться на обрабатывающем сервере (сервере вычислений) и управлять выводом изображений на экран и взаимодействием с пользователем на графической рабочей станции.
X Window - используется для управления двумерной графикой. Использовать третье измерение позволяет РЕХ. РЕХ предлагает те же возможности, что и X Window, а кроме того дополнительные возможности PHIGS 3D. В настоящее время начинают появляться реализации PEX. Так, например, X11R5 содержит PEX SI (Simple Implementation - Простая реализация), который управляет структурами PHIGS на сервере. Однако существуют и альтернативные возможности, позволяющие распределить трехмерные графические библиотеки.
[ZEBR_TAG_td ALign="Left" vAlign="TOP">


XDR - это стандарт представления, который позволяет представить данные независимо от архитектуры машины.
Библиотека XDR - это совокупность функций языка Си, преобразующих данные из внутреннего локального представления в представление XDR и обратно. Использование XDR влечет за собой необходимость кодирования в формат XDR на станции-передатчике данных и декодирования на станции-приемнике.
Поток XDR - это последовательность байтов, где данные представлены в формате XDR. Фильтр XDR - это процедура, кодирующая или декодирующая определенный тип данных (целые, с плавающей точкой, массивы ...). Уже существующие фильтры можно комбинировать с целью создать новые. Самый простой способ создать новый фильтр для сложных данных - это использование препроцессора RPCGEN. Есть возможность комбинировать сокеты и XDR :
- поток памяти с сокетами UDP - поток записей с сокетами TCP.
[ZEBR_TAG_td ALign="Left" vAlign="TOP">

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