【问题标题】:Questions on Process Map关于流程图的问题
【发布时间】:2012-03-19 06:10:19
【问题描述】:

在这里,我在两个不同的终端中运行同一程序的两个实例。他们的流程图是

在第一个终端 -

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. What " 00007f90f2590000 2044K ----- /lib/x86_64-linux-gnu/libc-2.13.so " 这个段假设包含 .... 因为它没有读、写、执行权限。

【问题讨论】:

    标签: memory-management process virtual-memory pmap memory-segmentation


    【解决方案1】:

    1) 动态加载器或 ld 是 OS 启动进程后首先执行的。这些地址是进程的虚拟地址,但最终会映射到相同的物理内存。

    2) 进程的数据段。 (初始化数据和BSS) 3) 它用于各种用途,例如堆、mmap 和任何共享内存等。 4) AFAIK 其内部私有数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多