39. Межпроцессное взаимодействие. Состояние состязания. Критические области. Примитивы межпроцессного взаимодействия.
Межпроцессное взаимодействие.
Межпроцессное взаимодействие (от англ. Inter-Process Communication или сокр. IPC) - набор способов обмена данными между множеством потоков в одном или более процессах. Процессы могут быть запущены на одном или более компьютерах, связанных между собой сетью. IPC-способы делятся на методы обмена сообщениями, синхронизации, разделяемой памяти и удаленных вызовов (RPC). Методы IPC зависят от пропускной способности и задержки взаимодействия между потоками и типа передаваемых данных.
Ситуации, когда приходится процессам взаимодействовать:
- Передача информации от одного процесса другому
- Контроль над деятельностью процессов (например: когда они борются за один ресурс)
- Согласование действий процессов (например: когда один процесс поставляет данные, а другой их выводит на печать. Если согласованности не будет, то второй процесс может начать печать раньше, чем поступят данные).
Два вторых случая относятся и к потокам. В первом случае у потоков нет проблем, т.к. они используют общее адресное пространство.
Состояние состязания.
Состояние состязания - ситуация когда несколько процессов считывают или записывают данные (в память или файл) одновременно.
Критическая область.
Критическая область - часть программы, в которой есть обращение к совместно используемым данным.
Условия избегания состязания и эффективной работы процессов:
- Два процесса не должны одновременно находиться в критических областях.
- Процесс, находящийся вне критической области, не может блокировать другие процессы.
- Невозможна ситуация, когда процесс вечно ждет (зависает) попадания в критическую область.
Примитивы межпроцессного взаимодействия.
Вводится понятия двух примитивов.
sleep - системный запрос, в результате которого вызывающий процесс блокируется, пока его не запустит другой процесс.
wakeup - системный запрос, в результате которого блокированный процесс будет запущен