Windows AWE API 内存分配和普通内存分配的不同点

简介:

以下观点可能和实际情况有点不符合,因为本人没有阅读过微软的内部文档,也找不到其他资料

只能根据现有的资料,推测,希望懂的人或者牛人能够指点。指出其中的问题,欢迎拍砖

普通内存分配方式:

  图的左边,是普通内存分配方式。

  当程序中的虚拟内存提交时,程序会向系统申请内存,系统会分配一个PFN,一个PFN包含了很多信息,主要是代表内存页,有时候也可以把它看成内存页,这样比较容易理解

  PTE是如果从VAS 也就是 虚拟内存,提交到物理内存时,PTE会记录映射的信息。

  普通分配的基本流程可能是这样。申请到PFN 后,PTE 会映射到相应的PFN,并把VAS中的页读到PFN对应的物理内存页中。

  这个感觉比较简单

AWE内存分配:

  对SQL Server 了解比较深的朋友会知道,SQL Server 启用了AWE之后,分配的内存将会被锁住,也就是 locked page,在程序停止前是无法被释放的。

  当程序想系统以AWE方式请求内存时,系统会从PFN Database 也就是一个管理 PFN 的地方,申请出一块内存,并把 PFN 对应的物理内存映射到虚拟内存中。

     也就是虚拟内存通过指针指向了物理内存。请看图:

            

                                                 

    在PFN映射到虚拟内存的时候,PTE会被分配,与PFN绑定加锁。但是PFN的内存已经映射到了虚拟内存中,PFN会把指向内存的指针指到PTE上。

    所以,PTE无法探测出有多少内存被AWE分配到了程序中。因此也无法对AWE分配的内存做页换出,造成Locked Page。




    本文转自 Fanr_Zh 博客园博客,原文链接:http://www.cnblogs.com/Amaranthus/archive/2011/12/09/2281424.html,如需转载请自行联系原作者





相关文章
|
7月前
|
监控 编译器 API
[笔记]Windows核心编程《二十二》注入DLL和拦截API(一)
[笔记]Windows核心编程《二十二》注入DLL和拦截API
146 0
|
4月前
|
API Python Windows
python3应用windows api对后台程序窗口及桌面截图并保存的方法
python3应用windows api对后台程序窗口及桌面截图并保存的方法
104 1
|
7月前
|
存储 缓存 API
[总结]Windows Crypto API 自动更新根证书问题原因及解决方案
[总结]Windows Crypto API 自动更新根证书问题原因及解决方案
|
7月前
|
API Windows
[笔记]Windows核心编程《番外篇》常用的NT API及使用示例
[笔记]Windows核心编程《番外篇》常用的NT API及使用示例
|
7月前
|
安全 API Windows
[笔记]Windows核心编程《二十二》注入DLL和拦截API(三)
[笔记]Windows核心编程《二十二》注入DLL和拦截API(三)
138 0
|
7月前
|
消息中间件 编解码 安全
[笔记]Windows核心编程《二十二》注入DLL和拦截API(二)
[笔记]Windows核心编程《二十二》注入DLL和拦截API(二)
104 0
|
7月前
|
API C++ Windows
Windows API Hooking 学习
Windows API Hooking 学习
|
11月前
|
缓存 安全 Unix
C/C++使用Windows的API实现共享内存以及同步
C/C++使用Windows的API实现共享内存以及同步
775 0
|
11月前
|
安全 Java 编译器
如何用 Go 调用 Windows API | 青训营笔记
如何用 Go 调用 Windows API | 青训营笔记
832 0
|
12月前
|
API Windows
刘金玉的零基础VB教程073期:windows API使用入门 sleep
刘金玉的零基础VB教程073期:windows API使用入门 sleep
134 0