2009-11-30 12 views
0

Envisagez this car cette région mappe les fichiers comme des bibliothèques chargées dynamiquement, je pense qu'il devrait idéalement grandir. ceci peut être implémenté en démarrant la région mmap entre RLIMIT_STACK et le début du tas. quels problèmes se produiraient dans ce cas.Pourquoi la région mappée en mémoire se développe-t-elle sous Linux?

si elle diminue, alors comment est créée une nouvelle région mappée en mémoire. Supposons que nous souhaitons mapper le code pour abc.so dans l'espace d'adressage virtuel, alors nous devrions créer l'espace sizeof (abc.so), dans le sens descendant et le fichier de carte commençant au bas de cette région. est-ce comment cela fonctionne?

Répondre

1

Etes-vous sûr de ne pas confondre "up" dans le diagramme avec "up" dans le sens de l'augmentation des adresses? Notez que le diagramme a l'adresse basse dans le haut [Edit: Non en fait, il a l'adresse faible au fond, mon mauvais].

La zone cartographiée croît vers les adresses les plus basses. Pourquoi pensez-vous qu'il devrait croître dans l'autre direction? Si les fichiers mappés et le tas commencent dans des directions opposées de l'espace adresseet croissent l'un vers l'autre, vous optimisez l'utilisation de l'espace adresse avant la collision des zones. Lorsque vous mappez un fichier, vous mappez simplement une plage contiguë d'adresses à sauvegarder par le fichier (de faible à élevée, ce que vous attendez de ). Lorsque vous accédez à une page, une erreur de page se produit et le contenu du fichier est copié dans le cadre de la page de mémoire.

+0

Je suis assez sûr que l'adresse 0 est au bas de ce diagramme .. –

+0

droite, et aussi la pile se développe vers le bas, c'est-à-dire vers les adresses inférieures. –

+0

Leurs yeux sont la première chose que vous allez aveugle dans ... Désolé. Quoi qu'il en soit, il est assez arbitraire de voir comment le tas et les régions de fichiers mappés se développent puisqu'ils sont alloués en blocs. –