了解Windows内存管理

原理篇




如果你已经使用Windows有一段时间,你会对虚拟内存和页面文件非常熟悉。在过去,为了在我们内存稀缺的系统中让页面文件尽可能地高效,我们都花费大量的时间来改动虚拟内存设置。

后来,RAM的价格降到了更能让人承受的范围,取代了改动虚拟内存,我可以通过增加更多的RAM来提高系统性能。尽管操作系统仍使用虚拟内存,但是在系统中拥有更多的RAM会减少操作系统对虚拟内存的依赖。

现在,系统中拥有512MB甚至12GB的RAM已经不再是什么稀奇的事情。所以你不必再像过去那样考虑虚拟内存。

然而,这将随着Windows Vista而改变,它带来了一个被称为SuperFetch的新型内存性能增强系统和一种通过外部存储设备的方法扩展虚拟内存的新方法。在本版的Windows Vista报告中,我将更深入的介绍SuperFetch。

虚拟内存

我们先了解一下虚拟内存。首先,重申包括Vista以及现在的win7在内的Windows操作系统都一直在利用虚拟内存是重要的,即使当所有运行的进程所需要的内存没有超出系统中安装的RAM数量。实际上,当系统中每个进程被操作系统导入时,在运行中都自动分配了一个虚拟内存地址。

当由所有运行的进程使用的内存超过了可用的RAM数量时,操作系统将开始把内存空间页面移出虚拟地址空间,移向硬盘,从而释放RAM以备他用。种内存页面的移动称为交换技术而且页面文件经常被称为交换文件。这种交换技术需要许多额外支出。然后这些页面被存储在根分区的一个名为Pagefile.sys(交换文件)的文件中。而当需要再次运行那些被释放的程序时,Windows会到Pagefile.sys中查找内存页面的交换文件,同时释放其它程序的内存页面,再完成当前程序的载入过程。 这种互换内存页面的过程被称之为
“交换”(switch)


            
 



--------------------------------XP 下的预读技术----------------------------------





预读:是

在载入某个程序之前,从磁盘向内存中导入关键数据和代码段,可以理解为预先从硬盘上中载入一部分该程序运行所需的数据到物理内存中,这样便能加快程序的启动速度。记住了这一点,让我们大致了解预读是如何工作的。


               Prefetch

为了让整个预读操作切实地提高性能,WindowsXP缓存管理器在系统启动过程中以及在各种应用程序被导入的时候,监视数据在磁盘和RAM之间以及在RAM和虚拟内存之间的移动。当缓存管理器监视这些事件时,它构造目录和每个应用程序或进程引用的所有文件的映射。这些映射被保存到\Windows\Prefetch文件夹扩展名为.pf的文件中。


 

 


在这些映射文件被创建之后,缓存管理器将在系统启动以及导入应用程序的时候使用它们以提高效率。更明确地,缓存管理器会拦截将被导入的每一个进程或应用程序并且查看\Windows\Prefetch文件夹以确定是否存在相应的映射。如果存在,缓存管理器将指派文件系统立即访问映射中的目录或文件引用。然后缓存管理器将警告内存管理器并告诉它使用映射文件中的信息向内存中导入数据或代码。当这个预读操作完成之后,缓存管理器将允许应用程序或进程继续导入。在应用程序或进程这样做的过程中,它会发现需要的大部分文件和数据已经存在于内存中,因此减少了磁盘访问量并且使得应用程序或进程导入或响应得更迅速。

为了进一步提高这个预读操作的效率,WindowsXP会定期地分析映射文件的内容,编辑一个目录和文件列表,以导入的顺序组织它们,并且将这些信息保存在\Windows\Prefetch文件夹的名为Layout.ini的文件中。然后它会安排磁盘碎片整理程序定期运行并且使用Layout.ini文件中的信息以重新部署所有目录文件,让它们排列在磁盘中临近的区域。


虚拟内存技术虽然解决了内存不足的问题,但在程序运行过程中经常需要载入其它文件到内存中,此时如果物理内存不足,则需要进行换页操作,频繁地读写硬盘,造成程序运行时响应缓慢。


