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

Разделяемая память (shared memory).
Позволяют процессам иметь общие области виртуальной памяти.
Единицей разделяемой памяти являются сегменты, свойства которых зависят от аппаратных особенностей управления памятью.
Этот способ обеспечивает наиболее быстрый обмен данными между процессами.
POSIX – функции для работы с разделяемой памятью.
shmget - создание разделяемого сегмента
shmat - получение доступа к сегменту и размещение сегмента в памяти
|
shmdt - |
удаление сегмента |
|
shmctl |
- выполнение управляющих действий |
(предписание удерживать сегмент в оперативной памяти и обратное предписание о снятии удержания )

Очереди сообщений (messages).
Являются системным разделяемым ресурсом
Каждая очередь сообщений имеет свой уникальный идентификатор
Процессы могут записывать сообщения в очередь и читать сообщения из очереди
При этом процесс, пославший сообщение в очередь, не обязан ожидать приема этого сообщения другим процессом
POSIX – функции для работы с очередью сообщений.
|
msgget |
- |
создать очереди сообщений |
|
msgsnd |
- |
послать сообщение в очередь, зная ее |
идентификатор |
|
||
|
msgrcv |
- |
прочитать сообщение, находящееся в |
очереди |
|
|
|
|
msgctl |
- |
удалить очередь |

Программные каналы (pipes)
Однонаправленная передача данных другому процессу, причем только «родственному».
POSIX – функции для работы с программным каналом.
|
pipe |
- |
создать не именованный программный канал |
|
open |
- |
создать именованный канал или получить |
доступ к уже существующему каналу |
|||
|
read |
- |
прочитать из канала |
|
write - |
записать в канал |

Программные гнезда (sockets)
Взаимодействие основано на модели "клиент-сервер". Процесс сервер "слушает" свое программное гнездо, а процесс-клиент пытается общаться с процессом-сервером через другое программное гнездо.
POSIX – функции для работы с программным гнездом.
|
socket |
- |
создать новое программное гнездо |
||
|
bind - |
связать ранее созданный программное гнездо с |
|||
|
именем |
|
запросить систему связаться с существующим |
||
|
connect |
- |
|||
|
программным гнездом (у процесса-сервера) |
||||
|
listen |
- |
информировать систему о том, что процесс- |
||
|
сервер планирует установление виртуальных соединений через |
||||
|
указанное гнездо |
|
|
||
|
accept |
- |
для выборки процессом-сервером запроса на |
||
|
установление соединения с указанным программным гнездом |
||||
|
send/sendto - |
послать сообщение |
|||
|
recv/recvfrom |
- |
принять сообщение |
||
|
shutdown - |
удалить соединение |

Тупики
Тупик – состояние мультипрограммной системы, которого ждет процесс, и которое никогда не реализуется (клинч, дедлок).
Задачи ОС:
-Предотвращение;
-Обход;
-Обнаружение.
Примеры тупиков.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
R 1 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Proc. 1 |
|
Proc. 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
R 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Кольцевая цепь запросов |
|||
Транспортная пробка |
Бесконечное ожидание – состояние системы, которого ждет процесс, является возможным, но оно откладывается на неопределенное время.
Например, из-за приоритета.
Ресурсы бывают:
-перераспределяемые (процессор, память);
-монопольные (НМЛ);
-реентерабельные (неизменный код);
-последовательного использования.
Условия возникновения тупиков (необходимые):
1.Монопольное управление выделенными ресурсами (взаимоисключение);
2.Удержание ресурсов на время ожидания следующего;
3.Ресурсы у процесса нельзя отобрать, отдает их сам (неперераспределение);
4.Существование кольцевой цепи запросов.

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

Процесс запрашивает все нужные ресурсы сразу. До выделения – ждет.
Нарушается условие возникновения тупиков:
2 .Удержание ресурсов на время ожидания следующего; Плюс: простота реализации.
Минусы:
-Как определить набор всех необходимых процессу ресурсов?
-Простой свободных ресурсов.
-Накапливание ресурсов приводит к высоким издержкам.
Если процессу не выделяется очередной ресурс, он должен отдать уже выделенные.
Нарушается условие возникновения тупиков:
3. Ресурсы у процесса нельзя отобрать, отдает их сам (неперераспределение); Плюс: ???.
Минусы:
-Как сохранить промежуточные результаты работы процесса?
-Возможность бесконечного откладывания (дефицитный ресурс).

Вводим линейную упорядоченность на типы ресурсов. Процесс может запросить ресурсы только в порядке увеличения номера ресурса.
Нарушается условие возникновения тупиков: 4. Существование кольцевой цепи запросов. Плюс: кажущаяся простота реализации. Минусы:
-Сложно вводить в систему новые ресурсы (ОС).
-Кто знает «правильную» последовательность ресурсов?
-Трансляторы тоже должны знать номера ресурсов, а это сложно и снижает мобильность систем.
Вывод – принципы Хавендера носят скорее теоретический характер.
На практике они используются как вспомогательные элементы стратегий.