Mapping di librerie condivise in / proc / pid / maps


8

Perché /proc/pid/mapscontiene alcuni record per la stessa libreria? Ecco un esempio:

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

Cosa significa questo ?

Risposte:


12

I quattro record hanno autorizzazioni diverse, quindi non possono essere uniti.

  • La r-xpvoce descrive un blocco di memoria eseguibile ( xflag di autorizzazione). Questo è il codice.
  • La r--pvoce descrive un blocco di memoria che è solo leggibile ( rflag di autorizzazione). Sono dati statici (costanti).
  • La rw-pvoce descrive un blocco di memoria che è scrivibile ( wflag di autorizzazione). Questo è per le variabili globali della libreria.
  • La ---pvoce descrive una porzione di spazio degli indirizzi che non ha autorizzazioni (o memoria associata).

Tutti sono privati ​​( pflag), il che significa che se un processo modifica una pagina (che è possibile solo per la parte scrivibile), quella pagina verrà copiata (copia su scrittura) e altri processi non vedranno alcun cambiamento.

Quest'ultima voce è un divario tra il segmento di codice e il segmento di dati che è esplicitamente inserito dal linker GNU in determinate circostanze. Lo scopo di questo divario è garantire che il codice (condivisibile tra i processi che utilizzano la stessa libreria) e i dati scrivibili (non condivisibili) non siano mai nella stessa pagina. La dimensione del gap è di 2 MB perché è la dimensione della pagina più grande¹ che Linux usa sulla tua architettura (amd64). Vedi Qual è lo scopo di mappature di memoria apparentemente inutilizzabili in Linux? per ulteriori dettagli.

¹ La maggior parte delle pagine sono 4kB, che è la dimensione della pagina "normale". Ma ci possono essere pagine che usano meno indicazioni indirette MMU, che sono leggermente più veloci ma sprecano molto spazio a meno che l'applicazione non utilizzi effettivamente blocchi di memoria molto grandi. Linux chiama queste pagine enormi .

Fonte e maggiori informazioni per il divario non mappato : Perché gnome-panel utilizza 290 MB? da RJK. Vedi anche la voce /proc/PID/mapsnella documentazione del kernel Linux , Comprensione di Linux / proc / id / maps e / proc / $ pid / maps mostra le pagine senza permessi rwx su Linux x86_64 su Stack Overflow.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.