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

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

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

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. Почему анон не является непрерывным, как другие сегменты?

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


person Vikram    schedule 29.02.2012    source источник


Ответы (1)


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

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

person Sachin    schedule 24.03.2012