Вопросы по карте процесса - PullRequest
       98

Вопросы по карте процесса

0 голосов
/ 29 февраля 2012

Здесь я запускаю два экземпляра одной и той же программы в двух разных терминалах. Карта процесса из них

В первом терминале -

vikram@vikram-Studio-XPS-1645:~$ pmap 6548
6548:   ./a.out
0000000000400000      4K r-x--  /home/vikram/a.out
0000000000600000      4K r----  /home/vikram/a.out
0000000000601000      4K rw---  /home/vikram/a.out
00007f90f2406000   1576K r-x--  /lib/x86_64-linux-gnu/libc-2.13.so
00007f90f2590000   2044K -----  /lib/x86_64-linux-gnu/libc-2.13.so
00007f90f278f000     16K r----  /lib/x86_64-linux-gnu/libc-2.13.so
00007f90f2793000      4K rw---  /lib/x86_64-linux-gnu/libc-2.13.so
00007f90f2794000     24K rw---    [ anon ]
00007f90f279a000    132K r-x--  /lib/x86_64-linux-gnu/ld-2.13.so
00007f90f2992000     12K rw---    [ anon ]
00007f90f29b7000     12K rw---    [ anon ]
00007f90f29ba000      4K r----  /lib/x86_64-linux-gnu/ld-2.13.so
00007f90f29bb000      8K rw---  /lib/x86_64-linux-gnu/ld-2.13.so
00007fffb2333000    132K rw---    [ stack ]
00007fffb23ff000      4K r-x--    [ anon ]
ffffffffff600000      4K r-x--    [ anon ]
 total             3984K

Во втором терминале -

vikram@vikram-Studio-XPS-1645:~$ pmap 6676
6676:   ./a.out
0000000000400000      4K r-x--  /home/vikram/a.out
0000000000600000      4K r----  /home/vikram/a.out
0000000000601000      4K rw---  /home/vikram/a.out
00007f3b0ad37000   1576K r-x--  /lib/x86_64-linux-gnu/libc-2.13.so
00007f3b0aec1000   2044K -----  /lib/x86_64-linux-gnu/libc-2.13.so
00007f3b0b0c0000     16K r----  /lib/x86_64-linux-gnu/libc-2.13.so
00007f3b0b0c4000      4K rw---  /lib/x86_64-linux-gnu/libc-2.13.so
00007f3b0b0c5000     24K rw---    [ anon ]
00007f3b0b0cb000    132K r-x--  /lib/x86_64-linux-gnu/ld-2.13.so
00007f3b0b2c3000     12K rw---    [ anon ]
00007f3b0b2e8000     12K rw---    [ anon ]
00007f3b0b2eb000      4K r----  /lib/x86_64-linux-gnu/ld-2.13.so
00007f3b0b2ec000      8K rw---  /lib/x86_64-linux-gnu/ld-2.13.so
00007fffb1153000    132K rw---    [ stack ]
00007fffb11c7000      4K r-x--    [ anon ]
ffffffffff600000      4K r-x--    [ anon ]
 total             3984K

Мои вопросы -

  1. "/ lib / x86_64-linux-gnu / ld-2.13.so" эта библиотека имеет два разных адреса в терминалах 1 и 2 (00007f90f279a000 и 00007f3b0b0cb000). Это означает, что эта библиотека загружается 2 раза в основную память?

  2. Предполагая, что a.out является двоичным файлом простой программы Hello_World.c

    #include<stdio.h>
    void main()
    { printf("Hello World");}
    

    тогда какая часть a.out имеет разрешение r & w? Проще говоря, какая часть источника «0000000000601000 4K rw --- /home/vikram/a.out» должна содержать этот сегмент?

  3. Почему anon не является непрерывным, как другие сегменты?

  4. Что "00007f90f2590000 2044K ----- /lib/x86_64-linux-gnu/libc-2.13.so" предполагается, что этот сегмент содержит ...., поскольку он не имеет операций чтения, записи, выполнения разрешения.

1 Ответ

1 голос
/ 24 марта 2012

1) Динамический загрузчик или ld выполняется первым после запуска ОС. Эти адреса являются виртуальными адресами процесса, но в конечном итоге будут отображаться в одну и ту же физическую память.

2) данные сегмента процесса. (как инициализированные данные, так и BSS) 3) Используются различные цели, такие как куча, mmap и любая общая память и т. Д. 4) AFAIK свои внутренние личные данные.

...