linux 内核空间 缺页,Linux-3.14.12内存管理笔记【缺页异常处理(1)】
發(fā)布時(shí)間:2017-06-18 15:57:06
缺頁(yè)異常是很常見的現(xiàn)象,但是其來(lái)源有兩種,一種是真實(shí)的異常,這是由于內(nèi)存訪問的地址未分配并未映射而產(chǎn)生的訪問了非法地址的情況;另外一種是虛擬內(nèi)存已經(jīng)分配出去了,但是實(shí)際上的物理內(nèi)存并未映射分配而產(chǎn)生的缺頁(yè)異常。這里主要分析后者,這是與內(nèi)存管理相關(guān)的,前者是代碼邏輯的問題。根據(jù)慣例,先來(lái)了解一下.........【閱讀全文】
閱讀(1667) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(0)
發(fā)布時(shí)間:2017-05-14 00:26:48
前面分析了不連續(xù)頁(yè)面管理的初始化以及申請(qǐng)的實(shí)現(xiàn),最后以釋放不連續(xù)頁(yè)面空間vfree()收尾。【file:/mm/vmalloc.c】/**?* vfree - release memory allocated by vmalloc()?* @addr: memory base address?*?* Free t.........【閱讀全文】
閱讀(1397) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(0)
發(fā)布時(shí)間:2017-05-14 00:07:56
從前文分析來(lái)看,不連續(xù)頁(yè)面管理的初始化較為簡(jiǎn)單,現(xiàn)在分析一下具體的分配實(shí)現(xiàn)。vmalloc內(nèi)存申請(qǐng)函數(shù)入口為vmalloc():【file:/mm/vmalloc.c】/**?* vmalloc - allocate virtually contiguous memory?* @size: allocation size?.........【閱讀全文】
閱讀(1432) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(0)
發(fā)布時(shí)間:2017-05-13 23:49:16
伙伴管理算法初衷是解決外部碎片問題,而slab算法則是用于解決內(nèi)部碎片問題,但是內(nèi)存使用的得不合理終究會(huì)產(chǎn)生碎片。碎片問題產(chǎn)生后,申請(qǐng)大塊連續(xù)內(nèi)存將可能持續(xù)失敗,但是實(shí)際上內(nèi)存的空閑空間卻是足夠的。這時(shí)候就引入了不連續(xù)頁(yè)面管理算法,即我們常用的vmalloc申請(qǐng)分配的內(nèi)存空間,它主要是用于將不連續(xù)的頁(yè)面,通.........【閱讀全文】
閱讀(1488) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(0)
發(fā)布時(shí)間:2017-01-09 13:25:34
【注:往事不可追,也不知道是自己的編輯問題還是其他原因,整理博文的時(shí)候,發(fā)現(xiàn)有篇博文居然漏了,只好在此補(bǔ)上,該文延續(xù)《系統(tǒng)啟動(dòng)階段的memblock算法(1)》的分析補(bǔ)充。難怪總覺得怪怪的,可愁死我這強(qiáng)迫癥患者了,沒法往回插入,只好作罷】? ? ?結(jié)束完memblock算法初始化前的準(zhǔn)備工作,回到memblo.........【閱讀全文】
閱讀(2741) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(0)
發(fā)布時(shí)間:2017-01-09 08:46:38
分析完kmemleak實(shí)現(xiàn)后,照常實(shí)驗(yàn)一下,以確定功能正常。如kmemcheck一樣,該功能需要在內(nèi)核開啟的情況下才能夠使用。主要的配置項(xiàng)有:CONFIG_DEBUG_KERNEL、CONFIG_HAVE_DEBUG_KMEMLEAK、CONFIG_DEBUG_KMEMLEAK,以及配置信息記錄條數(shù)的CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE,通常情況下配置數(shù)量的可以不必修改,但.........【閱讀全文】
閱讀(4591) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(0)
發(fā)布時(shí)間:2017-01-09 08:42:05
kmemleak的工作原理很簡(jiǎn)單,主要是對(duì)kmalloc()、vmalloc()、kmem_cache_alloc()等接口分配的內(nèi)存地址空間進(jìn)行跟蹤,通過對(duì)其地址、空間大小、分配調(diào)用棧等信息添加到PRIO搜索樹中進(jìn)行管理。當(dāng)有匹配的內(nèi)存釋放操作時(shí),將會(huì)把跟蹤的信息從kmemleak管理中移除。通過內(nèi)存掃描(包括對(duì)保存的寄存器值),如果發(fā)現(xiàn)某塊內(nèi)存.........【閱讀全文】
閱讀(5161) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(1)
發(fā)布時(shí)間:2016-12-23 14:10:53
前面分析了kmemcheck的實(shí)現(xiàn),那么現(xiàn)在就針對(duì)其功能進(jìn)行試驗(yàn),鑒于kmemcheck支持KMEMCHECK_SHADOW_UNALLOCATED、KMEMCHECK_SHADOW_UNINITIALIZED及KMEMCHECK_SHADOW_FREED的檢測(cè)且檢測(cè)上報(bào)信息大同小異,本文中的實(shí)驗(yàn)主要針對(duì)于未初始化的內(nèi)存進(jìn)行。如果需要使能kmemcheck,需要進(jìn)行一系列的內(nèi)核參數(shù)設(shè)置,具體的配置.........【閱讀全文】
閱讀(2058) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(0)
發(fā)布時(shí)間:2016-12-23 14:03:59
kmemcheck和kmemleak是linux在2.6.31版本開始對(duì)外提供的內(nèi)核內(nèi)存管理方面的兩個(gè)檢測(cè)工具,最初僅支持x86環(huán)境,時(shí)至今日已經(jīng)能夠支持arm環(huán)境了。其中kmemcheck主要是用于內(nèi)核內(nèi)存破壞檢測(cè),而kmemleak則是用于內(nèi)核內(nèi)存泄露檢測(cè)。本文主要分析kmemcheck的實(shí)現(xiàn),至于kmemleak下一篇文章再詳細(xì)介紹。為什么要有kmemcheck.........【閱讀全文】
閱讀(1932) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(0)
發(fā)布時(shí)間:2015-12-14 00:46:19
kmalloc()是基于slab/slob/slub分配分配算法上實(shí)現(xiàn)的,不少地方將其作為slab/slob/slub分配算法的入口,實(shí)際上是略有區(qū)別的。現(xiàn)在分析一下其實(shí)現(xiàn):【file:/include/linux/slab.h】/**?* kmalloc - allocate memory?* @size: how many bytes of memo.........【閱讀全文】
閱讀(2571) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(1)
給主人留下些什么吧!~~
劍魂簫心2018-07-03 23:07
博主真是神人,我正在看4.9內(nèi)核代碼,每當(dāng)遇到理解不了的地方總能搜到博主的文章。
Jean_Leo2016-02-19 00:52
xlzheng:后面沒有更新了嗎,很期待啊
謝謝關(guān)注。后面會(huì)更新的,最近工作較忙,還抽不出時(shí)間來(lái)整理,下一篇是關(guān)于kmemcheck的內(nèi)容
xlzheng2016-02-18 14:57
后面沒有更新了嗎,很期待啊
留言熱議
請(qǐng)登錄后留言。
總結(jié)
以上是生活随笔為你收集整理的linux 内核空间 缺页,Linux-3.14.12内存管理笔记【缺页异常处理(1)】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uint16 累加_如何把一个uint1
- 下一篇: Linux笔记-iptables规则原理