русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Взаимодействия между процессами


Дата добавления: 2013-12-23; просмотров: 1366; Нарушение авторских прав


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

1. Обеспечить средства взаимодействия между процессами;

2. Исключить нежелательное влияние одного процесса на другой.

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

1.Передача данных. Причём их объем может варьироваться от десятков байт до нескольких мегабайт;

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

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

К средствам межпроцессорного взаимодействия, присутствующим во всех версиях UNIX, можно отнести:

Ø Сигналы;

Ø Каналы;

Ø FIFO (именованные каналы);

Ø Сообщения;

Ø Семафоры;

Ø Разделяемую память.

Во многих версиях UNIX есть ещё одно средство межпроцессорного взаимодействия – сокеты.

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

Каналы – обеспечивают однонаправленную передачу данных между двумя задачами. Для создания канала используется системный вызов pipe(2), который возвращает два файловых дескриптора – для записи в канал fildes[0] и для чтения из канала fildes[1]. Если один процесс записывает данные в fildes[0], другой сможет получить эти данные из fildes[1]. Возникает проблема получения процессом самого файлового дескриптора fildes[1]. Так как дочерний наследует и разделяет все назначенные файловые дескрипторы родительского, то доступ к дескрипторам fildes канала может получить сам процесс, создавший канал и его дочерние процессы. В этом заключается серьёзный недостаток каналов, поскольку они могут быть использованы для передачи данных между родственными процессами. Каналы не могут использоваться в качестве средства межпроцессорного взаимодействия между независимыми процессами.



FIFO (First In First Out) – очень похожи на каналы, т.к. являются однонаправленным средством передачи данных, причем чтение данных происходит в порядке их записи. Однако, в отличие от программных каналов, FIFO имеют имена, которые позволяют независимым процессам получить к этим объектам доступ. FIFO является отдельным типом файла в файловой системе UNIX. Команда ls –l покажет символ “p” в первой позиции. После создания FIFO может быть открыт на запись и чтение, причем запись и чтение могут происходить в разных независимых процессах. Каналы FIFO и обычные каналы работают по следующим правилам:

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

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

3.Если канал пуст и ни один процесс не открыл его на запись, то при чтении из канала будет получено 0 байт. Если один или более процессов открыли канал для записи, то вызов чтения будет заблокирован до появления данных.

4.Запись числа байтов, меньшего емкости канала или FIFO, гарантировано атомарно. Это означает, что если несколько процессов одновременно записывают в канал, то порции данных от этих процессов не перемешиваются.

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

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

è Тип сообщения;

è Длина данных сообщения;

è Собственно данные.

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

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

Свойство мультиплексирования позволяет использовать для обмена серверного процесса с несколькими клиентами одну очередь сообщений. Для этого сообщениям, направленным от любого клиента серверу, будем присваивать значение типа равным 1. Если в теле сообщения клиент идентифицирует себя, то сервер сможет передать сообщения конкретному клиенту, присваивая тип сообщения равным этому идентификатору. Так как функция msgrcv(2) позволяет принимать сообщения определенного типа, то сервер будет принимать сообщения с типом 1, а клиенты – сообщения с типами, равными идентификаторам их процессов. Стандартный порядок получения сообщений аналогичен принципу FIFO, однако, используя тип, этот порядок легко изменить.

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

1)Значение семафора должно быть доступно различным процессам. Поэтому семафор находится не в адресном пространстве процесса, а в адресном пространстве ядра.

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

UNIX допускает три возможные операции над семафором, определяемые полем системного вызова semop:

1.Если величина semop положительна, то значение семафора увеличивается на эту величину.

2.Если значение semop равно нулю, то процесс ожидает пока семафор не обнулится.

3.Если величина semop отрицательна, то процесс ожидает пока значение семафора не стане большим или равным абсолютной величине semop, после чего абсолютная величина semop вычитается из значения семафора.

 



<== предыдущая лекция | следующая лекция ==>
Планирование выполнения процессов | Сокеты.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.