Главная arrow Linux arrow Общая информация arrow Межпроцессные коммуникации в UNIX
Межпроцессные коммуникации в UNIX PDF Печать E-mail

 

Межпроцессные коммуникации в UNIX

ОС UNIX в основе своей наиболее полно отвечает требованиям технологии «север – клиент». Для построения программных систем, работающих по принципу модели «сервер – клиент» в ОС UNIX существуют специальные механизмы, описанные ниже.

Сигналы

ОС UNIX, предоставляющая каждому пользователю виртуальный компьютер, поддерживает систему прерываний, отвечающую стандартным требованиям:

-                     обработка исключительных ситуаций;

-                     средства обработки внешних и внутренних прерываний;

-                     средства управления системой прерываний.

Всем этим требованиям в ОС UNIX отвечает техника сигналов, которая не только воспринимает и обрабатывает сигналы, но может их порождать и посылать на другие машины (процессы). Сигналы могут быть:

-                     синхронными, когда сам процесс инициирует сигнал;

-                     асинхронными, когда интерактивный пользователь за терминалом инициирует возникновение сигнала. Источником асинхронных прерываний может быть ядро, когда оно контролирует состояние аппаратуры.

Сигнал – простейшая форма межпроцессого взаимодействия, которое используется для передачи от одного процесса другому или ядра системы какому-либо процессу уведомления о возникновении определенного события.

Семафоры

Семафор – переменная определенного типа, которая доступна параллельным процессам для проведения над ней только двух операций:

-                     закрытия (P-операция);

-                     открытия (V-операция).

Семафор играет роль  вспомогательного критического ресурса, так как операции P и V неделимы при своем выполнении и взаимно исключают друг друга.

Семафорный механизм работает по схеме, в которой сначала исследуется состояние критического ресурса, а затем уже осуществляется допуск к критическому ресурсу или отказ от него на некоторое время. При отказе доступа к критическому ресурсу используется режим «пассивного ожидания», поэтому в состав механизма включаются средства формирования и обслуживания очереди ожидающих процессов.

Основным достоинством семафорных операций является отсутствие состояния «активного ожидания», что может существенно повысить эффективность работы мультипрограммной вычислительной системы.

Операция  P(S) проверяет текущее значение семафора S, и если оно меньше нуля, то осуществляется переход к следующей за примитивом операции, иначе процесс снимается на некоторое время с выполнения и переводится в состояние «пассивного ожидания». В этом состоянии ожидающий процесс не проверяет семафор непрерывно, поэтому на процессоре может выполняться другой полезный процесс.

Операция V(S) связана с увеличением значения семафора на единицу и переводом одного или нескольких процессов в состояние готовности к выполнению.

Операции P(S) и V(S) выполняются операционной системой в ответ на запрос, выданный некоторым процессом и содержащий имя семафора в качестве параметра.

Механизм семафоров, реализованный в ОС UNIX, является обобщением классического механизма семафоров общего вида. Семафор в ОС UNIX состоит из следующих элементов:

-                     значение семафора;

-                     идентификатор процесса, который хронологически последним работал с семафором;

-                     число процессов, ожидающих увеличения значения семафора;

-                     число процессов, ожидающих нулевого значения семафора.

Для работы с семафорами имеются следующие три системные вызова:

-                     создание и получение доступа к набору семафоров;

-                     манипулирование значениями семафоров (синхронизация процессов на основе использования семафоров);

-                     выполнение разнообразных управляющих операций над набором семафоров.

 

Программные каналы

Программный канал (конвейер, транспортер) является средством, с помощью которого можно производить обмен данными между процессами.  Принцип работы конвейера основан на механизме ввода/вывода, который используется для работы с файлами в ОС UNIX. Задача, передающая информацию, действует так, как будто она записывает данные в файл, а задача, для которой эта информация предназначена, читает ее из этого файла. Операции записи и чтения осуществляются не записями, а потоком байтов. Программный канал представляет собой поток данных между двумя (или более) процессами. Конвейеры не являются файлами на диске, а представляют собой буферную область.

Программные каналы (pipes) в ОС UNIX являются очень важным  средством взаимодействия и синхронизации процессов. Теоретически программный канал позволяет взаимодействовать любому числу процессов, обеспечивая дисциплину FIFO (first-in-first-out). Процесс, читающий из программного канала, прочитает самые давние данные, записанные в программный канал. Традиционно для хранения данных использовались файлы, в современных версиях  ОС  UNIX применяются и другие средства, например, очереди сообщений.

В ОС UNIX различают два вида программных каналов:

-                     именованный программный канал может служить для общения и синхронизации произвольных процессов, знающих имя данного программного канала и имеющих соответствующие права доступа;

