首先回顾下内存的概念:(内存是个什么东西2):
内存又称主存,是CPU能直接寻址的存储空间,由半导体器件制成
包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。只不过因为RAM是其中最重要的存储器。
●只读存储器(ROM) ROM表示只读存储器(Read Only Memory),在制造ROM的时候,信息(数据或程序)就被存入并永久保存。这些信息只能读出,一般不能写入,即使机器停电,这些数据也不会丢失。ROM一般用于存放计算机的基本程序和数据,如BIOS ROM。其物理外形一般是双列直插式(DIP)的集成块。
●随机存储器(RAM) 随机存储器(Random Access Memory)表示既可以从中读取数据,也可以写入数据。当机器电源关闭时,存于其中的数据就会丢失。我们通常购买或升级的内存条其实就是RAM。用作电脑的内存,内存条(SIMM)就是将RAM集成块集中在一起的一小块电路板,它插在计算机中的内存插槽上,以减少RAM集成块占用的空间。目前市场上常见的内存条有1G/条,2G/条,4G/条等。
●高速缓冲存储器(Cache)
Cache也是我们经常遇到的概念,也就是平常看到的一级缓存(L1 Cache)、二级缓存(L2 Cache)、三级缓存(L3 Cache)这些数据,它位于CPU与内存之间,是一个读写速度比内存更快的存储器。当CPU向内存中写入或读出数据时,这个数据也被存储进高速缓冲存储器中。当CPU再次需要这些数据时,CPU就从高速缓冲存储器读取数据,而不是访问较慢的内存,当然,如需要的数据在Cache中没有,CPU会再去读取内存中的数据。
由此,我们可以发现,
外存(硬盘) - 内存 - 缓存 - CPU 之间的关系是层层递近的。内存介于外存与CPU之间,而高速缓存又介于内存与CPU之间。
高速缓存比内存读写速度更快!
那我们就来整理一下buffer 与 cache的概念和区别。
首先,因为语言翻译的差别,也给我们增加了无谓的烦恼,导致了国内的工程师们会混淆这两个东西,其实,buffer(缓冲) cache(缓存)。
其次,它们各自发挥作用的位置也不同:
cache(高速缓存)主要在CPU与内存间起作用
而buffer(IO缓冲) 主要在内存与硬盘间起作用。
形象一点,就是如下所示:
cache buffer
CPU-------------------->内存------------------------->外存(硬盘)
具体一点:
不难看出,
buffer与cache操作的对象不一样:
cache主要用于CPU的cache, 主要原因是cpu与内存memory的不同步,当CPU较快而memory的处理速度又跟不上的时候,且有些值使用的次数较多,很频繁。所以放入cache中暂存,以备重复使用。
buffer是IO缓存,主要用于硬盘与内存之间。主要的作用是保护硬盘,减少网络传输的次数,提高速度。不会立即写入硬盘,或者把硬盘读出的数据立即显示,从而保护了硬盘。
总结一下,
cache(缓存)是为了提高cpu和内存之间的数据交换速度而设计,也就是平常见到的一级缓存、二级缓存、三级缓存。 cpu在执行程序所用的指令和读数据都是针对内存的,也就是从内存中取得的。由于内存读写速度慢,为了提高cpu和内存之间数据交换的速度,在cpu和内存之间增加了cache,它的速度比内存快,但是造价高,又由于在cpu内不能集成太多集成电路,所以一般cache比较小,以后intel等公司为了进一步提高速度,又增加了二级cache,甚至三级cache,它是根据程序的局部性原理而设计的,就是cpu执行的指令和访问的数据往往在集中的某一块,所以把这块内容放入cache后,cpu就不用在访问内存了,这就提高了访问速度。当然若cache中没有cpu所需要的内容,还是要访问内存的。
缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能,并保护硬盘。linux有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。例如:有一个ext2的U盘,往里面cp一个3M的MP3,但U盘的灯没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上几秒钟。
简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。 buffer是由各种进程分配的,被用在如输入队列等方面。一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。 cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提高系统性能。
|