2014-10-26 1 views
0

Я изучаю общую память IPC. У меня есть некоторые сомнения.Как два не связанных процесса знают один и тот же ключ для выделения той же общей памяти

Q1. Общая память используется для связанных и не связанных процессов. И процесс распределяет общую память с помощью функции shemget. Первым параметром этой функции является ключ. Как два не связанных процесса знают один и тот же ключ для распределения одной и той же общей памяти.

Q2. Мы используем функцию shmget and shmat, новую или существующую (в использовании IPC_CREAT | IPC_EXCL) память создаем и сопоставляем пространство памяти процесса. Каковы разделы памяти памяти процесса (например, кучи, bss), которые отображаются. И в функции shmat, если мы передадим shmaddr, который уже используется, как система будет себя вести.

Q3. Что такое использование случае для предоставления фиксированной памяти addredd в shmat.

ответ

2

Отсносящийся 1:

Как два не связанных с процессом знаю, один и тот же ключ, чтобы выделить одну общую память.

Они либо переданы третьим имуществом, либо сообщают об этом друг другу.


Отсносящийся 2b:

И в функции шмат, если мы переходим shmaddr, который уже используется, то, как будет вести себя система.

shmat() не работает и возвращается (void*) -1.

+0

Как сохранить semid в файл. И оба процесса могут прочитать этот идентификатор. –

+0

Да, но есть много возможностей для достижения того или иного подхода. @Abhiteshkhatri – alk

1

Re.2a. В памяти нет разделов. Разделы находятся в объектных файлах.

Более подробно организация адресного пространства процесса в типичной Unix-подобной системе не обязательно соответствует организации исполняемого/объектного файла. Если вы посмотрите на вывод cat /proc/self/maps в системе Linux, вы увидите список областей памяти, некоторые из которых помечены именем файла в последнем столбце, некоторые немаркированы, а некоторые помечены строками типа [stack], [heap] и [vdso]. Регионы, помеченные именами исполняемых/DSO-файлов, соответствуют регионам в этих файлах, которые могут быть или не быть действительными. text или bss разделов (в любом случае в этом разделе нет никакого названия названия раздела). Особые имена областей в скобках не соответствуют ни одному файлу, они представляют собой только регионы, созданные для определенной цели, известной для загрузчика. Безвизовые регионы обычно создаются mmap, но не привязаны ни к одному файлу. Область общей памяти, созданная одной из функций shm, скорее всего, будет помечена либо /dev/zero, либо SYSVnn, где nn - это ключ, переданный в shmget().

Re. 3. Один случай, который приходит на ум, - это общая структура данных, содержащая внутренние указатели.

+2

Требование о разделах, находящихся в объектных файлах, а не в памяти, не является ни точным, ни уточнением.Было бы полезно указать, что в пространстве адресов процесса обычно имеется много другого места, и что ядро ​​может сопоставлять страницы с этим способами, которые не обязательно соответствуют концепциям организации памяти и компоновщика/компоновщика/библиотеки , –