linux 内存管理优化,Linux性能优化实战 内存篇 阅读笔记
第十五講 基礎(chǔ)篇:Linux內(nèi)存是怎么工作的(2020.6.8)
這一講相關(guān)的內(nèi)容正好之前看csapp的時(shí)候總結(jié)了一下,可以直接貼出來(lái)作為總結(jié)了。
Linux的內(nèi)存工作原理,這又是一個(gè)特別大的話題。一切向著盡量利用物理資源的方向在發(fā)展,
在沒(méi)有虛擬內(nèi)存的世界里,所以的進(jìn)程都能看到同一個(gè)物理內(nèi)存在這種模式下如果有多個(gè)進(jìn)程那么這個(gè)內(nèi)存管理就很復(fù)雜了(在DSP,嵌入時(shí)系統(tǒng)中可能總共就一個(gè)程序這時(shí)候完全可以直接使用物理內(nèi)存)。針對(duì)Unix這種多進(jìn)程的系統(tǒng)后來(lái)就有了虛擬內(nèi)存的概念。
虛擬內(nèi)存 是硬件異常,硬件地址翻譯,主存,磁盤(pán)和內(nèi)核軟件的完美交互,他為沒(méi)有進(jìn)程提供一個(gè)很大的,一致的地址空間。
它將內(nèi)存看成一個(gè)存儲(chǔ)在磁盤(pán)上很大的連續(xù)的空間,在主存中只保存活動(dòng)區(qū)域,并根據(jù)需要在磁盤(pán)和主存之間來(lái)回傳遞數(shù)據(jù),通過(guò)這種方式很好的使用了內(nèi)存。
為每個(gè)進(jìn)程提供了一致的地址空間,從而簡(jiǎn)化了內(nèi)存管理
每個(gè)進(jìn)程的地址空間是獨(dú)立的,避免了進(jìn)程之間在地址空間上的破壞
物理地址和虛擬地址
物理尋址(嵌入式設(shè)備/DSP設(shè)備):
虛擬尋址系統(tǒng)(現(xiàn)代處理器):
虛擬內(nèi)存作為磁盤(pán)的高速緩存工具
DRAM 作為磁盤(pán)的緩存,通過(guò)虛擬內(nèi)存來(lái)管理磁盤(pán)上的那個(gè)塊緩存到內(nèi)存中來(lái)。
VP(virtual page):將虛擬內(nèi)存分割成大小固定的塊
PP(physical page):物理頁(yè)(葉幀)
VP---->PP 關(guān)系
通過(guò)頁(yè)表(page table) 來(lái)判定一個(gè)虛擬頁(yè)是否緩存在DRAM中。如果命中就指向一個(gè)物理頁(yè)中, 如果不命中,系統(tǒng)必須判斷這個(gè)虛擬頁(yè)存放在磁盤(pán)的那個(gè)位置,在物理內(nèi)存中選擇犧牲一個(gè)頁(yè),將虛擬頁(yè)從磁盤(pán)復(fù)制到DRAM中,替換掉犧牲頁(yè)。
頁(yè)命中:
缺頁(yè):
虛擬內(nèi)存作為內(nèi)存管理工具
虛擬內(nèi)存除了作為磁盤(pán)的高速緩存之外,還作為L(zhǎng)inux的內(nèi)存管理工具,這樣Linux中的每個(gè)進(jìn)程都有相同的的地址空間格式,兩個(gè)進(jìn)程通過(guò)將虛擬頁(yè)面映射到相同的物理頁(yè)幀上是實(shí)現(xiàn)了共享內(nèi)存。
虛擬內(nèi)存作為內(nèi)存保護(hù)的工具
地址翻譯
多級(jí)頁(yè)表:
linux 內(nèi)存系統(tǒng)
內(nèi)存分配與回收
標(biāo)準(zhǔn)庫(kù)中的malloc有兩種實(shí)現(xiàn)方式:
小塊內(nèi)存(小于128k) 使用sbrk分配(釋放并不返還給系統(tǒng),容易造成系統(tǒng)碎片(詳細(xì)見(jiàn)參考2))
大塊內(nèi)存(大于128k) 使用mmap內(nèi)存映射的方式分配(每次unmap之后都會(huì)返還給系統(tǒng),所以每次mallo都會(huì)導(dǎo)致缺頁(yè)異常,內(nèi)核的管理負(fù)擔(dān)增大)
系統(tǒng)回收內(nèi)存三種方式
LRU
回收不常訪問(wèn)的內(nèi)存,把不常訪問(wèn)的內(nèi)存通過(guò)交換分區(qū)直接寫(xiě)入磁盤(pán)
OOM
參考資料
總結(jié)
以上是生活随笔為你收集整理的linux 内存管理优化,Linux性能优化实战 内存篇 阅读笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL外键创建失败1005原因总结
- 下一篇: 在linux下安装gaussian09