Сетевое ПО Лекция 11 (1061300), страница 2
Текст из файла (страница 2)
Однако, по своему внешнемуинтерфейсу потоковые драйверы не отличаются от символьных.1.4 Блочные драйверыБлочные драйверы предназначаютсядляобслуживаниявнешнихустройств с блочной структурой (магнитных дисков, лент и т.д.) и отличаются6Сетевое ПО. Лекция 11 (2014 г.)от прочих тем, что они разрабатываются и выполняются с использованиемсистемной буферизации. Другими словами, такие драйверы всегда работаютчерез системный буферный пул.Любое обращение к блочному драйверу для чтения или записи всегдапроходит через предварительную обработку, которая заключается в попыткенайти копию нужного блока в буферном пуле.В случае, если копия требуемого блока не находится в буферном пулеили если по какой-либо причине требуется заменить содержимое некоторогообновленного буфера, ядро ОС UNIX обращается к процедуре strategyсоответствующего блочного драйвера.Strategy обеспечивает стандартный интерфейс между ядром и драйвером.Сиспользованиембиблиотечныхподпрограмм,предназначенныхдлянаписания драйверов, процедура strategy может организовывать очередиобменов с устройством, например, с целью оптимизации движения магнитныхголовок на диске.
Все обмены, выполняемые блочным драйвером, выполняютсясбуфернойпамятью.Переписьнужнойинформациивпамятьсоответствующего пользовательского процесса производится программамиядра, заведующими управлением буферами.1.5 Символьные драйверыСимвольные драйверыглавнымобразомпредназначеныдляобслуживания устройств, обмены с которыми выполняются посимвольно, либостроками символов переменного размера. Типичным примером символьногоустройства является простой принтер, принимающий один символ за одинобмен.Символьные драйверы не используют системную буферизацию. Онинапрямую копируют данные из памяти пользовательского процесса привыполнении операций записи или в память пользовательского процесса привыполнении операций чтения, используя собственные буфера.Следует отметить, что имеется возможность обеспечить символьныйинтерфейс для блочного устройства.7Сетевое ПО.
Лекция 11 (2014 г.)Вэтомвозможностислучаеблочныйпроцедурыдрайверstrategy,используетпозволяющиедополнительныевыполнятьобмен безприменения системной буферизации.Для драйвера, обладающего одновременно блочным и символьныминтерфейсами, в файловой системе заводится два специальных файла, блочныйи символьный. При каждом обращении драйвер получает информацию о том, вкаком режиме он используется.1.6 Потоковые драйверыОсновным назначением механизма потоков (streams) является повышениеуровня модульности и гибкости драйверов со сложной внутренней логикой(более всего это относится к драйверам, реализующим развитые сетевыепротоколы).
Спецификой таких драйверов является то, что большая частьпрограммного кода не зависит от особенностей аппаратного устройства. Болеетого,частооказываетсявыгоднопо-разномукомбинироватьчастипрограммного кода.Все это привело к появлению потоковой архитектуры драйверов, которыепредставляют собой двунаправленный конвейер обрабатывающих модулей. Вначале конвейера (ближе всего к пользовательскому процессу) находитсязаголовок потока, к которому прежде всего поступают обращения поинициативе пользователя. В конце конвейера (ближе всего к устройству)находится обычный драйвер устройства.
В промежутке может располагатьсяпроизвольноечислообрабатывающихмодулей,каждыйизкоторыхоформляется в соответствии с обязательным потоковым интерфейсом.2 Поддержка сети в операционной системе UNIX2.1 Базовые механизмыДля взаимодействия распределенных приложений в среде ОС UNIXнаибольшее распространение получили следующие три средства(рис. 3):1.socket - интерфейс прикладной программы с модулем из составаОС, реализующим сетевое взаимодействие(рис. 4);8Сетевое ПО.
Лекция 11 (2014 г.)2.интерфейс транспортного уровня (TLI - Transport LevelInterface)(рис. 5 -8);3.средства удаленного вызова процедур (RPC - Remote ProcedureCall)(рис. 9).Примечание. Перечисленные средства программирования универсальны,и могут быть использованы для работы с различными протоколами сетевоговзаимодействия,однаковданномслучаеонирассматриваютсяприменительно только к протоколам TCP/IP.Рассматриваемыесредствапредназначеныдлясозданияраспределенных приложений, функционирующих, в первую очередь, согласномодели взаимодействия "клиент-сервер".
Одна программа-сервер можетобслуживать (последовательно) несколько клиентов, организуя очередьзапросов от них.Двумянаиболееобщимирежимамивзаимодействияприкладныхпрограмм в вычислительной сети являются:1. режим с установлением соединения;2. режим без установления соединения.Режим с установлением соединения подразумевает, что взаимодействиеосуществляется в три этапа:• установление логической связи между прикладными программами (поинициативе клиента);• двусторонний, последовательный (потоковый, без учета каких-либограниц записей), надежный (без потери и дублирования) обмен данными;• закрытие связи (экстренное или с доставкой буферизованных напередающей стороне данных).В режиме без установления соединения обмен информацией ведетсяотдельнымиблокамиданных,частоназываемыхдейтаграммамиисодержащими в себе помимо собственно данных еще и адрес их получателя(соответственно, клиента или сервера).
В этом режиме, как правило, негарантируется надежность доставки данных (они могут быть потеряны или9Сетевое ПО. Лекция 11 (2014 г.)продублированы), может быть нарушена правильная последовательностьдейтаграмм на принимающей стороне, но, очевидно, явно присутствуютграницы в передаваемых данных.Программистимеетвозможностьвыбратьрежимвзаимодействия, отвечающий специфике создаваемого приложения.В сетях ТСР/IP для организации режимавзаимодействияслогическим соединением используется протокол транспортного уровняTCP, а режима без установления соединения -протокол UDP.2.1.1 Socket-интерфейсДанноесредствобылопервоначальноразработанодляобеспечения прикладным программистам в среде ОС UNIX доступа ктранспортному уровню стека протоколов ТСР/IP.
Позже оно былоадаптировано для использования иных протоколовSocket (гнездо, разъем) - абстрактное программное понятие, используемоедля обозначения в прикладной программе конечной точки канала связи скоммуникационнойсредой,образованнойвычислительнойсетью.Прииспользовании протоколов TCP/IP можно говорить, что socket являетсясредством подключения прикладной программы к порту локального узла сети.Socket-интерфейс представляет собой просто набор системных вызовов и/илибиблиотечных функций языка программирования СИ, разделенных на четырегруппы:1.
локального управления;2. установления связи;3. обмена данными (ввода/вывода);4. закрытия связи.Нижерассматриваетсяподмножествофункцийsocket-интерфейса,достаточное для написания сетевых приложений, реализующих модель"клиент-сервер" в режиме с установлением соединения.10Сетевое ПО. Лекция 11 (2014 г.)2.1.2 Интерфейс транспортного уровняИнтерфейс транспортного уровня (TLI) был разработан как альтернативаболее раннему socket-интерфейсу.
Он базируется на средстве ввода-выводаSTREAMS, первоначально реализованном в версиях System V операционнойсистемы UNIX.ОсновноедостоинствоSTREAMSзаключаетсявгибкой,управляемой пользователем многослойности модулей, по конвейерномупринципу обрабатывающих информацию, передаваемую от прикладнойпрограммы к физической среде хранения/пересылки и обратно. Это делаетSTREAMS удобным инструментом для реализации стеков протоколовсетевого взаимодействия различной архитектуры.Хотя все современные реализации версии ОС UNIX поддерживают socketинтерфейс по крайней мере для TCP/IP, для вновь разрабатываемых сетевыхприложений настоятельно рекомендуется использовать TLI что обеспечит ихнезависимость от используемых сетевых протоколов.С точки зрения прикладного программиста логика TLI очень похожа налогику socket интерфейса .
TLI реализован в виде библиотеки функций языкапрограммирования СИ, разделенных (как и в случае с socket-интерфейсом) начетыре группы:1. локального управления;2. установления связи;3. обмена данными (ввода/вывода);4. закрытия связи.Основу концепции TLI составляют три базовых понятия:о поставщик транспортных услуго пользователь транспортао транспортная точка.Поставщиком транспортных услуг (transport provider) называется набормодулей, реализующих какой-либо конкретный стек протоколов сетевоговзаимодействия (в данном случае - TCP/IP) и обеспечивающий сервис11Сетевое ПО.
Лекция 11 (2014 г.)транспортного уровня модели OSI.Пользователем транспорта (transport user) является любая прикладнаяпрограмма, использующая сервис, предоставляемый ПТС на локальном узлесети.Транспортнаяточка(transportendpoint)-абстрактноепонятие(аналогичное socket'y), используемое для обозначения канала связи междупользователем транспорта и поставщиком транспортных услуг на локальномузле сети. Транспортная точка имеет уникальный для всей сети транспортныйадрес (для сетей TCP/IP этот адрес образуется триадой: адрес узла сети, номерпорта, используемый протокол транспортного уровня).Для ссылки на транспортные точки в функциях TLI используются ихдескрипторы, подобные дескрипторам обычных файлов и socket'oB ОС UNIX.2.1.3 Вызов удаленных процедурСредство RPC реализует модель "клиент-сервер", где роль клиентаиграет прикладная программа, обращающаяся к набору процедур (функций),исполняемых на удаленном узле в качестве сервера.
RPC предоставляетприкладным программистам сервис более высокого уровня, чем ранеерассмотренных два, т.к. обращение за услугой к удаленным процедурамвыполняется в привычной для программиста манере вызова "локальной"функции языка программирования СИ.RPC реализовано, как правило, на базе socket интерфейса и/или TLI..Средство RPC предоставляет программистам сервис трех уровней:1.
препроцессор rpcgen, преобразующий исходные тексты "монолитных"программ на языке программирования СИ в исходные тексты программыклиента и программы сервера по спецификации программиста;2. библиотекафункцийвызоваудаленныхпроцедурпоихидентификаторам;3. библиотека низкоуровневых функций доступа к внутренниммеханизмам RPC и нижележащим протоколам транспортного уровня..