內存是如何工作的

1、只有內核纔可以直接訪問使用內存。

2、內核給每個進程提供一個獨立的虛擬地址空間。這個空間是連續的,並且進程可以很方便的訪問虛擬地址。

3、虛擬地址空間分爲用戶空間和內核空間,進程只有進入內核態時,纔可以訪問內核空間。在用戶態,只能訪問用戶空間。

4、只有使用到時,虛擬內存才映射到物理內存,是通過內存映射表來實現的。

內核爲每個進程維護了一張內存映射表。

進程使用虛擬內存時,發現還沒有映射,進程會中止,這時候會發生缺頁異常,內核會給進程做內存映射,寫進程映射表,然後返回給進程,回覆進程的運行。

頁的大小爲4KB,爲了解決內存映射表過大的問題,採用多級分頁的方式。

內存分爲:只讀段、數據段、堆,文件映射、棧

brk,分配小內存,不會有缺頁中斷。分配的內存不使用了,不立刻歸還給系統,而是保留下來,留個自己使用,這是應爲有時候要分配內存的對象小於頁大小4KB,這樣保留下來,可以節約內存的使用率。但如果頻繁的調用brk,那麼會有很大小內存不歸還給系統,那麼就會有很大的內存佔用發生。

nmap分配大塊內存,會產生缺頁中斷。

系統會通過3種方式回收內存:

1、回收不常訪問的內存,LRU

2、將不常訪問的內存,調度到硬盤,會用到swap

3、會直接殺死佔用大量內存的程序。進程佔用內存越大,oom越大,越容易被殺死。

工具:

free: 1、total系統總內存,2、used 系統已經使用內存。3、系統沒有使用內存。4、shared 系統共享內存。

         5、buff/cashe 緩存緩衝的內存 6、available 進程可使用內存(包括free內存+進程可回收內存)

top: 1、VIRT 進程申請的虛擬內存

        2、RES 進程實際使用的物理內存

        3、SHR 與其他進程共享的內存

        4、%MEM 進程佔用系統內存的百分比

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