最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

淺淺講解下Linux內(nèi)存管理之CMA

2022-12-13 17:47 作者:補給站Linux內(nèi)核  | 我要投稿

說明:

  1. Kernel版本:4.14

  2. ARM64處理器,Contex-A53,雙核

  3. 使用工具:Source Insight 3.5, Visio

1. 概述

Contiguous Memory Allocator, CMA,連續(xù)內(nèi)存分配器,用于分配連續(xù)的大塊內(nèi)存。CMA分配器,會Reserve一片物理內(nèi)存區(qū)域:

  1. 設備驅(qū)動不用時,內(nèi)存管理系統(tǒng)將該區(qū)域用于分配和管理可移動類型頁面;

  2. 設備驅(qū)動使用時,用于連續(xù)內(nèi)存分配,此時已經(jīng)分配的頁面需要進行遷移;

此外,CMA分配器還可以與DMA子系統(tǒng)集成在一起,使用DMA的設備驅(qū)動程序無需使用單獨的CMA API。

2. 數(shù)據(jù)結構

內(nèi)核定義了struct cma結構,用于管理一個CMA區(qū)域,此外還定義了全局的cma數(shù)組,如下:

  • base_pfn:CMA區(qū)域物理地址的起始頁幀號;

  • count:CMA區(qū)域總體的頁數(shù);

  • *bitmap:位圖,用于描述頁的分配情況;

  • order_per_bit:位圖中每個bit描述的物理頁面的order值,其中頁面數(shù)為2^order值;

來一張圖就會清晰明了:

圖片


【文章福利】小編推薦自己的Linux內(nèi)核技術交流群:【749907784】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ? ??

3. 流程分析

3.1 CMA區(qū)域創(chuàng)建

3.1.1 方式一 根據(jù)dts來配置

之前的文章也都分析過,物理內(nèi)存的描述放置在dts中,最終會在系統(tǒng)啟動過程中,對dtb文件進行解析,從而完成內(nèi)存信息注冊。

CMA的內(nèi)存在dts中的描述示例如下圖:

圖片

dtb解析過程中,會調(diào)用到rmem_cma_setup函數(shù):

圖片

3.1.2 方式二 根據(jù)參數(shù)或宏配置

可以通過內(nèi)核參數(shù)或配置宏,來進行CMA區(qū)域的創(chuàng)建,最終會調(diào)用到cma_declare_contiguous函數(shù),如下圖:

圖片

3.2 CMA添加到Buddy System

在創(chuàng)建完CMA區(qū)域后,該內(nèi)存區(qū)域成了保留區(qū)域,如果單純給驅(qū)動使用,顯然會造成內(nèi)存的浪費,因此內(nèi)存管理模塊會將CMA區(qū)域添加到Buddy System中,用于可移動頁面的分配和管理。CMA區(qū)域是通過cma_init_reserved_areas接口來添加到Buddy System中的。


core_initcall(cma_init_reserved_areas);

core_initcall宏將cma_init_reserved_areas函數(shù)放置到特定的段中,在系統(tǒng)啟動的時候會調(diào)用到該函數(shù)。

圖片

3.3?CMA分配/釋放

  • CMA分配,入口函數(shù)為cma_alloc

圖片
  • CMA釋放,入口函數(shù)為cma_release:函數(shù)比較簡單,直接貼上代碼

3.4?DMA使用

代碼參考driver/base/dma-contiguous.c,主要包括的接口有:

在上述的接口中,實際調(diào)用的就是cma_alloc/cma_release接口來實現(xiàn)的。

整體來看,CMA分配器還是比較簡單易懂,也不再深入分析。


原文作者:LoyenWang


淺淺講解下Linux內(nèi)存管理之CMA的評論 (共 條)

分享到微博請遵守國家法律
湛江市| 凤山市| 东丽区| 五家渠市| 文登市| 德庆县| 黔南| 文山县| 二连浩特市| 鄂伦春自治旗| 郁南县| 昌吉市| 富阳市| 永修县| 龙山县| 清远市| 双峰县| 长沙县| 中方县| 襄汾县| 城步| 平谷区| 临朐县| 桐乡市| 广丰县| 青冈县| 金平| 鹤峰县| 凌海市| 于田县| 紫金县| 德钦县| 星子县| 房产| 定州市| 长葛市| 佛教| 邹平县| 永胜县| 隆昌县| 黄骅市|