Linux缓存与缓冲

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux缓存与缓冲相关的知识,希望对你有一定的参考价值。

 首先,二者针对的对象不同,buffer叫缓冲,cache叫缓存。buffer是为了提高内存和硬盘或者其他I/O设备之间的数据交换速度而设计的;cache是为了提高CPU和内存之间的数据交换速度而设计的,缓存是分级的,比如一级缓存、二级缓存等。


 CPU在执行程序所用的指令都要在内存中获取,但是内存的读写速度要比CPU慢得多,为了提高两者之间的交换速度,就在CPU和内存之间增加了cache。cache要比内存的速度快,这样就可以提高数据交换的速度,一般情况下cache是比较小的,因为CPU不能集成太多的集成电路。当然为了进一步的加快速度,陆陆续续又有了二级cache、三级cache...,通过此设计,CPU就减少了访问内存的次数,所以提高了速度。当然,如果cache中没有CPU想要的数据,CPU还是会到内存中去获取的。


 buffer是把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,Linux系统中有一个守护进程定期将buffer中的内容统一写到磁盘,也可以通过sync命令手动进行。比如说:某个进程有多个字段的写入,在整个字段接收完之前,进程会先把这些字段统一放到buffer中。


 


接下来分享一下free命令所输出的内容:

[[email protected] ~]# free -m

             total       used       free     shared    buffers     cached

Mem:           980        522        458          1        118        190

-/+ buffers/cache:        214        766

Swap:         1983          0       1983



第一行是从全局角度描述系统使用内存的状况:

total(980):总的物理内存=used+free

used(522):已使用的内存=buffers+cached

free(458):未被使用的内存

shared(1):应用程序共享内存

buffers(118):缓存,主要用于目录方面<ls大目录时可以看到此值的变化>

cached(190):缓存,用于以打开的文件


第二行是显示应用程序对内存的使用

- buffers/cache(214):应用程序使用的内存大小=used-buffers-cached

+ buffers/cache(766):可供应用程序使用的内存大小=free+buffers+cached


第三行swap的使用

total(1980):总大小

used(0):已使用大小

free(1980):剩余大小


有更深的理解希望大家指点,谢谢。

以上是关于Linux缓存与缓冲的主要内容,如果未能解决你的问题,请参考以下文章

Linux python -u参数,设置无缓存输出(unbuffered)(无缓冲不缓冲不缓存)(实时重定向输出)

Linux python -u参数,设置无缓存输出(unbuffered)(无缓冲不缓冲不缓存)(实时重定向输出)

在GNU/Linux系统上清除缓冲区缓存

缓冲与缓存的概念(转)

linux 同步IO: syncfsync与fdatasync

linux 同步IO: syncfsync与fdatasync