linux内存映射,内存分布情况

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的空间用来做高速缓冲区

你可能感兴趣的:(linux内存映射,内存分布情况)