[root@Linux /tmp]# free
total used free shared buffers cached
Mem: 4149156 4130412 18744 0 13220 2720160
-/+ buffers/cache: 1397032 2752124
Swap: 6289408 144 6289264
第1行
total 內存總數: 4149156
used 已經使用的內存數: 4130412
free 空閒的內存數: 18744
shared 當前已經廢棄不用,總是0
buffers Buffer Cache內存數: 13220
cached Page Cache內存數: 2720160
關系:total = used + free
第2行:
-/+ buffers/cache的意思相當於:
-buffers/cache 的內存數:1397032 (等於第1行的 used - buffers - cached)
+buffers/cache 的內存數: 2752124 (等於第1行的 free + buffers + cached)
可見-buffers/cache反映的是被程序實實在在吃掉的內存,而+buffers/cache反映的是可以挪用的內存總數。
第三行單獨針對交換分區, 就不用再說了.
為了提高磁盤存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換), 還采取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,後者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。
如果感興趣可以進一步參考文件/proc/meminfo,free命令就是根據它的信息生成的。free命令的源碼可從procps-xxx-.src.rpm獲取,xxx為版本號,比如procps-3.2.3-5.3.src.rpm。
參考內核代碼:
arch/i386/mm/init.c
fs/proc/proc_misc.c
include/linux/swap.h
mm/filemap.c
fs/buffer.c
另外還可以參考O'REILLY的書《Understanding the LINUX KERNEL》。