色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux系統(tǒng)下內(nèi)存申請(qǐng)應(yīng)用的方法原理總結(jié)

          Linux系統(tǒng)下內(nèi)存申請(qǐng)應(yīng)用的方法原理總結(jié)

          作者: 時(shí)間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

          1. 地址空間的管理

          本文引用地址:http://cafeforensic.com/article/201610/305763.htm

          物理地址都是有內(nèi)核管理的, node-->zone-->mem_map-->page, 所有的物理頁面都在mem_map數(shù)組中的頁幀對(duì)應(yīng), 然后不同的page有分為DMA,normal,highmem三個(gè)zone。

          內(nèi)核線性地址空間, 實(shí)際上只是低端內(nèi)存才有線性地址,0---896MB部分。

          內(nèi)核虛擬地址, 低端內(nèi)存的虛擬地址與線性地址是一樣的。 高端內(nèi)存只有在映射了以后才有虛擬地址

          用戶空間地址, tast_struct ---> mmap --> mm_struct ---> vm_area_struct

          2.內(nèi)存的申請(qǐng)或使用

          物理內(nèi)存的分配, 在內(nèi)核中最終都要調(diào)用__alloc_pages().它是最核心的分配函數(shù),申請(qǐng)大小最大不超過2的MAX_ORDER次冪,在現(xiàn)在好像最大定義為4MB。

          線性地址, kmalloc和get_free_pages,線性地址, 對(duì)應(yīng)的物理內(nèi)存就是低端內(nèi)存,kmalloc是基于slab的分配技術(shù), 最大不能超過128KB。

          虛擬地址, vmalloc申請(qǐng), 他只是在內(nèi)核中建立類似與用戶空間的vm_area的一個(gè)虛擬內(nèi)存空間到vmlist中, 最終的物理內(nèi)存分配還是基于缺頁的。

          用戶空間的虛擬內(nèi)存, malloc之類的, 最終在內(nèi)核中都是do_map()和do_brk()。實(shí)際上也只是建立了一塊虛擬空間,最終的物理內(nèi)存還是在缺頁異常時(shí)分配的。

          3. 內(nèi)存的交換問題

          在page結(jié)構(gòu)和用戶層的vm_area_struct結(jié)構(gòu)中, 都包含locked和reserved標(biāo)志。通過合適的途徑設(shè)置這些標(biāo)志, 可以是頁面鎖存在物理內(nèi)存中, 不被交換出去。

          4. 設(shè)備內(nèi)存可以通過ioremap映射到內(nèi)核虛擬地址空間, 也可以通過mmap方法映射到用戶空間。



          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