1、快取機制
為了提高檔案系統效能,
核心利用一部分物理記憶體分配出緩衝區,用於快取系統操作和資料檔案,當核心收到讀寫的請求時,核心先去快取區找是否有請求的資料,有就直接返回
,如果沒有則通過驅動程式直接操作磁碟。
快取機制優點:減少系統呼叫次數,降低cpu上下文切換和磁碟訪問頻率。
cpu上下文切換:cpu給每個程序一定的服務時間,當時間片用完後,核心從正在執行的程序中收回處理器,同時把程序當前執行狀態儲存下來,然後載入下乙個任務,這個過程叫做上下文切換。實質上就是被終止執行程序與待執行程序的程序切換。
2、檢視快取區及記憶體使用情況
[root@localhost ~]# free -m
total used free shared buffers cached
mem: 7866 7725 141 19 74 6897
-/+ buffers/cache: 752 7113
swap: 16382 32 16350
可以看到記憶體總共8g,已使用7725m,剩餘141m,不少的人都是這麼看的,這樣並不能作為實際的使用率。因為有了快取機制,具體該怎麼算呢?
空閒記憶體=free(141)+buffers(74)+cached(6897)
已用記憶體=total(7866)-空閒記憶體
由此算出空閒記憶體是7112m,已用記憶體754m,這才是真正的使用率,也可參考-/+ buffers/cache這行資訊也是記憶體正確使用率。
3、可見快取區分為buffers和cached,他們有什麼區別呢?
核心在保證系統能正常使用物理記憶體和資料量讀寫情況下來分配緩衝區大小。
buffers用來快取metadata(指用來描述乙個檔案的特徵的系統資料,諸如訪問許可權、檔案擁有者以及檔案資料
塊的分布資訊(inode...)等等)及pages,可以理解為系統快取,例如,vi開啟乙個檔案。cached是用來給檔案做快取,可以理解為資料塊快取,例如,dd if=/dev/zero of=/tmp/test count=1 bs=1g 測試寫入乙個檔案,就會被快取到緩衝區中,當下一次再執行這個測試命令時,寫入速度會明顯很快。
4、隨便說下swap做什麼用的呢?
swap意思是交換分割槽,通常我們說的虛擬記憶體,是從硬碟中劃分出的乙個分割槽。當物理記憶體不夠用的時候,核心就會釋放快取區(buffers/cache)裡一些長時間不用的程式,然後將這些程式臨時放到swap中,也就是說如果物理記憶體和快取區記憶體不夠用的時候,才會用到swap。
5、怎樣釋放快取區記憶體呢?
5.1 直接改變核心執行引數 (0:不釋放;1;2;3)
#釋放pagecache
echo 1 >/proc/sys/vm/drop_caches
#釋放dentries和inodes
echo 2 >/proc/sys/vm/drop_caches
#釋放pagecache、dentries和inodes
echo 3 >/proc/sys/vm/drop_caches
5.2 也可以使用sysctl重置核心執行引數
sysctl -w vm.drop_caches=3
注意:這兩個方式都是臨時生效,永久生效需新增sysctl.conf檔案中,一般寫成指令碼手動清理,建議不要清理。
對於清除swap,只有先關閉swap了,用:
#swapoff -a
而後啟用swap,因為只是清除,不是說不要用swap的嘛 :
#swapon -a
UNIX緩衝機制
某日一朋友寫了乙個hello world 出不來結果,如下 include int main int argc,char argv 注意到,在 中printf語句列印的字串最後沒有帶換行符,而且最後呼叫了 exit函式,這導致了在終端螢幕上顯示不出來字串 hello world 首先介紹一下unix...
訊息緩衝機制
訊息緩衝是unix系統程序之間進行大量資料交換的機制之一。訊息緩衝是基於訊息佇列的。傳送程序將訊息掛入接收程序的訊息佇列,接收程序從訊息佇列中接收訊息。訊息是指具有型別和數量的乙個資料。訊息分共有和私有的,如果訊息為私有的,只能被建立訊息佇列的程序和其子程序訪問 如果是公有的,可以被系統中知道訊息佇...
雙緩衝機制
最早解釋多緩衝區如何工作的方式,是通過乙個現實生活中的例項來解釋的。在乙個陽光明媚的日子,你想將水池裡的水換掉,而又找不到水管的時候,你就只能用木桶來灌滿水池。當木桶被水龍頭注滿的,關掉水龍頭,走到水池旁邊,將水到進去,然後走回到水龍頭旁邊繼續重複上述工作,如此往復直到將水池灌滿。這就類似單緩衝工作...