buffer和cache有什么本质区别

在free命令展示机器的内存消耗情况,会像这样展示

buffered 和cached本质内容有什么区别呢?

我没搞明白。我觉得需要追根溯源会更加理解本质。

英文是这样解释

A buffer is something that has yet to be "written" to disk.  这些数据准备写到磁盘的,但还没有写到磁盘,缓存在内存中。

之所以有这样的机制,因为频繁地写入磁盘,会造成磁盘i/0,所以一般数据不会马上写入到磁盘去,而是定期积累到一定量后写入磁盘去。

buffer的英文本意是缓冲器,缓冲一下,不要马上写入到磁盘,冲击磁盘。

这个buffer大小由什么设置的呢? 不知道。待补充。

A cache is something that has been "read" from the disk and stored for later use.

从磁盘上读取数据存储到内存中缓存起来,方便下一次使用。目的是避免频繁的去磁盘上读取数据,直接从内存中读取使用了。

之所以有cache,一般是对频繁使用到的数据(读的数据),进行缓存到内存。

------------------------------------------

从上面分析看,两个内存区域要解决的问题和目标都不同。一个是解决频繁读的问题。另外一个是解决频繁写入到磁盘的问题。

但相同点是:他们都是为了减少磁盘i/0次数。因为磁盘是机械性的旋转,靠磁头定位来读、写数据。频繁读、写磁盘,就会造成磁头频繁定位,这个就是磁盘i/0(数据库系统的实现里面有磁盘的原理介绍,然后专门讲解实现一个数据库系统如何针对磁盘做优化)

free命令中的used项(已经使用的内存),其实是已经包含了buffer和cache部分。

根据上面对buffer和cache的分析,buffer和cache部分实际上是可以拿来使用的内存区(都是缓存数据,释放掉这部分内存空间并不影响)

正因为这样,为了想要准确得知到底有多少可用的内存,linux的free命令,会第二列专门给出减去buffer和cache部分的统计结果来看。

第二列 :-/+ buffers/cache

显示两个值,第一个值,是used-buffers-cache的计算结果。第二个值 是used+buffers+cache的计算结果

思考

从操作系统角度来看,它只关注真正的物理内存剩余多少。所以buffer区域和cache区域它也认为不是剩余的。这没有错。操作系统关注是物理内存真实有多少。

而应用程序角度来看,它关注的是有多少物理内存是自己可以调用的。它认为buffer和cache部分也是可以拿过来用的。也没有错误。

现实中例子用什么来形象化描述呢?

一个人有多少钱,站在不同的角度算法不一样。

有人存款10万。我们只是看它真实钱有多少。那就是10万(操作系统这么认为)

而从另外一个角度,他有房子,如果需要,房子可以卖掉,卖成钱,估算一下价格。假设房子80万,那么他的钱就是80+10=90万(应用程序这么认为)

两个计算方式都没有错。角度不同。

buffer和cache,对于应用程序而言,觉得这部分是可以回收的(我需要的时候随时可以用。房子随时可以套现拿到钱使用)

时间: 2024-08-02 10:56:22

buffer和cache有什么本质区别的相关文章

Linux内存学习之buffer和cache的区别详解

本文和大家分享的主要是linux 中 内存buffer 和 cache 的区别相关内容,一起来看看吧,希望对大家 学习linux有所帮助. 细心的朋友会注意到, 当你在 linux 下频繁存取文件后 , 物理内存会很快被用光 , 当程序结束后 , 内存不会被正常释放 , 而是一直作为 caching. 这个问题 , 貌似有不少人在问 , 不过都没有看到有什么很好解决的办法 . 那么我来谈谈这个问题 . 先来说说free 命令 [[email protected] ~]# free -m tota

free命令及buffer和cache区别

free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. 1.命令格式: free [参数] 2.命令功能: free 命令显示系统使用和空闲的内存情况,包括物理内存.交互区内存(swap)和内核缓冲区内存.共享内存将被忽略 3.命令参数: -b  以Byte为单位显示内存使用情况. -k  以KB为单位显示内存使用情况. -m  以MB为单位显示内存使用情况. -g   以GB为单位

【转】free命令、buffer与cache的区别

freefree 命令相对于top 提供了更简洁的查看系统内存使用情况: # free total used free shared buffers cached Mem: 255988 231704 24284 0 6432 139292 -/+ buffers/cache: 85980 170008 Swap: 746980 0 746980 Mem:表示物理内存统计 -/+ buffers/cached:表示物理内存的缓存统计 Swap:表示硬盘上交换分区的使用情况,这里我们不去关心.系统

linux buffer与cache区别

A buffer is something that has yet to be "written" to disk. A cache is something that has been "read" from the disk and stored for later use. 更详细的解释参考:Difference Between Buffer and Cache cache 和 buffer的区别: Cache: 1.高速缓存硬件,是位于CPU与主内存间的一

Linux中Buffer和Cache的区别

1. Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而  Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能. Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元):Cache一般会用在I/O请求上,如果多个进程要访问某个文件,可以把此文件读入Cache中,这样下一个进程获取CPU控制

Buffer 和Cache 的区别

Buffer 和Cache 的区别buffer 与cache 操作的对象就不一样.buffer??缓冲??是为了提高内存和硬盘??或其他I/0 设备??之间的数据交换的速度而设计的.cache??缓存??是为了提高cpu 和内存之间的数据交换速度而设计.cpu 在执行程序所用的指令和读数据都是针对内存的??也就是从内存中取得的.由于内存读写速度慢??为了提高cpu 和内存之间数据交换的速度??在cpu 和内存之间增加了cache??它的速度比内存快??但是造价高??又由于在cpu 内不能集成太多

Linux操作系统中内存buffer和cache的区别--从free命令说起(转)

原文链接:http://os.51cto.com/art/200709/56603.htm 我们一开始,先从Free命令说起. Free free 命令相对于top 提供了更简洁的查看系统内存使用情况: $ free total used free shared buffers cachedMem: 255268 238332 16936 0 85540 126384-/+ buffers/cache: 26408 228860Swap: 265000 0 265000 Mem:表示物理内存统计

buffer 和 cache 的区别

buffer和cache统称为缓存,功能和作用上却有所区别: 1)buffer,内存缓冲区,各进程产生的文件临时存放区,一定时间段内统一写入磁盘,减少磁盘碎片和   硬盘的反复寻道,从而提高系统性能: 2)cache,内存缓存区,经常被用在磁盘的I/O请求上,如果有文件频繁被访问到,系统会将文件缓存在   cache区,供CPU进程等访问:CPU中的一级缓存.二级缓存.甚至是三级缓存就是为了解决读取内存   速度瓶颈: 而在Linux中可用内存到底怎么计算? Linux是尽可能使用内存原则,内存

linux buffer 与 cache 的区别

linux buffer 与 cache 的区别.A buffer is something that has yet to be "written" to disk.A cache is something that has been "read" from the disk and stored for later use.两者都是RAM中的数据.简单来说,buffer(缓冲)是即将要被写入磁盘的,而cache(缓存)是被从磁盘中读出来的 缓冲(buffers)