首页 > C > Hello world与编程基础 阅读:57,774

系统与程序的内存布局

在我们开始内核调试之前,首先我们需要对系统的内存内核层与应用层的布局有一个基本认识。以X86为例,X86支持32位寻址,因此可以支持最大232=4GB的虚拟内存空间(当然也可以通过PAE将寻址空间扩大到64GBPAEPhysical address extensionx86的处理器增加了额外的地址线以选择那些增加了的内存,所以实体内存的大小从32位增加到了36位。最大的实体内存由4GB增加到了64GB)。如下图所示,在4G的虚拟地址空间中,Windows系统的内存主要分为内核空间和应用层空间上下两部分,每部分各占约2GB,其中还包括了一个64KBNULL空间以及非法区域,虚拟地址再通过页表机制映射到物理地址以便存取物理内存中的数据和指令。

 

X64AMD64)的内存布局与X86的内存布局类似,不同的地方在于各自空间的范围和大小不同,同时X64下还存在着一些空洞(hole)。在X64内存理论上支持最大264的寻址空间,但实际上这个空间太大了,目前根本用不完,因此实际上的X64系统一般都只支持到40多位(比如Windows支持44位最大寻址空间为16TBLinux 支持48位最大寻址空间256TB等),支持的空间达到了TB级别。但是,无论是在内核空间还是在应用层空间,这些上TB的空间并不都是可用的,存在着所谓的空洞(HOLE)。

 

 

分区

X86 32

Windows

X64 64

Windows

空指针

赋值

分区

0x00000000

0x0000FFFF

0x00000000'00000000

0x00000000'0000FFFF

用户模式

分区

0x00010000

0x7FFEFFFF

0x00000000'00010000

0x000007FF'FFFEFFFF

64KB禁入

分区

0x7FFF0000 0x7FFFFFFF

0x000007FF'FFFF0000

0x000007FF'FFFFFFFF

内核模式

分区

0x80000000

0xFFFFFFFF

0x00000800'00000000

0xFFFFFFFF'FFFFFFFF

 

 

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注