2012-11-06 4 views
5

Lorsque j'ai regardé les pages de manuel de shmat. Il est décrit comme la fonction primitive de l'API est pour attacher le segment de mémoire associé avec shmid à l'espace adresse du processus appelant.shmat pour la connexion d'un segment de mémoire partagée

Les questions que j'ai sont les suivantes.

  • Le terme attache semble générique pour moi. Je trouve des difficultés à comprendre ce qui est l'acivité sous-jacente que se rapporte à.
  • Qu'est-ce que cela signifie par mappant un segment de mémoire?

Répondre

1

Il y a une bonne explication ici. http://www.makelinux.net/alp/035

« Sous Linux, la mémoire virtuelle de chaque processus est divisé en pages Chaque processus maintient une correspondance entre ses adresses de mémoire à ces pages de mémoire virtuelle, qui contiennent les données réelles . même si chaque processus a ses propres adresses, les correspondances de multiples processus peuvent pointer vers la même page, ce qui permet le partage de la mémoire »

+0

On dirait qu'ils ont tort (à l'envers). Chaque processus a son propre espace d'adressage virtuel et maintient un mappage de l'espace virtuel aux cadres de page dans la mémoire physique, où se trouvent les données. –

2

utiliser comme char *ptr=shmat(seg_id,NULL,0); il se fixe l'ID du segment créé par la fonction shmget() avec le processus qui contient cette code ci-dessus.

seg_id est l'identifiant du segment du segment nouvellement créé NULL signifie que le système d'exploitation prendra en charge l'adresse de départ du segment pour le compte de l'utilisateur 0 est drapeau pour read/write deux

Chaque fois qu'un processus attache à la mémoire partagée il doit être enlevé de sorte qu'un autre processus peut y accéder en attachant à ce segment

à détacher (si le mécanisme de verrouillage des ressources est présent.): shmdt(ptr);

Questions connexes