linux內(nèi)存

目錄
1、物理內(nèi)存的主要問題?
2、Linux段頁式存儲中的頁表
3、進程訪問內(nèi)存基本流程
4、進程訪問虛擬地址時如何確認是否有頁?
5、缺頁異常是什么?如何處理?
6、page分頁的策略與page status
7、swaping和paging的區(qū)別與聯(lián)系
8、overcommit 和OOM killer

1、物理內(nèi)存:

1)多個進程時,每個進程都給4G物理內(nèi)存,分配完了只能等待;
2)進程直接訪問物理內(nèi)存,可修改其他進程的數(shù)據(jù)/內(nèi)核地址數(shù)據(jù);
3)內(nèi)存隨機分配,容易出現(xiàn)錯誤。

2、頁表共三個部分組成:

此處討論兩級頁表:
線性地址
CR3 -- 頁目錄表(包含目錄項) -- 頁表 ( 包含頁表項)
物理地址
(頁表項)--頁面

3、內(nèi)存訪問:

進程 -- 內(nèi)存 -- 虛擬地址 -- 物理內(nèi)存 -- 物理地址

4、根據(jù)線性地址中的偏移量決定

偏移量占低12位,第0位是存在位,P=1表示頁表項指向的該頁在內(nèi)存中,如果P=0,表示該頁不在內(nèi)存中。

5、缺頁異常:

頁表中對應(yīng)的數(shù)據(jù)不在物理內(nèi)存中。
處理:
把進程需要的數(shù)據(jù)從磁盤上緩存到物理內(nèi)存中。內(nèi)核調(diào)用頁面異常處理程序:
通過“頁面置換算法”,找一個目標(biāo)覆蓋頁,將該頁內(nèi)容寫到磁盤中,將進程所需數(shù)據(jù)緩存到物理頁上,有效位變?yōu)?。

6、page status共四種:

1)已分配內(nèi)存,未mapping(minor page fault)

free中的shared buffer作為虛擬地址中的一部分,當(dāng)虛擬地址沒有完全mapping到物理內(nèi)存,虛擬地址不夠用的時候,會引發(fā)soft(minor) page fault,需要等一小會兒完全mapping 了才行。

2)未分配物理內(nèi)存(major page fault)。

3)已分配物理內(nèi)存并已經(jīng)mapping。

這是正常類型的page

4)已經(jīng)分配物理內(nèi)存已經(jīng)mapping,但被swap out了。

這種情況下是物理內(nèi)存不夠用了,整個程序都被swap出去了。

進程的working set是指當(dāng)前在物理內(nèi)存中,屬于該進程的pages組成的集合。
shrink working set指的是進程運行過程中縮小working set
page分為free page和dirty page,swap指的是將dirty page寫到交換分區(qū)去。
OOM是指系統(tǒng)已經(jīng)沒有足夠的內(nèi)存給進程使用,即能free的都已經(jīng)free了,能swap out的也已經(jīng)swap out了,再也不能擠出物理內(nèi)存的情況。

page的四種交換策略:

需要時才交換;

系統(tǒng)空閑時交換;

換出但不立即釋放;

把頁面換出推遲到不能再推遲為止。

7、swapping針對程序,paging針對頁面

swapping指的整個進程,在物理內(nèi)存和磁盤間swap in/swap out
tips:swap的數(shù)據(jù)kernel還是知道,因為metadata還在內(nèi)核內(nèi)存中。
進程中的線程結(jié)構(gòu),堆,棧必須被swap。
paging指的物理內(nèi)存不夠用時程序中的頁面移入/移出磁盤

8、overcommit和OOM killer

linux虛擬內(nèi)存的分配一般是“請求多少分配多少”,然而分配后不會完全映射到物理內(nèi)存上,比如請求4M內(nèi)存,內(nèi)存僅有1M也答應(yīng);因為通常不一定會用到4M;
但也會有真的不夠用的情況,類似銀行的“擠兌危機”。這時候就需要有相應(yīng)機制來處理,這就是OOM。當(dāng)物理內(nèi)存不夠用,磁盤該swap out的也swap out了,這時候就會出現(xiàn)OOM(out-of-memory),于是內(nèi)核調(diào)用OOM killer將一些進程kill以釋放內(nèi)存。

overcommit setting文件:

/proc/sys/vm/overcommit_memory

OOM配置文件:

/proc/1/oom_score_adj

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在linux下,使用top,free等命令查看系統(tǒng)或者進程的內(nèi)存使用情況時,經(jīng)??吹絙uff/cache meme...
    analanxingde閱讀 758評論 0 2
  • 在linux下我們經(jīng)常會使用到top,vmstat,free等命令查看系統(tǒng)或者進程的內(nèi)存使用情況,經(jīng)常會看到buf...
    tracy_668閱讀 3,405評論 1 1
  • 1 內(nèi)存尋址 1.1 物理地址、虛擬地址以及線性地址 物理地址: 物理內(nèi)存的內(nèi)存單元地址 虛擬地址: 程序員看到的...
    瘋狂小王子閱讀 3,117評論 3 21
  • >計算機系統(tǒng)中有幾類存儲設(shè)備:cache、內(nèi)存、外存。cache的存取速度最高,可以和CPU匹配,因此其代價最高,...
    一生信仰閱讀 1,273評論 0 0
  • 一、目標(biāo)果實 我近期的目標(biāo)6月12號前累計達成3萬的收入。今年年底擁有自己的車子,價值15萬。財富收入每月不斷倍增...
    徐建君閱讀 132評論 0 0

友情鏈接更多精彩內(nèi)容