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