分类: LINUX
2011-07-05 17:58:13
[root@test1 ~]# gcc -nostdlib -o pause pause.s
[root@test1 ~]# ./pause &
[1] 30203
查看PID为30203的进程映射
[root@test1 ~]# pmap -x 30203
30203: ./pause
Address Kbytes RSS Anon Locked Mode Mapping
00fc6000 4 - - - r-x-- [ anon ]
08048000 4 - - - r-x-- pause
bf860000 84 - - - rwx-- [ stack ]
-------- ------- ------- ------- -------
total kB 92 - - -
这里我们看到了映射了三个段.
pause是exec的系统调用,exec将代码映射到一个只读的页内,页地址为0x08048000.
[ stack ]是这个进程分配最大的一块,为84KB,它是exec建立的一个栈.
[ anon ]是anonymous映射Linux2.6中新的部分,用于在IA32上更有效地进行系统调用.
通过pmap -d PID可以查看映射文件所处的device信息,如下
[root@test1 ~]# pmap -d 2965
2965: ./pause
Address Kbytes Mode Offset Device Mapping
00110000 4 r-x-- 0000000000110000 000:00000 [ anon ]
00b51000 100 r-x-- 0000000000000000 008:00001 ld-2.5.so
00b6a000 4 r-x-- 0000000000018000 008:00001 ld-2.5.so
00b6b000 4 rwx-- 0000000000019000 008:00001 ld-2.5.so
00b6e000 1244 r-x-- 0000000000000000 008:00001 libc-2.5.so
00ca5000 8 r-x-- 0000000000137000 008:00001 libc-2.5.so
00ca7000 4 rwx-- 0000000000139000 008:00001 libc-2.5.so
00ca8000 12 rwx-- 0000000000ca8000 000:00000 [ anon ]
08048000 4 r-x-- 0000000000000000 008:00001 pause
08049000 4 rw--- 0000000000000000 008:00001 pause
b7ef9000 4 rw--- 00000000b7ef9000 000:00000 [ anon ]
b7f0e000 4 rw--- 00000000b7f0e000 000:00000 [ anon ]
bfb0c000 88 rw--- 00000000bfb0c000 000:00000 [ stack ]
mapped: 1484K writeable/private: 120K shared: 0K
分析
008:00001是指主设备节点8,从设备节点1,也就是sda1设备.
[ anon ]和[ stack ]没有设备节点.
同样的,我们查看/proc/PID/maps也可以看到相关的进程信息.
cat /proc/2965/maps
00110000-00111000 r-xp 00110000 00:00 0 [vdso]
00b51000-00b6a000 r-xp 00000000 08:01 3704501 /lib/ld-2.5.so
00b6a000-00b6b000 r-xp 00018000 08:01 3704501 /lib/ld-2.5.so
00b6b000-00b6c000 rwxp 00019000 08:01 3704501 /lib/ld-2.5.so
00b6e000-00ca5000 r-xp 00000000 08:01 3704502 /lib/libc-2.5.so
00ca5000-00ca7000 r-xp 00137000 08:01 3704502 /lib/libc-2.5.so
00ca7000-00ca8000 rwxp 00139000 08:01 3704502 /lib/libc-2.5.so
00ca8000-00cab000 rwxp 00ca8000 00:00 0
08048000-08049000 r-xp 00000000 08:01 327684 /root/pause
08049000-0804a000 rw-p 00000000 08:01 327684 /root/pauseb7f0e000-b7f0f000 rw-p b7f0e000 00:00 0
bfb0c000-bfb22000 rw-p bfb0c000 00:00 0 [stack]
三)PAE技术
最后我们说下PAE技术,PAE技术是Intel公司推出的,全称是Physical Address Extensions,也就是物理地址扩展.
它有以下的特点:
1)页面地址从20bit扩大到24bit,偏移量仍然是12bit,有效物理地址是36bit
2)总的寻址为64GB(2的36次方)的RAM.
3)CR3在非PAE系统上指向页目录表在PAE系统中,它指向目录指针表的基地址(目录指针表是新的页表级别,简称PDPT).
4)在启用PAE系统时,一个物理地址映射要经过页目录指针表/页目录/页表/页表项,最后找到其物理地址.
5)在启用PAE寻址时,虚拟地址/线性地址还是32位,物理地址为36位,虚拟地址的格式为:
位31和30:指向PDPT中4项中的一项.
位29-21:指向页目录中512个项中的一个.
位20-12:指向页表中512项中的一个.
位11-0:4KB页中的偏移量.