Asignaciones de bibliotecas compartidas en / proc / pid / maps


8

¿Por qué /proc/pid/mapscontiene algunos registros para la misma biblioteca? Aquí hay un ejemplo:

7fae7db9f000-7fae7dc8f000 r-xp 00000000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
7fae7dc8f000-7fae7de8f000 ---p 000f0000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
7fae7de8f000-7fae7de97000 r--p 000f0000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
7fae7de97000-7fae7de99000 rw-p 000f8000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20

Qué significa esto ?

Respuestas:


12

Los cuatro registros tienen permisos diferentes, por lo que no se pueden fusionar.

  • La r-xpentrada describe un bloque de memoria ejecutable ( xindicador de permiso). Ese es el código.
  • La r--pentrada describe un bloque de memoria que solo es legible ( rindicador de permiso). Esos son datos estáticos (constantes).
  • La rw-pentrada describe un bloque de memoria que se puede escribir ( windicador de permiso). Esto es para variables globales de la biblioteca.
  • La ---pentrada describe una porción de espacio de direcciones que no tiene ningún permiso (o memoria asignada).

Todos son privados ( pmarca), lo que significa que si un proceso modifica una página (que solo es posible para la parte que se puede escribir), esa página se copiará (copia en escritura) y otros procesos no verán ningún cambio.

Esa última entrada es una brecha entre el segmento de código y el segmento de datos que se inserta explícitamente por el enlazador GNU bajo ciertas circunstancias. El propósito de esta brecha es garantizar que el código (que se puede compartir entre procesos que usan la misma biblioteca) y los datos que se pueden escribir (no se pueden compartir) nunca estén en la misma página. El tamaño de la brecha es de 2 MB porque es el tamaño de página más grande largest que Linux usa en su arquitectura (amd64). Consulte ¿Cuál es el propósito de las asignaciones de memoria aparentemente inutilizables en Linux? para más detalles.

¹ La mayoría de las páginas son de 4 KB, que es el tamaño de página "normal". Pero puede haber páginas que usan menos indirectas de MMU, lo cual es un poco más rápido pero desperdicia mucho espacio a menos que la aplicación realmente use bloques de memoria muy grandes. Linux llama a estas páginas enormes .

Fuente y más información para la brecha no asignada : ¿Por qué gnome-panel usa 290MB? por RJK. Consulte también la entrada /proc/PID/mapsen la documentación del kernel de Linux , Understanding Linux / proc / id / maps y / proc / $ pid / maps muestra páginas sin permisos rwx en x86_64 linux en Stack Overflow.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.