磁盘缓存技术

  你是否在使用 MS-DOS?如果是的话,你在应用 SMARTDRV.EXE 后有没有感到什么不同?如果你的硬盘没有内存快的话(当然,今天的计算机就是这样),应该是有一些不同的。你是否在使用微软视窗?如果是的话,你是否感到当空闲的物理内存还足够的时候,系统运行得比没有足够空闲内存的时候快?我猜想你会对以上两个问题都回答“是”。不同之处在哪里呢?文件访问更快,磁盘指示灯亮得更少抑或是别的什么?另外,如果你两次启动同一个应用程序,你会发现第二次它启动得更快。这是一个用空间换时间的例子。如果你运行 SMARTDRV.EXE,你可以已经注意到它有一个参数“缓存大小”。它表示这一大小的内存空间将被占用。同样,当你启动视窗的时候,默认情况下,一定量的内存会被用作磁盘缓存。试试看运行视窗中的“系统监视器”或者“性能监视器”。接着把“内存”分类中的“磁盘缓存大小”这一项加入监视。然后你会看到一部分内存空间正在被用作磁盘缓存。
  如果你在使用 MS-DOS,你可以通过设定 SMARTDRV.EXE 的参数来指定磁盘缓存的大小。如果你在使用视窗 9x,你也可以指定最大和最小的磁盘缓存大小。视窗系统会自动改变它的大小。默认情况下,两个大小是未指定的。要指定它们,打开你的视窗的 SYSTEM.INI 文件。找到“[vcache]”行。要指定最大的缓存大小,输入“MaxFileCache=nnnn”,其中 nnnn 是以十进制表示的磁盘缓盘存的大小的千字节数。要指定最小的缓存大小,输入“MinFileCache=nnnn”。我不推荐一个初学者做这样的事情。如果你知道适合你的电脑的缓存大小,指定它可能会加快你的电脑的速度。
  磁盘缓存从几个方面来加速磁盘访问:
1. 保存刚读过的文件或信息的一部分。下一次系统读这个文件或者信息,在内存中保存的部分可以很快地获取。这叫做读缓存。另外在视窗中,FAT 的读缓存叫做 VFAT(虚拟文件分配表)。VFAT 同时也被用做写缓存,在后面的段落中我将谈论它。为了加快对目录的访问,视窗同样提供了路径名缓存。它也是读缓存。
2. 把将要写入磁盘的信息保存在内存中。下次系统读写那些信息的时候,可以在内存中完成这个操作。为了让磁盘中的信息和内存中的一致,系统每隔一定时间就把内存中的数据写到磁盘中去。这叫做写缓存。因为数据不是立即写入磁盘的,这种磁盘缓存也叫做“懒写”或者“后写缓存”。
3. 当磁盘被访问的时候,信息必须以扇区为单位来读取。按顺序读扇区比随机读扇区快得多,因为花在移动磁头和等待正确的扇区转到磁头下的时间通常比较长。在多数情形下,一个文件是连续保存在磁盘上的,所以把一段连续扇区中的内容读出来并保存到内存中通常可以在很大的程度上加快磁盘访问。这叫做预取缓存。这种类型的缓存在随机访问文件的时候特别有用。同时,它将在很大程度上加快同一个磁盘上的文件复制速度。
 
  以上列出的缓存方法只是一个大体的概念。在实际的系统中,我们必须找到一些好方法来让磁盘缓存更有效地得到利用。在历史上有很多磁盘缓存工具。它们中有些是非常优秀的。一个传统的缓存淘汰技术是 LRU(最近最少使用)表,可以帮助决定哪一个页应该被丢弃。然而,有许多新的工作得更好的技术。我对这一领域感兴趣,虽然我知道得不多。我想我可能会在几年后研究这些技术。

返回 MS-DOS 基础知识