用7 U* Y5 p. ^; \6 V3 q- ]& H) F b
9 ?8 B7 ]6 t+ ~; p& s! M1 S5 Y: `
正如前文所说,
WinXP中虚拟
内存和预取技术是Vista Superfetch与Readyboost这两项新技术的基础,因此要理解这两项技术,我们就必须回过头来看看在过去的操作
系统中,这些技术是如何为我们服务的。
2 n& l2 Q' y" O: F
9 y6 h' O' v+ J" |# f; } 在所有使用保护模式寻址内存的
操作系统里,虚拟内存一直是一个重要的概念,
Windows Vista也不例外。即使所有程序的内存占用小于系统内存的总量,
Windows仍然要使用到虚拟内存管理技术。实际上,每个运行在
Windows环境下的进程,在载入时
操作系统都会自动为他们指派虚拟内存空间。
% U* p& l z8 O2 B# N' L# }
7 t: q: p" f$ E) F. O 简单地说,虚拟内存技术就是一种使用
硬盘等外部存取设备,来保存
物理内存不足以存放的信息的技术。
$ `* b6 A, v; X- o* z4 m% `1 v0 y( f6 R1 n& T/ P6 S' e. n: [) \
; M1 w8 N V! g( G0 @
在Windows操作系统中,使用虚拟内存技术的具体情况是:如果系统出现物理内存不足,那么在启动某个新程序时,操作系统将释放内存中被其它程序占用的空间(内存页面),并将这些内存页面中的信息拷贝到硬盘的Pagefile.sys文件中(交换文件),以便为这个新程序释放一部分物理内存空间。
$ R5 v! U# [5 a R/ X4 ^
- [8 Z i1 C7 {9 F
1 m: K2 s9 `* G6 j( W$ e e
- R6 g& K6 C3 Q, m3 e 而当需要再次运行那些被释放的程序时,Windows会到Pagefile.sys中查找内存页面的交换文件,同时释放其它程序的内存页面,再完成当前程序的载入过程。
1 ]( ?1 j) y* \* l9 V0 |) r' G$ M7 J( `
这种互换内存页面的过程被称之为“交换”(switch),而用于暂存内存页面的Pagefile.sys文件则被称之为“交换文件”(switch file)。
7 \: k. c! D6 n& C; z5 \& N
4 F/ z+ M9 B. Q2 C9 i
) G2 a5 y* t" b j
Readyboost理论篇(2)-预取技术及其在Windows操作系统中的应用8 ^5 k2 `% V; Y9 W( ~( ]$ i
) M& O5 { j" a. p: t2 @' m% p# l
虚拟内存技术虽然解决了内存不足的问题,但在程序运行过程中经常需要载入其它文件到内存中,此时如果物理内存不足,则需要进行换页操作,频繁地读写硬盘,造成程序运行时响应缓慢。
! L- h2 W, j) h' ?& ~( P, x+ B7 N
! q$ C$ c( F- p' t' t- ~$ W+ c& w! ~ 在Windows XP操作系统中,
微软对虚拟内存技术做了进一步改进,发展出了预取技术(Prefetch),预取技术的基本思路是,在载入某个程序之前,预先从硬盘上中载入一部分该程序运行所需的
数据到物理内存中,这样便能加快程序的启动速度。
$ h0 b5 K( X6 I# z' q) R) f! M( L1 y/ B: R
在Widows XP中,使用预取技术的具体方法是:在系统和应用程序启动时,监视内存页面与交换文件以及硬盘上其它文件的数据交换状况,当发生数据交换时,Windows XP会纪录下每一个程序运行时经常需要读取的硬盘文件,并将读取的情况记录在\windows\Prefetch目录中的pf后缀名文件中。
; ]$ h* c, S5 b3 q" B, U
$ I( c6 }' }5 B$ y$ P+ P2 Z' S( V2 }9 y- t& Q* ]6 j4 a3 j' H, l* k
! r& e. c0 X; G$ a5 ?0 {. v 一旦建立了这些pf文件,在每次需要启动系统或相应程序的时候,Windows会首先中断当前准备载入的程序,而转去查找\Windows\Prefetch目录,看是否有当前载入程序的纪录,如果有纪录,则马上按照纪录的情况载入程序运行过程中可能会用到的所需文件到物理内存中。这项任务完成之后,Windows才继续载入被中断的程序。如下图所示:
9 _! ^, I; x9 x- E3 ?1 \
0 z( t i2 ]9 b J, h! ]6 e2 G0 o- U2 v5 K& |
( O! E7 i0 ~4 U) f3 b 经过这样的处理之后,在程序运行过程中,需要读取那些文件时,由于文件已经被“预取”到内存中,此时就不用再到硬盘上进行读取,因此减轻了程序载入过程中频繁交换内存页面与交换文件的现象,改善了内存不足时程序运行的响应速度。
) E; I+ G8 D7 J" i8 r% }
( q1 z4 f& T! b8 p, B( I1 X
为了进一步优化预取操作的效率,Windows XP还会定期对pf文件进行分析处理,组织好程序文件载入的顺序,并将这些分析处理后的信息存放在\Windows\Prefetch目录中的Layout.ini文件中。同时还会通知磁盘碎片整理程序,在下次运行碎片整理时,按照Layout.ini文件记录的内容,将相关文件的位置整理在连续的硬盘区块中。