转载于:http://blog.sina.com.cn/s/blog_600ffbf20100gy6w.html

Address WindowingExtensions

Widnows中的Address WindowingExtensiongs功能允许应用程序存取超过4GB的物理内存。32位的指针是一个整型,只能够存储小于等于0xFFFFFFFF的值,因此只能够引用一个4GB的线性内存地址空间。AWE使应用程序可以突破这个限制,存取所有操作系统支持的内存。

在概念上,AWE并不是一个新的东西,实际上,从计算机诞生开始,操作系统和应用程序就围绕指针限制开始使用类似的机制来处理。例如回到DOS时代,32位扩展(象PharLap、Plinks及其它的一些)就普遍运用于16位应用程序,以存取正常地址空间之外的内存。用于扩展内存特殊用途的管理器、API非常普遍。也许你还记得象QuarterdeckQEMM-386这样的产品,在那个时代普遍的用于这类用途中。在这些允许指针存取超过本身表达范围的内存的机制中,具有代表性的方式,是在指针可直接存取的地址空间中提供一个窗口或者是区域,用于和指针无法直接存取的内存区域的转换。这正是AWE的工作原理:在进程地址空间中提供一个区域,或者说一个窗口,用作和usermode的代码无法直接存取的内存区域进行内存存取交换的中专站。

为了使用AWE,应用程序必须:(译者注:下面讲的"需要存取的物理内存"指那些usermode进程在自己的地址空间中无法直接访问到的内存)

1. 使用Win32的AllocateUserPhisycalPagesAPI函数分配要存取的物理内存。该函数需要调用者具有将内存页锁定的权限。

2. 使用VirtualAllocAPI函数在进程的地址空间中创建一个区域,作为与需要存取的物理内存进行映射的一个窗口。

3.使用MapUserPhysicalPages或者MapUserPhysicalPagesScatterAPI函数,将需要存取的物理内存映射到这个虚拟内存窗口中。

Windows2000及后续版本支持AWE,尽管可以在低于2G物理内存的机器上使用AWE,但一般只是在2G或者超过2G内存的机器上使用,因为AWE是32位进程存取超过3GB内存的唯一方法。如果你在低于3GB物理内存的系统上,在SQLServer中启用AWE支持,系统会忽略这个选项并使用正常的虚拟内存管理方法。AWE内存一个比较有意思的特性是它不会使用磁盘,你将注意到AWE相关的API函数只对物理内存进行存取,这就是说AWE内存就是物理内存,不会与系统分页文件发生交换。

用于AWE提供的物理内存缓存的虚拟内存窗口,需要具有读、写存取权限,因此当你设置这个虚拟窗口时,传给VirtualAlloc的保护属性只能是PAGE_READWRITE。这也意味着你无法使用VirtualProtect保护这个区域中的内存页,来防止被修改或存取。

注意:你常用的一些检测应用程序内存使用的工具,例如任务管理器、Perfmon/Sysmon等,都无法显示各个进程AWE内存的使用量。并没有什么可以指示各个进程AWE内存的使用量,也就没有什么可以报告给定进程工作区中AWE内存的大小。

/3GB vs AWE

在Windows的内存管理功能中,Application MemoryTuning(/3GB)可以给私有进程增加50%的地址空间,使用方便,因此成为一种常用方法,但AWE功能更具有弹性和扩展性。前面提到,当你为私有进程地址空间增加1GB,这1GB来自kernalmode的地址空间,kernal mode地址空间也由2GB被压缩到1GB。对于kernalmode代码,完整2GB的工作空间已经显得狭窄,压缩这部分空间意味着某些内部核心结构也必须要压缩。这些结构中主要有机器上用于管理内存的表窗口(tableWindows)。当你将kernalmode部分压缩到1GB后,这个表最大就只能管理16GB的物理内存了。例如你在一台具有64GB物理内存的机器上运行Windows2000DataCenter,启动时使用了/3GB选项,你就只能够存取这台机器25%的内存,剩余的48BG将无法被操作系统和应用程序使用。AWE允许你访问超过3GB的内存,而通过/3GB,你仅仅为私有进程空间获得额外的1GB。LargeAddress Aware自动透明的使得这个额外空间对应用程序可用,但它被限制在1GB之内。理论上,AWE通过Win32 AWEAPI函数,使得所有对操作系统可用的物理内存对应用程序可用。尽管AWE更难于使用和存取,但它更具弹性和扩展。

并不是说任何情况下AWE都比/3GB好,只是通常状况下是这样。比如说当你需要很多空间以分配内存,而又不能放在AWE内存中(例如象线程栈ThreadStacks、锁内存Lock Memory、存储过程计划Procedure Plans等),你也许会发现/3GB更合适。

