[转]详述系统预读文件(PREFETCH)技巧透彻了解磁盘的碎片整理

     为了提高系统的性能,加快系统的启动、文件读取的速度,Windows XP/Server 2003中增加了预读取功能。Windows XP/Server 2003系统盘下的Windows\\Prefetch文件夹,就是预读取所在的文件夹,且在Prefetch文件夹中有许多以PF为扩展名的文件,这就是系统生成的预读取文件。但是这个功能如果用不好,时间一长,会生成大量的预读取文件, 占用宝贵的硬盘空间,导致系统搜索花费的时间更长,加重系统搜索的负担,使系统运行速度变慢。因此,只有管好、用好这些预读取文件,才能始终保持系统性能最佳化,让系统跑得更快、更顺畅。

 

Prefetch
Windows Vista的SuperFetch构建在由Windows XP引入的被称为Prefetch的技术之上,所以在了解SuperFetch和EMD之前,最好让我们先谈谈它。首先,预取是操作系统实际需要之前,从磁盘向内存中导入关键数据和代码段的进程。记住了这一点,让我们大致了解预取是如何工作的。
为了让整个预取操作切实地提高性能,Windows XP缓存管理器在系统启动过程中以及在各种应用程序被导入的时候,监视数据在磁盘和RAM之间以及在RAM和虚拟内存之间的移动。当缓存管理器监视这些事件时,它构造目录和每个应用程序或进程引用的所有文件的映射。这些映射被保存到\Windows\Prefetch文件夹扩展名为.pf的文件中。
在这些映射文件被创建之后,缓存管理器将在系统启动以及导入应用程序的时候使用它们以提高效率。更明确地,缓存管理器会拦截将被导入的每一个进程或应用程序并且查看\Windows\Prefetch文件夹以确定是否存在相应的映射。如果存在,缓存管理器将指派文件系统立即访问映射中的目录或文件引用。然后缓存管理器将警告内存管理器并告诉它使用映射文件中的信息向内存中导入数据或代码。当这个预取操作完成之后,缓存管理器将允许应用程序或进程继续导入。在应用程序或进程这样做的过程中,它会发现需要的大部分文件和数据已经存在于内存中,因此减少了磁盘访问量并且使得应用程序或进程导入或响应得更迅速。
为了进一步提高这个预取操作的效率,Windows XP会定期地分析映射文件的内容,编辑一个目录和文件列表,以导入的顺序组织它们,并且将这些信息保存在\Windows\Prefetch文件夹的名为Layout.ini的文件中。然后它会安排磁盘碎片整理程序定期运行并且使用Layout.ini文件中的信息以重新部署所有目录文件,让它们排列在磁盘中临近的区域。

SuperFetch
既然你知道了Windows XP的Prefetch技术是如何工作的,你就了解了Windows Vista的SuperFetch技术工作原理的70%。作为Windows XP的Prefetch的下一版本,SuperFetch包括了Prefetch的所有功能并做的更多。
首先,SuperFetch克服了Windows XP的Prefetch中的一个大缺点。正如我前面解释的,Prefetch通过导入大部分由内存中一个应用程序或进程需要的文件或数据,所以可以在需要时更迅速地访问它们。然而,由于这些文件和数据存在于内存中,所以它们受控制虚拟内存的规则支配。换句话说,当其他应用程序需要访问内存,任何预取的数据会被移出到硬盘上的页面文件中。当再次需要它时,必须将它从页面文件中移回到内存,这当然抵消了性能增强。
SuperFetch更进一步地保证你获得对性能增强的最有效使用。除了构造我前面提到的映射文件之外,SuperFetch还会构造你使用的应用程序的描述文件,它包括你在何时使用和使用的频率等信息。然后,SuperFetch将跟踪描述文件中的应用程序并且记录任何预取数据在何时被移出到页面文件中。SuperFetch将监视引起预取数据被移出到页面文件的应用程序描述文件,并且应用程序一完成,它就将预取数据取回到内存中。所以当你转到访问应用程序,预取数据将在内存中再次可用而且应用程序会快速响应。

如果你使用Windows XP操作系统,那么请注意磁盘碎片整理的问题。
 
1.为什么要需要整理碎片  
磁盘上的文件布局会强烈地影响I/O性能,严重碎片化的或散布在磁盘中的文件和目录会损害性能,虽然Windows XP会自动重定位某些文件来改善性能,但通常情况下,这并非属于系统必须的常规,而且通常情况下也仅包含磁盘上很小部分的文件。  
 
从这方面来考虑,应该在系统安装结束后立即对磁盘进行完整的碎片整理。默认情况下,WindowsXP每隔3天就会执行一次局部碎片整理,并根据当天的使用情况调整文件在磁盘上的物理位置,所移动的文件将被写入Layout.ini文件,这是Windows XP认为应该按照这一顺序来安排文件在磁盘上的物理位置,该文件的路径在C:\Windows\Prefetch。  
 
