Вы здесь

System V IPC

Интерфейс межпроцессного взаимодействия System V IPC позволяет манипулировать классическими набором объектов, таких как: очередь сообщений, семафор и разделяемая память.

Объекты System V IPC идентифицируется 32-битным ключом IPC, играющего роль, аналогичную имени файла. При создании объекта IPC ему присваивается уникальный 32-битный идентификатор IPC, аналогичный inode файла. Идентификаторы IPC назначаются ядром, ключи IPC произвольно выбираются программистами.

У каждого объект IPC есть атрибуты "пользователь-владелец", "группа-владельца", "пользователь-создатель", "группа-создателя", а так же права на чтение и запись для владельца, группы-владельца и остальных, аналогичные файловым. Например: rw- r-- ---.

Впервые System V IPC появился во внутренних версиях Unix, использовавшихся в компании Bell Laboratories, но массовое распространение получил вместе с самой продаваемой версией Unix - System V, что и отражено в названии.

System V IPC имеет некоторые недостатки, в частности, плохую масштабируемость, в связи с тем, что создаваемые объекты не привязаны к процессам, и потому могут оставаться в памяти до перезагрузки ОС .

В последующем, System V IPC с небольшими изменениями вошёл в стандарт POSIX. Логика работы с объектами сохранилась, однако была проведена некоторая унификация вызовов System V IPC с вызовами файловой системы. Соответственно, поменялись имена функций.

Примеры отличий System V IPC и POSIX

В System V IPC для именования объекта создаётся особый 32-битный ключ, часто формируемый из inode существующего файла и целого числа, в POSIX имена объектов имитируют имена файловой системы в формате /object_name.

Набор функций для работы с разделяемой памятью из shmget(), shmat(), shmdt(), shmctl() превратился в shm_open(), mmap(), shm_unlink()/

shmget() возвращает идентификатор IPC, а shm_open() возвращает файловый дескриптор.

shmat(), shmdt() работают только с разделяемой памятью, а mmap() одинаково успешно работает как с объектом "разделяемая память", так и с файлами, отображаемыми в память.

Размер сегмента разделяемой памяти System V IPC неизменен, а в POSIX может изменяться вызовом * ftruncate() * с последующим обновлением отображения в память процесса вызовами munmap() и mmap() .

Наличие сообщений в очередях POSIX может мониториться через callback, который устанавливается вызовом mq_notify().

Яндекс.Метрика