Страниц: [1]
  Печать  
Автор Тема: использование mmap, mem_offset64,mmap_device_memory  (Прочитано 9592 раз)
nickola
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля
« : Февраля 13, 2006, 02:47:47 pm »

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

Процесс 1
off64_t offset;
Addr=mmap();
*Addr=5;
mem_offset64(..........&offset);
------------> в процесс 2 передаем offset
Процесс 2
Addr=mmap_device_memory(.......offset);
printf("%d",*Addr);

вопрос чисто теоретический по использованию mmap, mem_offset64,mmap_device_memory
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #1 : Февраля 13, 2006, 03:44:19 pm »

nickola
Можно ли делать так

Можно, работало, но только на малых объемах памяти (где-то в районе 1 Mb) Если памяти был большой кусок, то в 6.3 появлялась непонятная фрагментация памяти, в результате в некоторых местах память была чужая.
Записан

mike
QOR.Moderator
*****
Offline Offline

Сообщений: 1186


Welcome to Lunatic Asylum.


Просмотр профиля WWW
« Ответ #2 : Февраля 13, 2006, 03:44:44 pm »

вот только зачем?
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #3 : Февраля 13, 2006, 05:21:12 pm »

mike
вот только зачем?

Для того, чтобы не создавать named shared memory. Но эта бага вылезала и с ним тоже, кстати.
Записан

mike
QOR.Moderator
*****
Offline Offline

Сообщений: 1186


Welcome to Lunatic Asylum.


Просмотр профиля WWW
« Ответ #4 : Февраля 13, 2006, 05:24:39 pm »

а чем не нравится named shared memory?
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #5 : Февраля 13, 2006, 06:06:16 pm »

mike
а чем не нравится named shared memory

Понятия не имею.

Я делал это лишь для того, чтобы в драйверах не извользовать shm_open, etc. И то, скорее по незнанию, ибо с теми же shm_open тоже все работало впоследствии. Естественно, если использовать shared memory через физический адрес, то еще нужно думать каким IPC передать другому процессу этот физический адрес.
Записан

nickola
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #6 : Февраля 14, 2006, 10:36:37 am »

lestat
Я делал это лишь для того, чтобы в драйверах не извользовать shm_open

т.е. можно использовать shm_open в драйвере,
а потом писать туда допустим по dma и читать из клиента?
а какой размер памяти в этом случае?

lestat
появлялась непонятная фрагментация памяти

и ничего нельзя сделать?
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #7 : Февраля 14, 2006, 10:45:33 am »

nickola
и ничего нельзя сделать?

Тут где-то тема была про это в "Программирование под QNX 6.x".
nickola
а потом писать туда допустим по dma и читать из клиента?

Да, так делают audio драйвера. Драйвер создает named shared memory необходимого размера с именем который ему дает io-audio, и тут же io-audio отдает этот буфер клиенту для заполнения. Функция ado_shm_alloc(). Но она только для audio драйверов. Реально внутри она простая и делает shm_open и memoffset64.
Записан

nickola
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #8 : Февраля 14, 2006, 11:29:02 am »

уточняю т.е. допустим devctl(...ALLOC, size) драйверу
драйвер -
fd = shm_open("/bolts", ...);
ftruncate(fd,...)
addr = mmap(...MAP_SHARED,fd,0);
и клиент - работает с "/bolts"?
lestat
Но эта бага вылезала и с ним тоже, кстати

т.е. можно примерно до 1Мб, а потом тоже будет непонятная фрагментация памяти?
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #9 : Февраля 14, 2006, 12:35:40 pm »

nickola
т.е. можно примерно до 1Мб, а потом тоже будет непонятная фрагментация памяти?

Не знаю, нужно пробовать. Вот эта тема, там ближе к концу эта проблема осуждалась.

http://qnx.org.ru/index.php?option=com_minibb&action=vthread&forum=4&topic=379 5

Там пример Ivan'а еще доступен, можно скачать и попробовать: http://ivan-ataman.narod.ru/phys_mem.tgz

nickola
уточняю т.е. допустим

да.
Записан

nickola
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #10 : Февраля 14, 2006, 12:53:05 pm »

Спасибо, буду пробовать
Записан
Страниц: [1]
  Печать  
 
Перейти в: