重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5201|回复: 0
打印 上一主题 下一主题

Buffer VS Cache

[复制链接]
跳转到指定楼层
楼主
发表于 2012-6-21 09:19:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

首先回顾下内存的概念:(内存是个什么东西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以方便下次被访问,这样可提高系统性能。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-28 18:23 , Processed in 0.118998 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表