LINUX.ORG.RU

Семафоры и shared memory.


0

0

Здравствуй ALL!

В QNX 4.25 при создании именованой Shared Memory в одном процессе, и открытии в другом процессе возращают указатели на один и тот же адрес памяти. Этой памятью можно пользоваться для межпроцессного обмена данными и созданием семафоров(!).

В Линухе я заметил, что процессы возвращают указатели на разные участки памяти(!), но обмен данными между процессами идёт. А вот с семафорами атас - не работают.

Насколько я понимаю процессы в Линуховом ядре работают с физически РАЗНЫМИ shared memory, но ядро скрыто от них занимается копированием данных из одной памяти в другую.

Я прав или ошибаюсь?

Если прав, то от чего это зависит? (старая версия ядра и т.д.)

Можно ли процессы заставить пользоваться физически одной и той же shared nmemory ?

Можно ли заставить процессы нормально работать с семафорами через shared memory?

Работают ли именованая память и семафоры в ядре 2.6 как положено?

Вопросы возникают в связи с портированием кода из QNX 4.25 в Линух.

anonymous

> В Линухе я заметил, что процессы возвращают указатели на разные участки памяти(!)

как ты это заметил, распечатал указатели и увидел что числа разные?:)

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

у каждого процесса будут разные адреса виртуальной памяти,
но они отображаются ядром на одни и те же физические адреса,
так что проблем нет. семафоры функционируют, ты просто где-то напутал.

anonymous
()

>Можно ли процессы заставить пользоваться физически одной и той же shared nmemory ?

А можно заставить разной? :)))))))

>Можно ли заставить процессы нормально работать с семафорами через shared memory?

Какие семафоры? Надо наверное говорить о конкретной реализации семафоров. Вообще, семафоры в смысле AT&T (не simple/spin-блокировки) нельзя реализовать в shared memory, но shared memory может использоваться для семафоров.

>Работают ли именованая память и семафоры в ядре 2.6 как положено?
Они и в 2.4 работают как положено, т.е. как описано в man/SVID/SuS.

Murr ★★
()

физические дреса, естественно, одинаковые, иначе-то как?, а вот виртуальные действительно разные!

ВРОПРОС ко всем, кто работал с POSIX shared memory: у меня в 2.4.20, при вызове shm_open() возвращается ошибка errno= 38 "function not implemented", и соответственно ENOSYS. В linux вообще реализована POSIX shared memory?

nick_84
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.