Linux內存相關的一些概念

Linux內存相關的一些概念:

物理內存:
        指通過物理內存條而獲得的內存空間,也就是計算機運行時實際的內存地址空間
    
虛擬內存:
        計算機系統內存管理的一種技術。它使得應用程序認爲它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。
    32位的地址空間,每個進程對應的虛擬內存地址爲4G(2^32),64位的是(2^64)
    
虛擬地址空間的內部又被分爲內核空間和用戶空間兩部分,也對應着進程的兩種狀態:用戶態和內核態

當在系統中執行一個程序時,大部分時間是運行在用戶態下的,在其需要操作系統幫助完成一些用戶態自己沒有特權和能力完成的操作時就會切換到內核態。

用戶態切換到內核態的3種方式:
1.系統調用
2.異常(如缺頁異常)
3.外圍設備的中斷
    
內存映射:
       既然每個進程都有一個這麼大的地址空間,那麼所有進程的虛擬內存加起來,自然要比實際的物理內存大得多。
       所以,並不是所有的虛擬內存都會分配物理內存,只有那些實際使用的虛擬內存才分配物理內存。
       內存映射就是將虛擬內存地址"翻譯成"物理內存地址,這個操作由CPU中的通過MMU來完成,在MMU中維護着頁表,記錄虛擬內存地址和物理內存地址映射關係。


       Linux 提供了兩種頁表機制:多級頁表和大頁(HugePage)

TOP指令查看內存:

VIRT:進程虛擬內存的大小,只要是進程申請過的內存,即便還沒有真正分配物理內存,也會計算在內。
RES:常駐內存的大小,也就是進程實際使用的物理內存大小,但不包括 Swap 和共享內存。
SHR:共享內存的大小,比如與其他進程共同使用的共享內存、加載的動態鏈接庫以及程序的代碼段等(共享內存 SHR 並不一定是共享的,比方說,程序的代碼段、非共享的動態鏈接庫,也都算在 SHR 裏)。
%MEM:進程使用物理內存佔系統總內存的百分比。

FREE指令查看內存:

total:總物理內存大小
used:已使用物理內存的大小,包含了共享內存
free:未使用物理內存的大小
shared:共享內存的大小
buffers:Buffers緩存大小
cached:PageCache緩存大小

-buffers/cache:第一行的used-buffers-cached
+buffers/cache:第一行的free+buffers+cached

(參考:https://time.geekbang.org/column/article/161660

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章