Gdzie znajduje się pamięć współdzielona linux?

Chciałem tylko wiedzieć, gdzie znajduje się pamięć współdzielona w systemie Linux? Czy jest to pamięć fizyczna czy pamięć wirtualna?

Wiem, że skrzynka wysyłania pamięci wirtualnej procesu różni się od procesu do procesu, a procesy nie widzą siebie nawzajem, ale możemy przekazać dane między procesami za pomocą IPC. Aby zaimplementować prosty scenariusz, właśnie utworzyłem prosty program współdzielonej pamięci i próbuję wydrukować adres pamięci współdzielonej i zwrot wartościshmat funkcja, jednak oba procesy mają inny adres, ale tę samą wartość.

Oto program do pisania.

write.c

#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>

int main() {

  key_t key=1235;
  int shm_id;
  void *shm;

  int *ptr = 83838;

  shm_id = shmget(key,10,IPC_CREAT | 0666);
  shm = shmat(shm_id,NULL,NULL);

  sprintf(shm,"%d",ptr);

  printf("Address is %p, Value is %p \n", (void *)shm, (void *)&ptr);
  printf("Shm value is %d \n", *(int *)shm);
  return;
}

Oto program czytelnika.

read.c

#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <stdlib.h>

int main() {

  key_t key=1235;
  int shm_id;
  void *shm;

  int *p = (int *)malloc(sizeof(int));
  shm_id = shmget(key,10,NULL);
  shm = shmat(shm_id,NULL,NULL);
  if(shm == NULL)
  {
    printf("error");
  }
  sscanf(shm,"%d",p);
  printf("Address is %p %p %p %d\n",(void *)shm, (void *)p, (void *)&p, *p);
  printf("Shared value is %d \n", *(int *)shm);
  return 0;
}

Byłoby wspaniale, gdyby ktoś mógł wyjaśnić szczegółowo, w jaki sposób procesy widzą tę samą wartość pomimo różnych adresów?

To pytanie pochodzi zC przekaż nieważny wskaźnik za pomocą pamięci współdzielonej.

Dzięki.

questionAnswers(1)

yourAnswerToTheQuestion