0

ここでは、2つの異なる端末で同じプログラムの2つのインスタンスを実行しています。それらのプロセスマップは、第1端子にプロセスマップに関する質問

されている - 第二端子で

[email protected]:~$ 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 

-

[email protected]:~$ 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に2つの異なるアドレス(00007f90f279a000と00007f3b0b0cb000)を持っています。このライブラリがメインメモリに2回ロードされているのでしょうか?

  2. 仮定a.outが簡単Hello_World.cプログラムのバイナリ

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

    次に許可W R &を有するのa.outのどの部分? ソース「0000000000601000 4K rw --- /home/vikram/a.out」のどの部分が含まれていると思われますか?

  3. なぜ他のセグメントと同様に連続していないのですか?

  4. 「00007f90f2590000 2044K ----- /lib/x86_64-linux-gnu/libc-2.13.so」このセグメントには、読み込み、書き込み、実行の権限がないため....と書かれています。

答えて

1

1)OSがプロセスを開始した後、動的ローダまたはldが最初に実行されます。これらのアドレスはプロセスの仮想アドレスですが、最終的には同じ物理メモリにマップされます。

2)プロセスのデータセグメント。 (初期化されたデータとBSSの両方) 3)ヒープ、mmap、共有メモリなどのさまざまな目的に使用されます。 4)内部プライベートデータをAFAIKします。