Межпроцессное взаимодействие в Unix
Межпроцессное взаимодействие.
Сигналы
Сигналы (signals) – программные прерывания, уведомляющие процесс о наступлении определенного события.
В отличии от других методов не позволяют процессам обмениваться друг с другом какой – либо информацией. При поступлении сигнала ОС сначала определяет, какому процессу предназначен данный сигнал, а потом – как процесс должен на него отреагировать.
Сообщения
Передача сообщений может являться двунаправленной:
1. Send (receiver Process, message);
2. Receive (sender Process, message);
Передача
При блокирующей передаче( blocking send) процесс вынужден ожидать до тех пор, пока сообщение не будет доставлено получателю, требуя подтверждения приёма.
При неблокирующей передаче(nonblocking send) процесс – отправитель может продолжать выполнение других операций, даже если сообщение ещё не было доставлено получателю.
Блокирующая – синхронная связь
Неблокирующая – асинхронная связь
Канал
Канал(pipe) – механизм передачи сообщений. Защищённая область памяти, которая выступает в качестве буфера, позволяющего нескольким процессам обмениваться между собой данными.
|
|
|
2
2 1
| |||
сообщения общая память
Разделяемая память
Сокеты
Сокеты (socket) – программная конструкция, являющаяся конечным элементом соединения, которая позволяет общаться процессам в сети.
Удаленный вызов процедуры (RPC) – взаимодействие между процессами в распределенных системах.
Межпроцессное взаимодействие в Unix
способы взамодействия | тип связи | способ применения | системные вызовы |
разделяемая память | общий доступ | высокопроизводит, обмен данными | shmem, mmap |
переменные окружения | односторонняя, при запуске | режим работы программы | setenv |
сигналы | односторонняя | уведомления | signal |
каналы | односторонняя | базовый ввод-вывод | pipe |
сокеты | двусторонняя | сетевой обмен | socket, ... |
Полная изоляция процессов в операционной системе бессмысленна, так как им часто необходимо обмениваться данными в процессе работы. Поэтому одна из важнейших задач операционной системы – обеспечивать контролируемые взаимодействия процессов.
Разделяемая память
Самый простой способ «обойти» разделение виртуальных пространств процессов – использования разделяемой памяти. Это специальный механизм, с помощью которого средствами операционной системы два процесса могут обращаться к общему участку физической памяти – каждый через свое адресное пространство.
Для операционной системы этот способ является наиболее простым — ведь все страницы виртуальной памяти процессов в любом случае проецируются на какую-то область физической памяти. Такое взаимодействие не требует каких-либо накладных расходов, процессы обмениваются информацией со скоростью обращения к памяти.
Однако для пользователя такой способ межпроцессного взаимодействия является труднодоступным. Во-первых, программы, взаимодействующие таким образом, должны изначально содержать соответствующий код — с помощью специальных системных вызовов обе программы должны обозначить участки своих адресных пространств, предназначенные для обмена информацией. Другая сложность состоит в том, что разделяемая память сама по себе не содержит средств синхронизации, программы должны согласованно изменять общий участок памяти, чтобы не испортить данные; обычно для этих целей применяются семафоры и аналогичные механизмы синхронизации.
Таким образом, разделяемая память — наиболее быстрый способ обмена, но при этом малопригодный для широкого использования. Обычная сфера применения разделяемой памяти — специализированные высокопроизводительные программы. Стоит также обратить внимание на явную аналогию разделяемой памяти и исполнения множества потоков в рамках одного процесса — в UNIX эти инструменты построения программ используются редко и только в связи с высокопроизводительными вычислениями и вводом-выводом.
Дата добавления: 2017-01-29; просмотров: 1978;