AWE /3GB 内存扩展技术相关推荐

  1. 小米6内存测试软件,小米6有救了?MIUI测试内存扩展技术,原理是什么?

    原标题:小米6有救了?MIUI测试内存扩展技术,原理是什么? 由于Android底层运行机制原因,长时间使用后会导致卡顿现象,主流APP的身材愈发"臃肿"更令卡顿雪上加霜,多开几个 ...

  2. 小米6X刷机升级MIUI13实现内存扩展(新手教程)

    写在前面 今天把五年前的古董机刷了小米最新的操作系统,不仅界面颜值得到了提升,机器性能也实现了质的飞跃,这要得益于MIUI13的内存扩展技术.本人4GB运行内存的手机在刷入MIUI13后直接提升为7G ...

  3. 中兴服务器扩展内存,中兴首发内存融合技术 Pro:12GB RAM 变 20GB,支持 OTA 更新...

    IT 之家 7 月 23 日消息 感谢 IT 之家网友热心线索投递,中兴 Axon 30 屏下版的 MyOS 11 系统现引入全新内存融合技术 Pro,容量 +8GB,可实现 12GB+8GB=20G ...

  4. android融合存储,科技瞭望台:8G真能变12G?详解手机内存融合技术

    科技瞭望台:8G真能变12G?详解手机内存融合技术 2021年04月27日 12:55作者:陈沐梁编辑:陈沐梁文章出处:泡泡网原创 分享 近段时间,内存融合或者说内存拓展技术,经常在不少手机厂商的宣传 ...

  5. Linux内存池技术

    看到一篇关于内存池技术的介绍文章,受益匪浅,转贴至此. 原贴地址:http://www.ibm.com/developerworks/cn/linux/l-cn-ppp/index6.html 6.1 ...

  6. 分布式内存数据技术为查询提速

    背景和需求 中国铁路客户服务中心网站(www.12306.cn)是世界规模最大的实时交易系统之一,媲美Amazon.com,节假日尤其是春节的访问高峰,网站压力巨大.据统计, 在2012年初的春运高峰 ...

  7. Arm v9 “机密计算架构(CCA)” 中机密领域管理扩展技术(RME)是什么?

    机密领域管理扩展技术(RME)是什么? 1 Overview 2 Security states 2.1 Controlling the current Security state 2.2 Movi ...

  8. 2.5.13 动态内存扩展AME

    最后更新2021/08/01 AME技术目的是压缩内存中的数据,因此减少物理内存使用量,从某种意义上提升系统IO性能.个人看来,这是个有毒无用的功能,因为AME的基础是用CPU的部分算力,尽管可以是额 ...

  9. 【池化技术】内存池技术原理和C语言实现

    文章目录 一.基础概念 1.一个可执行程序占用的内存分为哪几个区?一个进程的虚拟内存区域有哪些? 2.静态内存分配和动态内存分配 二.malloc实现原理 malloc内存分配(下面算是正常一般的情况 ...

  10. java 内存池_内存池技术介绍(图文并茂,非常清楚)

    看到一篇关于内存池技术的介绍文章,受益匪浅,转贴至此. 6.1 自定义内存池性能优化的原理 如前所述,读者已经了解到"堆"和"栈"的区别.而在编程实践中,不可避 ...

最新文章

  1. android vectorDrawable使用笔记(一)
  2. Django 基于角色的权限控制
  3. js中输出变量的类型和输出对象的的属性/方法/成员函数
  4. word List 47
  5. ORACLE 11G负载均衡测试
  6. mysqldump备份原理及注意事项
  7. 热烈庆贺泰山字体引擎取得关键性突破
  8. ThinkPHP扩展,实现Redis的CURD操作。
  9. 傻瓜攻略(十九)——MATLAB实现SVM多分类
  10. 使用WebStorm开发web前端 网页中文乱码问题的解决方案
  11. 【PTA】中M22春C、Java入门练习7-138 质因子分解
  12. spring boot中如何实现在手机注册和登录时获取验证码(阿里短信服务)
  13. 服务器安全(防止被攻击)
  14. java.lang.ArrayStoreException
  15. 原型模式-广告邮件推送
  16. 内部存储空间不足_手机存储空间不足教你快速解决
  17. 【房卡棋牌教程】,制作进入房间小界面
  18. 从Google表格中的字符串中提取多个特定长度的数字子串的解决思路
  19. 解决:Error: geom_point requires the following missing aesthetics: y Run `rlang::last_error()`
  20. 剑指offer编程题(JAVA实现)——第38题:二叉树的深度

热门文章

  1. 使用LL库开发STM32:UART基础使用
  2. 使用Chrome调试JavaScript
  3. objectc:dictionary使用
  4. 计算机中应用管理在哪里,应用程序管理器在哪里
  5. 计算机网络实验(Wireshark 抓包工具使用、WinPcap 编程、协议分析流量统计程序的编写)
  6. OSChina 周六乱弹 —— 谁小时候没当过熊孩子呀
  7. 建文高考成绩查询2021,2021届新高考语文强化模拟卷(三).pdf
  8. http转https后资源加载不显示
  9. 2020软科中国计算机学科排名,【智库数据】基于2020软科中国最好学科排名的学科动态发展跟踪...
  10. Bigemap APP(Android)手机离线地图使用说明