Межпроцессное взаимодействие и синхронизация в Linux

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

Одним из способов обмена данными между процессами является чтение информации с дисковых файлов и ее запись в эти файлы. Но для многих приложений этот способ является слишком медленным и негибким. Поэтому в Linux, как и во всех современных реализациях UNIX, предоставляется обширный набор механизмов для межпроцессного взаимодействия (Interprocess Communication, IPC), включая следующие:

  • сигналы, которые используются в качестве признака возникновения события;
  • конвейеры (известные пользователям оболочек в виде оператора |) и FIFO-буферы, которые могут применяться для передачи данных между процессами;
  • сокеты, которые могут использоваться для передачи данных от одного процесса к другому; данные при этом находятся на одном и том же базовом компьютере либо на различных хостах, связанных по сети;
  • файловая блокировка, позволяющая процессу блокировать области файла с целью предотвращения их чтения или обновления содержимого файла другими процессами;
  • очереди сообщений, которые используются для обмена сообщениями (пакетами дан­ных) между процессами;
  • семафоры, которые применяются для синхронизации действий процессов;
  • совместно используемая память, позволяющая двум и более процессам совместно ис­пользовать часть памяти. Когда один процесс изменяет содержимое совместно использу­емой области памяти, изменения тут же могут быть видимы всем остальным процессам.

Широкое разнообразие IPC-механизмов в системах UNIX с иногда перекрываемыми функциональными возможностями частично объясняется их различием в отдельных вариантах UNIX-систем и требованиями со стороны различных стандартов. Например, FIFO-буферы и доменные сокеты UNIX, по сути, выполняют одну и ту же функцию, позволяющую неродственным процессам в одной и той же системе осуществлять обмен данными. Их совместное существование в современных системах UNIX объясняется тем, что FIFO-буферы пришли из System V, а сокеты были взяты из BSD.

Вас заинтересует / Intresting for you:

Процессы Linux
Процессы Linux 4554 просмотров Doctor Wed, 23 Jan 2019, 16:47:24
Основа операционной системы Li...
Основа операционной системы Li... 3031 просмотров Андрей Волков Wed, 09 Jan 2019, 05:36:45
Краткая история Linux
Краткая история Linux 2668 просмотров Андрей Волков Wed, 09 Jan 2019, 02:46:59
Сигналы в Linux: назначение и ...
Сигналы в Linux: назначение и ... 2043 просмотров Fortan Fri, 05 Nov 2021, 07:58:01
Войдите чтобы комментировать