-                     неименованным программным каналом могут пользоваться только создавший его процесс и его потомки.

Очереди сообщений

Очереди сообщений (Queue) являются более сложным методом связи взаимодействующих процессов по сравнению с программными каналами. С помощью очередей также можно из одной или нескольких задач независимым образом посылать сообщения некоторой задаче-приемнику.  При этом только процесс-приемник может читать и удалять сообщения из очереди, а процессы-клиенты имеют право лишь помещать в очередь свои сообщения. Очередь работает только в одном направлении, если необходима двухсторонняя связь, следует создать две очереди.

Работа с очередями сообщений имеет много отличий от работы с конвейерами:

-                     очереди сообщений предоставляют возможность использовать несколько дисциплин обработки сообщений:

o   FIFO – сообщение, записанное первым, будет прочитано первым;

o   LIFO – сообщение, записанное последним, будет прочитано первым;

o   приоритетная – сообщения читаются с учетом их приоритетов;

o   произвольный доступ – можно читать любое сообщение, а программный канал обеспечивает только дисциплину FIFO;

-                     при чтении сообщения из очереди оно не удаляется, а может быть прочитано несколько раз;

-                     в очередях реально присутствуют не сами сообщения, а только их адреса в памяти и размеры. Эта информация размещается системой в сегменте памяти, доступном для всех задач, общающихся с помощью данной очереди.

Каждый процесс, использующий очередь, должен предварительно получить разрешение на использование общего сегмента памяти с помощью системных запросов, потому что очередь – системный механизм и для работы с ней требуются системные ресурсы и обращение к самой ОС.

Для обеспечения возможности обмена сообщениями между процессами механизм очередей сообщений поддерживается следующими системными вызовами:

-                     образование новой очереди сообщений или получения дескриптора существующей очереди;

-                     посылка сообщения, т.е. постановка его в указанную очередь сообщений;

-                     прием сообщения, т.е. выборка сообщения из очереди сообщений;

-                     выполнение ряда управляющих действий.

Ядро хранит сообщения в виде связанного списка (очереди), а дескриптор очереди сообщений является индексом в массиве заголовков очередей сообщений.

Разделяемая память

Для работы с разделяемой памятью используются четыре системных вызов:

-                     создание нового сегмента разделяемой памяти или нахождение существующего сегмента с тем же ключом;

-                     подключение сегмента с указанным дескриптором к виртуальной памяти обращающегося процесса;

-                     отключение от виртуальной памяти ранее подключенного к ней сегмента с указанным виртуальным адресом начала;

-                     управление разнообразными параметрами, связанными с существующим сегментом.

После подключения сегмента разделяемой памяти к виртуальной памяти процесса этот процесс может обращаться  к соответствующим элементам памяти с использованием обычных машинных команд чтения и записи, не прибегая к использованию дополнительных системных вызовов.

Вызовы удаленных процедур (RPC)

Во многих случаях взаимодействие процессов имеет характер «клиент – сервер». Один из процессов «клиент» запрашивает у другого процесса сервера»  некоторую услугу и не продолжает свое выполнение, пока эта услуга не будет выполнена. По смыслу такой режим взаимодействия эквивалентен вызову процедуры, поэтому он так и назван. По идеологии ОС UNIX идеально соответствует требованиям сетевой операционной системы, поэтому на ее основе можно создавать распределенные системы и организовывать распределенное вычисление. Одной из основных требований к RPC является автоматическое преобразование форматов данных при взаимодействии процессов, выполняющихся на разнородных компьютерах.

Технология вызовов удаленных процедур (RPCremote procedure call) должна обеспечить работу взаимодействующих процессов, находящихся на разных компьютерах.

В случае удаленного вызова передача параметров процедуре превращается в передачу запроса по сети.

Вызов удаленных процедур включает следующие шаги:

-                     процесс «клиент» производит локальный вызов процедуры, которую называют «заглушкой». Задачи «заглушки» следующие:

o   принять аргументы;

o   преобразовать аргументы в стандартную форму;

o   сформировать сетевой запрос. Упаковка аргументов и создание сетевого запроса называется сборкой;

-                     сетевой запрос пересылается на удаленную систему, где соответствующий модуль ожидает такой запрос и при его получении извлекает параметры вызова процедуры, а затем передает их серверу удаленной процедуры. После выполнения осуществляется обратная передача.

 
« Пред.   След. »

Календарь новостей

 
« 07 Сен 2008 »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930         

Опросы


При копировании материалов с сайта, ссылка на источник SlackGuide.com Обязательна.
Copyright © 2002-2007 | Powered by Lookinfo.net © 2007.

Страница сгенерирована за 0.060210 секунд