前面我们已经粗略了解了Windows XP操作系统中虚拟内存以及预读技术的机理。仔细思考它们的执行过程,我们不难发现,这项技术从根本上说仍然属于被动式的调度。换句话说,只有在程序主动发起载入请求时,Windows才会进行相关的调度操作。
这也是为什么XP开机时内存占用量少于v/7系统那么多的原因所在.
想要更多了解新系统带来的新技术么?(囧....06年就有了,就是没人爱用),请继续看下文!




------------------------vista/win7下的管理
-------------------------------------



                SuperFetch


Superfetch技术的中心思想是:“过分空余的内存空间即是浪费”。

的确,如果一个操作系统总是保留着过多的空余物理内存耗费电能,却不能够利用这些多余的内存空间提高系统性能的话,为什么不更好地利用这些多余的内存空间呢?将这些多余的物理内存作为缓存使用,就是Superfetch技术的本质。而也正是由于采用了这种以内存为缓存的策略,才造成了Vista对内存容量的饥渴!


既然你知道了WindowsXP的Prefetch技术是如何工作的,你就了解了Windows Vista的SuperFetch技术工作原理的70%。作为WindowsXP的Prefetch的下一版本,SuperFetch包括了Prefetch的所有功能并做的更多。


 
2009-8-21 20:08:00 上传
下载附件 (173 Bytes)



首先,SuperFetch克服了WindowsXP的Prefetch中的一个大缺点。正如我前面解释的,Prefetch通过导入大部分由内存中一个应用程序或进程需要的文件或数据,所以可以在需要时更迅速地访问它们。然而,由于这些文件和数据存在于内存中,所以它们受控制虚拟内存的规则支配。换句话说,当其他应用程序需要访问内存,任何预读的数据会被移出到硬盘上的页面文件中。当再次需要它时,必须将它从页面文件中移回到内存,这当然抵消了性能增强。

SuperFetch更进一步地保证你获得对性能增强的最有效使用。除了构造我前面提到的映射文件之外,SuperFetch还会构造你使用的应用程序的描述文件,它包括你在何时使用和使用的频率等信息。然后,SuperFetch将跟踪描述文件中的应用程序并且记录任何预读数据在何时被移出到页面文件中。SuperFetch将监视引起预读数据被移出到页面文件的应用程序描述文件,并且应用程序一完成,它就将预读数据取回到内存中。所以当你转到访问应用程序,预读数据将在内存中再次可用而且应用程序会快速响应。

               

我们考虑这样一个例子,假设你有在工作的午休时间运行杀毒软件的习惯,那么在下班前,一般会停止处理工作程序,然后运行杀毒软件,此时,如果使用的是WindowsXP,那么操作系统会将工作程序所占用的内存页面写入硬盘交换文件中,并读取杀毒软件的文件载入内存。午休过后,杀毒软件已经运行完毕,但是你在重新开始使用工作程序的时候,系统仍然需要经历杀毒软件和工作程序的硬盘交换文件与内存页面的交换过程,此时程序的响应速度明显降低。

如果系统能够进一步自动记录下这些经常性的操作行为所发生和结束的时间,当时运行的前台和后台软件等等详细情况,那么在内存有空闲空间的时候,就可以在预定的时机预先将一部分文件载入到内存中,这样就避免了上面例子中发生的不愉快情况。这就是superFetch带来最切实际的好处,当然,你的内存"占用量"也是多的吓人,但是从上面的对比和分析可以得出结论
,这个内存"占用"和XP下的"占用"不可同日而语,而是恰恰相反,你需要缓存更多的程序到内存,以加快运行该程序的速度,而如果该程序的内存使用量超过了以前缓存的用量,系统就会自动释放内存和页面文件,而如果是64位操作系统下运行源生64位的程序,会明显体会到先进的内存管理带给我们性能上的提升(本文强调的是内存部分,64位和32位系统的区别不做赘述,简单来讲,这个是因为64位操作系统可以从容地给程序划分连续的物理内存空间,有疑问的话请多用站内搜索)



注:vista和win7的预读技术也存在着小小差异,因为本人能力有限,只能讨论v/7预读功能相同的部分,不同的部分请各位补充完善!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值