系统在空闲时会自动整理磁盘碎片,此时会首先读取Layout.ini文件中的内容,并针对其中涉及的文件进行局部的碎片整理,这也是磁盘整理程序转移文件位置的依据。
 
2.深入认识Prefetch目录  
在Windows XP及其以后的操作系统中,增加了预读取功能(也可以理解为“预先装载”),该功能可以提高系统的性能,加快系统的启动、文件读取的速度,这些预读文件保存在%systemroot%\Prefetch目录中,以*.pf为扩展名,这些*.pf文件包括了载入文件的详细信息和载入顺序。  
 
每一个应用程序,包括Windows XP的启动过程,都会在PrefetCh目录下留下相应的预读取文件,预读取文件描述了应用程序或启动时各个模块的装载顺序,其命名方式是以应用程序的可执行文件的名字为基础,加上一个“-”和描述执行文件完整路径的十六进制值,再加上文件扩展名.pf,例如QQ.EX-0065A2A1.pf。每当用户启动一个程序,会自动在Prefetch目录中对应的*.pf文件中留下一条记录。不过,Windows XP启动的预读取文件总是同一个名称,即NTOSBOOT-B00DFAAD.PF,其中包含着启动时载入文件的记录。  
 
当下一次启动系统或运行某个程序时,Windows会参考相应的*.pf文件,将其中记录的所有文件载入内存,而不是象以往一项一项依指令逐个载入文件。另外,Windows会利用启动程序或程序的*.pf文件制订一个最优化的磁盘分配方案,这个方案的相关信息存储在Lyaout.ini文件中。
 
3.不让系统自动整理磁盘碎片  
有时候,你可能会觉得局部碎片整理的功能非常无聊,因为磁盘的碎片整理也会对硬盘进行某种程度的操作。网上流传着关于通过修改注册表键值来禁用局部碎片整理的技巧,看似有理,但事实上,这些所谓技巧是完全无效的。事实上,你即使将C:\Windows\Prefetch\目录下的文件全部删除,重新启动系统后仍旧会自动创建Layout.ini文件,届时3天1次的局部碎片自动整理功能会被重新激活。闪此正确的方法是用记事本打开Layout.ini文件,将其中的内容全部删除,并将这个文件设置为只读属性,这样Windows XP就无法激活局部碎片自动整理功能了,当然你也就不用担心C:\Windows\Prefetch\会变得越来越庞大。
 
4.进一步的讨论  
我们经常可以从网上看到关于修改注册表键值以提高Windows XP启动速度的技巧,这些技巧真的是有效的吗?下面,我们结合磁盘碎片整理的实例来进行深入一步的探讨:  
 
问题一:C盘为什么无法进行碎片整理?  
Windows XP系统,在对C盘进行碎片整理时,提示由于C:\Windows\prefetch\WMIPRVSE.EXE-28F301A9.PF文件损坏,扫描无法继续。  
 
C:\Windows\Prefetch\是Windows XP的预读文件夹,Windows XP将频繁使用的数据存放在预读文件夹中,需要再次使用这些数据时可以大大加快读取速度,但随着时间的增长,这个文件夹的个头会变得越来越大,而且可能会存在一些死链文件,此时如果执行碎片整理,就有可能出现上面提到的错误,解决的办法是清空这个文件夹,然后整理碎片。
 
问题二:启动时也能整理碎片?  
Windows XP可以在启动时进行碎片整理,使那些启动所必须的文件能够相邻排列,从而在下次启动时提高速度,不过该功能在默认设置下是被关闭了的。激活的办法是打开注册表编辑器,找到HKEY_LOCAL_MAHCINE\SOFTWARE\Dfrg\BootOptimizeFunetion,双击右侧窗格中的Enable键,将键值由默认的“N”修改为“Y”即可。
 
问题三:禁止预读取后能提高系统的启动速度吗?  
网络上流传着1条关于提升Windsws XP启动速度的技巧,具体方法是通过修改注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters目录下EnablePrefeteher子键,将它的键值赋为“1”。这样可以减少预读取的文件,减少进度条等待时间,效果是进度条跑一圈就进入登录画面了。
 
微软的技术文档解释了EnablePrefetcher被赋予不同值的含义:
 
0:取消预读取功能;
 
1:只预读取应用程序;
 
2:只预读取Windows系统文件。
 
3:预读取Windows系统文件和应用程序,这是WindowsXP的默认值。  
 
虽然EnablePrefetcher键值设置为1后,的确可以减少预读取的文件,但系统初始化内核的工作是一个非常复杂的过程,此时需要加载很多底层的驱动程序、启动子系统以及相关的服务,即使是当我们看到了欢迎屏幕,也不能认为此时系统已经启动完成,因为系统会在后台继续初始化那些未完成的驱动程序的加载工作,虽然滚动条的动作次数较以前大大减少,但在显示欢迎屏幕之前的黑屏过程却反而有所增加,因此总的系统时间并未变化。
posted @ 2010-07-28 18:21  Quincy  阅读(2613)  评论(0编辑  收藏  举报