Memory management 关于流程图的问题

Memory management 关于流程图的问题,memory-management,process,virtual-memory,pmap,memory-segmentation,Memory Management,Process,Virtual Memory,Pmap,Memory Segmentation,在这里,我在两个不同的终端上运行同一程序的两个实例。它们的流程图如下所示 在第一航站楼- 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

在这里,我在两个不同的终端上运行同一程序的两个实例。它们的流程图如下所示

在第一航站楼-

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
我的问题是-

  • “/lib/x86_64-linux-gnu/ld-2.13.so”此库在终端1和2中有两个不同的地址(00007f90f279a000和00007f3b0b0cb000)。这是否意味着该库在主内存中加载了2次

  • 假设a.out是简单Hello_World.c程序的二进制

    #include<stdio.h>
    void main()
    { printf("Hello World");}
    
    #包括
    void main()
    {printf(“你好,世界”);}
    
    那么a.out的哪一部分有r&w许可? 简单地说,这个段应该包含源“0000000000 601000 4K rw---/home/vikram/a.out”的哪一部分

  • 为什么anon不像其他片段一样是连续的

  • “00007f90f2590000 2044K-----/lib/x86_64-linux-gnu/libc-2.13.so”这个段应该包含什么。。。。因为它没有读、写、执行权限

  • 1) 动态加载程序或ld是操作系统启动进程后第一个执行的。这些地址是进程的虚拟地址,但最终会映射到相同的物理内存

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