Linux_Memory_Address_Mapping
Linux内存地址映射
http://ilinuxkernel.com/?p=1276
[root@localhost Memory_Address_Mapping]# ./mem_map
%ebp:0xBFD56888
tmp address:0xBFD56880
cr4=000006D0 PSE=1 PAE=0
cr3=0ED64000 cr0=8005003B
pgd:0xCED64000
gdtr address:C180B000, limit:FF
gdtr address:C180B000 - PAFE_OFFSET=0x180b000.这个是物理地址
tmp address:0xBFD56880这个地址是逻辑地址,怎么转化成线性地址呢?
tmp address:0xBFD56880,高10位值为0x2ff,表示页目录的索引
cr3=0ED64000寄存器是页目录所在的基地址,第0x2ff项,一项是4个字节
所以地址里面的内容是0x385E3067
000000ED64BF0 00000000 00000000 00000000 385E3067 ............g0^8
0x385E3000是二级页表所在的物理基地址,067是物理偏移,tmp的中间10位是0x156
所以页面地址是0x385E3000+0x156*4=0x385E3558
得到的地址是0x385E2067,最终加上temp的低12位0x385E2880
最终里面存放的数据确实是0x12345678
00000385E2880 12345678
640kb-1M的空间用来做高速缓冲区