Как получить физический адрес разделяемой памяти - PullRequest
0 голосов
/ 06 ноября 2018

Следующий источник создает общую память в / dev / shm

static char* conf;
#define STATE_FILE "/memtest.shared"

int shm_fd;
if((shm_fd = shm_open(STATE_FILE, (O_CREAT | O_EXCL | O_RDWR),
                   (S_IREAD | S_IWRITE))) > 0 ) {
    ; /* We are the first instance */
}
else if((shm_fd = shm_open(STATE_FILE, (O_CREAT | O_RDWR),
                    (S_IREAD | S_IWRITE))) < 0)
{
    printf("Could not create shm object. %s\n", strerror(errno));
    exit( 0 ) ;
}
int iTotalByte = 1024*1024*2 ;
ftruncate(shm_fd, iTotalByte );
conf =  (char *) mmap(0, iTotalByte , (PROT_READ | PROT_WRITE), MAP_SHARED, shm_fd, 0) ;
if(conf  == MAP_FAILED)
{
    printf(" mmap error ....\n")  ;
    exit( 0 ) ;
}

Затем я запускаю приложение для подключения общей памяти:

numactl -N 0 -m 0 ./testz.exe <== pid 19852

Я пытаюсь выяснить в / proc / 19852 / maps или pmap -XX 19852 что такое физический адрес /dev/shm/memtest.shared и не удалось интерпретировать, я наблюдаю, что INode одинаков для каждого приложения присоединить memtest.shared, но не знаю, физический ли это адрес memtest.shared, как получить физический адрес общей памяти?!

Примечания:

То, что я пытаюсь сделать, это предположить, что физический адрес разделяемой памяти равен 0x700000, затем я могу получить к нему доступ с помощью mmap / dev / mem, смещение 0x700000 и прочитать содержимое, поэтому мне нравится знать физический адрес разделяемой памяти.

...