- •Лекция 5. Межпроцессное взаимодействие. Сигналы
- •Сообщения
- •Разделяемая память Сокеты
- •Межпроцессное взаимодействие в Unix
- •Разделяемая память
- •Переменные окружения
- •Наследование переменных окружения
- •Сигналы
- •Основные сигналы:
- •Использование сигналов при межпроцессном обмене
- •Каналы(unix)
- •Неименованный канал между двумя процессами
- •Почтовые ящики
- •Межзадачное взаимодействие в ос qnx Neutrino
- •Синхронный обмен сообщениями
- •Копирование сообщений
- •Простые сообщения
- •Каналы и соединения
- •Импульсы
- •Наследование приоритетов
- •Программный интерфейс механизма обмена сообщениями
- •События
- •Уведомления ввода/вывода
- •Сигналы
- •Специальные сигналы
- •Краткое описание сигналов
- •Очереди сообщений в стандарте posix
- •Преимущества очередей сообщений стандарта posix
- •Интерфейс, аналогичный файлам
- •Функции управления очередями сообщений
- •Разделяемая память
- •Разделяемая память с механизмом обмена сообщениями
- •Создание объектов разделяемой памяти
- •Неименованные и именованные каналы
- •Службы управления часами и таймерами
- •Таймеры
Лекция 5. Межпроцессное взаимодействие. Сигналы
Сигналы (signals) – программные прерывания, уведомляющие процесс о наступлении определенного события.
В отличии от других методов не позволяют процессам обмениваться друг с другом какой – либо информацией. При поступлении сигнала ОС сначала определяет, какому процессу предназначен данный сигнал, а потом – как процесс должен на него отреагировать.
Сообщения
Передача сообщений может являться двунаправленной:
Send (receiver Process, message);
Receive (sender Process, message);
Передача
блокирующая
неблокирующая
При блокирующей передаче( blocking send) процесс вынужден ожидать до тех пор, пока сообщение не будет доставлено получателю, требуя подтверждения приёма.
При неблокирующей передаче(nonblocking send) процесс – отправитель может продолжать выполнение других операций, даже если сообщение ещё не было доставлено получателю.
Блокирующая – синхронная связь
Неблокирующая – асинхронная связь
Канал
Канал(pipe) – механизм передачи сообщений. Защищённая область памяти, которая выступает в качестве буфера, позволяющего нескольким процессам обмениваться между собой данными.
Process A
Process A
M
Process B
shared
M
Process B
2
2
1
kernel
M
kernel
сообщения общая память
Разделяемая память Сокеты
Сокеты (socket) – программная конструкция, являющаяся конечным элементом соединения, которая позволяет общаться процессам в сети.
Удаленный вызов процедуры (RPC) – взаимодействие между процессами в распределенных системах.
Межпроцессное взаимодействие в Unix
способы взамодействия |
тип связи |
способ применения |
системные вызовы |
разделяемая память |
общий доступ |
высокопроизводит, обмен данными |
shmem, mmap |
переменные окружения |
односторонняя, при запуске |
режим работы программы |
setenv |
сигналы |
односторонняя |
уведомления |
signal |
каналы |
односторонняя |
базовый ввод-вывод |
pipe |
сокеты |
двусторонняя |
сетевой обмен |
socket, ... |
Полная изоляция процессов в операционной системе бессмысленна, так как им часто необходимо обмениваться данными в процессе работы. Поэтому одна из важнейших задач операционной системы – обеспечивать контролируемые взаимодействия процессов.
Разделяемая память
Самый простой способ «обойти» разделение виртуальных пространств процессов – использования разделяемой памяти. Это специальный механизм, с помощью которого средствами операционной системы два процесса могут обращаться к общему участку физической памяти – каждый через свое адресное пространство.
Для операционной системы этот способ является наиболее простым — ведь все страницы виртуальной памяти процессов в любом случае проецируются на какую-то область физической памяти. Такое взаимодействие не требует каких-либо накладных расходов, процессы обмениваются информацией со скоростью обращения к памяти.
Однако для пользователя такой способ межпроцессного взаимодействия является труднодоступным. Во-первых, программы, взаимодействующие таким образом, должны изначально содержать соответствующий код — с помощью специальных системных вызовов обе программы должны обозначить участки своих адресных пространств, предназначенные для обмена информацией. Другая сложность состоит в том, что разделяемая память сама по себе не содержит средств синхронизации, программы должны согласованно изменять общий участок памяти, чтобы не испортить данные; обычно для этих целей применяются семафоры и аналогичные механизмы синхронизации.
Таким образом, разделяемая память — наиболее быстрый способ обмена, но при этом малопригодный для широкого использования. Обычная сфера применения разделяемой памяти — специализированные высокопроизводительные программы. Стоит также обратить внимание на явную аналогию разделяемой памяти и исполнения множества потоков в рамках одного процесса — в UNIX эти инструменты построения программ используются редко и только в связи с высокопроизводительными вычислениями и вводом-выводом.
