本帖最后由 haierccc 于 2012-5-24 16:05 编辑
我们经常在各种场合听到“缓存”这个词,那么,到底什么是“缓存”,它起到的是什么作用呢?我用通俗的语言讲一讲吧。
“缓存”这种东西,是为了平衡“高速设备”和“低速设备”之间的速度差异而存在的。其作用是让低速设备“尽量”的不拖高速设备的后退。
比如CPU缓存,每当CPU要从内存里读数据的时候,会向内存控制器发出一个读指令,要求内存控制器返回其要求的数据,可是因为内存响应速度相对于CPU是很慢的(比如DDR3内存),所以在数据返回之前CPU只有无所事事的“等待”,如果经常出现这样的情况,再快的CPU,效率也不会提高(被低速的内存托了后退)。
但是有种高速内存(SRAM),它的响应速度能跟CPU同步,也就是说CPU无需等待,如果用SRAM做主内存当然是最理想的选择。可问题是这种内存制造复杂,价格昂贵,容量也做不大(或者价格无法接受),不可能做到DDR3内存这样的GB级别,于是乎可以采取这样的折中方法:
如图所示,在主内存(RAM)和CPU之间,放一块小容量的SRAM。当CPU申请RAM数据的时候,先在SRAM里面寻找,如果找到了数据(即“命中”),就不用花费很多时间到RAM里去读了(同步读取)。如果SRAM里没有数据,再到RAM去读,当RAM返回数据的时候,不仅仅返回原来所需要的数据,同时“捎带”返回所需数据“前后”的一些看似无关的数据,并将这些数据放入SRAM。
下次CPU再次到SRAM里读数据的时候,如果所需数据正好在SRAM里(捎带回来的那些数据),就可以“命中”了。
从原理上可以看出,命中率越高,CPU的效率就越高。而命中率又是被“捎带”返回的数据所决定的,哪些数据被捎带返回,这个就要依CPU内部的缓存算法而定了。
由此可见,由于缓存容量远远小于主内存容量,而缓存算法也不可能100%的准确命中,所以低速设备多多少少还是会拖高速设备的后腿,这就是上面所言“尽量”的含义所在(除非哪天主内存完全和CPU同步)。
以上是以CPU缓存做例子。但是在电脑系统里,缓存并不仅仅是CPU独有,因为高速设备与低速设备的矛盾并不仅仅体现在CPU和内存之间。硬盘板载缓存就是另一个例子。
机械硬盘是机械部件,靠盘片的旋转和磁头臂的摆动来定位数据,靠磁场的涨落来读写数据,这些动作相比于电压的瞬间变化(二进制): 来说,是相当缓慢的。机械硬盘的访问速度和CPU的主频相比,简直就是火箭和牛车的对比。同样,机械硬盘相比于内存速度的速度差也是巨大的。
现在假如说,我要把数据从内存写入硬盘,由于硬盘相当缓慢,需要等待很长的时间才能完成此任务。那么用户体验就是:电脑非常慢。实际上,这里CPU不慢,内存不慢,只是硬盘太慢了。
为解决机械硬盘速度过慢的问题,就在其内部安置了一个小容量的内存,也就是硬盘的缓存,数据首先写入到缓存里。那么在操作系统层面,就会认为数据已经写入了(写入过程很快结束)。用户的感觉就是快速。随后硬盘自己再从缓存写入到盘片,这个过程无需用户干预了。
不过需要注意的是,其实硬盘的缓存并不全都用于缓存数据,还有其他用途,所以不见得缓存越大,性能就越好。而且还有个缓存算法问题。如果算法不优秀,命中率就不会高,这样大容量缓存形同虚设。
以上讲的是硬盘的板载缓存,也就是硬件缓存。其实操作系统本身也有磁盘缓存,也就是说,操作系统从系统主内存(比如DDR3内存)中划出一块内存作为磁盘缓存。要写入磁盘的数据首先写入主内存,因为主内存容量大而速度快,所以写入过程很快结束(用户体验良好,认为电脑很快),然后系统自动将内存中的数据写入硬盘。但如上述文字所示,实际上写入的是硬盘的板载缓存。此时的数据写入流程如下:
数据→系统主内存缓存→硬盘板载缓存→硬盘。
可见此时数据的写入过程经过了2级缓存。关于这方面的内容,请见本论坛另一篇文章:谈大容量内存的各种使用方案对磁盘效率影响里面有详细的讨论。
缓存另一个例子就是打印机,因为打印机也是机械部件,速度缓慢 。
当你开始打印的时候,屏幕右下角会有个打印机图标,你双击,可以看到里面有打印任务。有时候会出现:打印任务已经消失,可是打印机仍然在继续打印。
出现这种情况的原因就是:打印机内部有一小块缓存。操作系统(比如XP,WIN7)把打印任务发送给打印机,在尚未发送完毕的时候,打印任务是存在的,而发送完毕之后,任务消失。
可是”发送完毕“,并不代表”打印完毕“,此时的数据实际上是存在打印机缓存里的,所以可以脱离WIN7而”自动“打印。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|