Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VSOS_2014.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.9 Mб
Скачать
    1. Взаимодействие путем передачи сообщений

Понятно, что развитые ОС должны обеспечивать функции взаимодействия процессов автоматически без участия прикладного программиста. Средства операционной системы, реализующие автоматическое взаимодействие процессов, носят наименования средств межпроцессной коммуникации (Inter Process Communication (IPC) facility). IPC предоставляет процессам средства передачи данных между ними и средства синхронизации их работы. Механизм IPC обычно базируется на концепции асинхронного обмена сообщениями.

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

Функция системы обмена сообщениями – предоставление процессам возможности обмениваться информацией без использования общих переменных. Система обмена сообщениями предоставляет для этого две операции: Send и Receive.

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

Для организации взаимодействия процессы должны ссылаться друг на друга. Возможны системы непосредственного обмена (direct communication) и системы опосредованного обмена (indirect communication). Система непосредственного обмена сообщениями предполагает, что одновременно в обмене могут участвовать только два процесса. Система опосредованного обмена предполагает, что в обмене могут участвовать более двух процессов.

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

Send (P, message) – отправить сообщение с именем message процессу с именем Р.

Receive (Q, message) – получить сообщение с именем message от процесса с именем Q.

Приведем решение задачи «Производитель-потребитель» с использованием схемы непосредственного обмена сообщениями:

Процесс-производитель:

repeat

..........

[Формируется очередной

элемент в nextp]

..........

send (Consumer, nextp);

..........

until false;

Процесс-потребитель

repeat

..........

Receive (Producer, nextc);

..........

[Потребляется очередной

элемент из nextc]

..........

until false.

В данном случае при определении синтаксиса операций send и receive использована симметричная адресация. Возможна и асимметричная адресация. В этом случае операции посылки/приема определяются следующим образом:

Send (P, message) – отправить сообщение с именем message процессу с именем Р.

Receive (id, message) – получить сообщение с именем message от некоторого процесса. Здесь переменная id содержит имя процесса, от которого получено сообщение.

В случае опосредованного обмена сообщения пересылаются и получаются из так называемых почтовых ящиков (mail boxes), часто называемых портами (ports). Каждый почтовый ящик имеет уникальное имя. Несколько процессов могут взаимодействовать друг с другом в том случае, если они имеют общий почтовый ящик. В этом случае примитивы Send и Receive имеют вид

Send (A, message) – пересылать сообщение с именем message в почтовый ящик с именем А.

Receive (A, message) – получить сообщение с именем message из почтового ящика с именем А.

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

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

  • Разрешить пользование почтовым ящиком только двум процессам.

  • Разрешить только одному процессу выполнять операцию приема сообщений.

  • Разрешить операционной системе решать, какой из процессов получит сообщение. Система может сообщить отправителю имя получателя.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]