Колективна пам'ять

Пам'ять, що розділяється ( англ. Shared memory ) Застосовують для того, щоб збільшити швидкість проходження даних між процесами. У звичайній ситуації обмін інформацією між процесами проходить через ядро. Техніка розділяється пам'яті дозволяє здійснити обмін інформацією не через ядро, а використовуючи деяку частину віртуального адресного простору, куди містяться і звідки зчитуються дані.

Після створення розділяється сегмента пам'яті будь-який з користувацьких процесів може приєднати його до свого власного віртуального простору і працювати з ним, як із звичайним сегментом пам'яті. Недоліком такого обміну інформацією є відсутність яких би то не було коштів синхронізації, однак для подолання цього недоліку можна використовувати техніку семафорів.

Приблизний сценарій використання розділяється пам'яті при реалізації технологій "клієнт-сервер" має вигляд:

  1. сервер отримує доступ до пам'яті, що розділяється, використовуючи семафор;
  2. сервер робить запис даних у пам'ять, що розділяється;
  3. після завершення запису даних сервер звільняє доступ до пам'яті, що розділяється за допомогою семафора;
  4. клієнт отримує доступ до пам'яті, що розділяється, замикаючи доступ до цієї пам'яті для інших процесів за допомогою семафора;
  5. клієнт виробляє читання даних з пам'яті, що розділяється, а потім звільняє доступ до пам'яті за допомогою семафора.

Для роботи з пам'яттю, що використовуються системні виклики:

  • shmget - створення сегмента розділяється пам'яті;
  • shmctl - встановлення параметрів;
  • shmat - під'єднання сегмента пам'яті;
  • shmdt - від'єднання сегмента.

У схемі обміну даними між двома процесами - ( клієнтом і сервером), що використовують пам'ять, що розділяється, - повинна функціонувати група з двох семафорів. Перший семафор служить для блокування доступу до пам'яті, що розділяється, його дозволяючий сигнал - 1, а забороняє - 0. Другий семафор служить для сигналізації сервера про те, що клієнт почав роботу, при цьому доступ до пам'яті, що розділяється блокується, і клієнт читає дані з пам'яті. Тепер при виклику операції сервером його робота буде припинена до звільнення пам'яті клієнтом.


Див також

Проблема ABA

Перегляд цього шаблону Межпроцессное взаємодія в інформатиці
Методи Файл Memory-mapped file Обмін повідомленнями Message queue and mailbox Іменований канал Anonymous pipe Pipe Семафор ( критична секція, м'ютекс, фьютекс) Shared memory Сигнал Сокет Unix domain socket
Вибрані протоколи
і стандарти
Apple events COM + CORBA D-Bus DCE DCOP DIPC ICE LINX ONC RPC POSIX (різні методи) SOAP Thrift TIPC XML-RPC