天天看點

Linux記憶體中的 buffer 和 cache 到底是個什麼東東?

  Linux 中的 free 指令,會輸出:

  total  總量

  used   已使用

  free  空閑

  shared  共享記憶體

  buffers  

  cached

  前面四項都比較好了解,一看我也就知道啥意思了。但是buffer 和 cached 我就一直不很了解,終于看到某篇文章寫的很詳細,于是記下來;

  ·A buffer is something that has yet to be "written" to disk.  ---buffer 寫緩存,資料存儲時,先儲存到磁盤緩沖區,然後再寫入到永久空間

  ·A cache is something that has been "reed" from the disk adn stored for later use.   --cache 讀緩存,資料從磁盤讀出後,暫留在緩沖區,預備程式接下來的使用,

  英文好點的,應該已經看出了端倪,

  buffer 用于存放要輸出到磁盤的資料,而cache是從磁盤讀出存放到記憶體中待今後使用的資料。它們的引入均是為了提供IO的性能。

  記憶體:從使用者和作業系統的角度來看,其大小空間是有差別的。像buffer/cached的記憶體,由于這塊記憶體從作業系統的角度确實被使用,但如果使用者要使用,這塊記憶體是可以很快被回收而被使用者空間程式使用,是以從使用者角度而言這塊記憶體應被劃為空閑狀态。

  為什麼Linux 會有這種機制呢?

  其實這是一種非常優秀的設計,目的就是為了提升磁盤IO的性能,從低速的塊裝置上讀取的資料會暫時儲存在記憶體中,即使資料在當時已經不再需要了,但在應用程式下一次通路該資料時,它可以從記憶體中直接讀取,進而繞開低速的塊裝置,進而提高系統的整體性能。