Windows核心编程 - Windows内存体系结构(1)

1. 进程的虚拟地址空间

        每个进程都会有自己的虚拟地址空间,对于一个32位的进程来说,它拥有4GB(2的32次方, 字节)大小的地址空间。对于一个64位的进程来说,它拥有16EB大小的地址空间。每个进程的地址空间是相互隔离的,当进程内的各个线程在执行时,只能访问自己进程内的内存,无法访问其它进程的内存。即进程A的线程无法访问进程B的地址空间的数据结构,反之亦然。 但实际上,进程并没有真正拥有这么大的地址空间,这些空间只是虚拟的,并不是真正的物理空间。为了进程能够正常地读/写数据,实际上需要将物理存储器分配或映射到虚拟的地址空间。

 

2.虚拟地址空间的分区

           每个进程的虚拟地址空间被划分为多个分区,包括如下:

   1)空指针赋值分区

          这一分区的是从0x00000000到0x0000FFFF的闭区间,该分区的目的是为了帮助程序员捕获空指针的赋值,如果进程中的线程试图去读取或写入位于这一分区内的内存地址,就会引发违规访问。

    2)用户模式分区

          这一分区的地址空间因不同的CPU体系而有所区别。 进程无法通过指针来读取、写入或其它任何方式来访问在这一分区中的其它进程的数据。对所有应用程序来说,进程的大部分数据都保存在这一分区。

   3)64KB禁入分区

   4)内核模式分区

         这一分区是操作系统使用的,与线程调度、内存管理、文件系统支持、网络支持以及设备驱动程序相关的代码都会载入到该分区,这一分区内的任何东西为所有进程共有。如果一个应用程序试图读取或写入位于该分区中的内存地址,将引发访问违规。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章