В начало → Linux не для идиотов → System V shared memory |
Linux поддерживает стандартную для всех UNIX-подобных операционных систем организацию разделяемой памяти. Пользовательские приложения могут создавать сегменты разделяемой памяти, которые могут быть присоединены к некоторому фрагменту адресного пространства процесса. Любой процесс, имеющий достаточные права доступа, может присоединиться к сегменту разделяемой памяти, и отобразить его в свое адресное пространство, начиная с некоторого адреса.
Если в приведенной схеме любой из процессов изменит содержимое памяти в области, занимаемой отображением одного из сегментов, то же самое изменение произойдет в адресном пространстве другого процесса, поскольку соответствующий сегмент существует в одном экземпляре и отображен в адресное пространство обоих процессов.
Кроме System V IPC ядро Linux также поддерживает другие объекты IPC, в частности семафоры и очереди сообщений. Каждый объект System V IPC идентифицируется уникальным ключом. Просмотреть список всех объектов IPC можно командой ipcs. Команда ipcrm позволяет удалять объекты IPC, которые по каким-либо причинам остались не освобожденными после завершения создавшего их процесса – например, такая ситуация может возникнуть после аварийного завершения работы СУБД Oracle, Informix или DB2.
Соответственно, перед перезапуском процесса системный администратор с помощью команды ipcrm должен освободить неиспользуемые объекты IPC, поскольку стартующее приложение не сможет их повторно создать и не будет корректно работать.
Для каждого объекта IPC система устанавливает права доступа, как если бы это был файл (т.е. для каждого объекта IPC можно устанавливать набор прав ugo/rwx, но в отличие от обычных файлов сменить права доступа для IPC-объектов можно только вызывая специализированные функции, предназначенные для работы с такими объектами.
$
ipcs
------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 0 oracle 640 4194304 10 0x00000000 32769 oracle 640 20971520 10 0x00000000 65538 oracle 640 29360128 10 0x0d3c24a0 98307 oracle 640 29360128 50 0x00000000 13697028 root 777 49152 1 0x00000000 13729797 root 777 16384 1 0x000004d2 13795334 dalth 666 1008 2 0x00000000 14286866 root 644 790528 2 dest 0x00000000 21823507 dalth 600 393216 2 dest 0x00000000 21921814 root 644 122880 2 dest 0x00000000 14516249 root 644 151552 1 dest ------ Semaphore Arrays -------- key semid owner perms nsems 0x0b4f657c 262147 oracle 640 154 0x000004d2 458756 dalth 666 1 ------ Message Queues -------- key msqid owner perms used-bytes messages
Поддержка System V IPC позволяет сравнительно легко переносить на Linux приложения, написанные для других UNIX-систем.
В начало → Linux не для идиотов → System V shared memory |