写在前面

CMA (contiguous memory allocator)连续内存分配器,被开发用于分配大的、物理连续的内存块,其底层还是依赖内核伙伴系统这样的内存管理机制。通过这套机制,在设备驱动不用时,内存管理系统将该区域用于分配和管理可移动类型页面;设备驱动使用时,用于连续内存分配,此时已经分配的页面需要进行迁移;只有当需要的时候才会被分配给Camera,HDMI等设备。CMA常常和DMA子系统集成在一起使用,对上呈现的接口是标准的DMA,也是一致性缓冲区API(dma_alloc_coherent())。实际上,设备驱动永远不会直接调用CMA API,因为CMA代替了总线地址和内核映射,直接操作页和页框号,而且没有提供管理一致性缓冲区的机制。

CMA初始化包括解析DTS,确定可用CMA内存区域。但CMA并不直接开放给driver的开发者,而是提供cma_alloc和cma_release两个接口函数用于分配和释放cma内存。开发者只需要在需要分配dma缓冲区的时候,调用dma相关函数就可以了,例如dma_alloc_coherent。最终dma相关的分配函数会到达cma的分配函数:dma_alloc_from_contiguous() ---> cma_alloc()

linux_mainline-5.17.0/arch/arm64/mm/init.c321  void __init bootmem_init(void)
322  {
......
334
335     /*
336  

Linux内存从0到1学习笔记(6.7,物理内存初始化之CMA初始化)相关推荐

  1. Linux内存从0到1学习笔记(4,TLB)

    一.TLB简介 Kernel初始化的时候,会在初始化内存中创建页表:而处理器读取指令和数据的时候需要首先通过MMU查表得到物理地址,然后在访问物理地址读取指令或数据.MMU查表过程汇中需要4次访问内存 ...

  2. Linux内存从0到1学习笔记(11.2 内存优化方案之内存压缩zram)

    写在前面 zram是Linux内核提供的一种虚拟内存压缩功能,通过在将一部分内存模拟成块设备,并将压缩后的内存写到这部分模拟的块设备中,直到必须使用硬盘上的交换空间,zram 本质是就是一个块设备. ...

  3. Linux内存从0到1学习笔记(6.6,物理内存初始化之预留内存)

    写在前面 前面的章节中有提到过,memblock分配器会将内存划分为动态管理的内存(保存在memblock的memory type的数组)和静态预留的内存(保存在memblock的reserved t ...

  4. Linux内存从0到1学习笔记(9.1,内存优化调试之kswapd0触发原理)

    写在前面 Linux内核中有一个非常重要的内核线程kswapd,它负责在内存不足时回收页面.kswapd内核线程初始化时会为系统中每个内存结点创建一个名为"kswapd%"内核线程 ...

  5. Linux内存从0到1学习笔记(8.5,CMA内存分配)

    CMA是通过cma_alloc分配的.cma_alloc() --> alloc_contig_range(..., MIGRATE_CMA,...),向刚才释放给buddy system的MI ...

  6. Linux与C++11多线程编程(学习笔记)

    多线程编程与资源同步 在Windows下,主线程退出后,子线程也会被关闭; 在Linux下,主线程退出后,系统不会关闭子线程,这样就产生了僵尸进程 3.2.1创建线程 Linux 线程的创建 #inc ...

  7. 【C#8.0 and .NET Core 3.0 高级编程学习笔记】

    @C#8.0 and .NET Core 3.0 高级编程学习笔记 前言 为了能精细地完成对C#语言的学习,我决定选择一本书,精读它,理解它,记录它.我想选择什么书并不是最重要的,最重要的是持之以恒的 ...

  8. 《嵌入式Linux内存使用与性能优化》笔记

    <嵌入式Linux内存使用与性能优化>笔记 这本书有两个关切点:系统内存(用户层)和性能优化. 这本书和Brendan Gregg的<Systems Performance>相 ...

  9. 2017-2-15从0开始前端学习笔记(HTML)-图片-表格-表单

    2017-2-15从0开始前端学习笔记-图片-表格-表单 标签 图片 图片<img src="#" alt="文本说明 不能加载图片时显示" title= ...

最新文章

  1. 常见Jvm面试题总结及答案整理 120道(持续更新)
  2. 自由移动的气泡_STARCCM+标准算例展示之——曳力作用下的气泡上升速度
  3. 一行Java代码竟能获取tomcat的绝对路径
  4. wxpython多个面板_wxpython笔记:wxPython的布局管理实践【嵌入matplotlib、页面切换】...
  5. #化鲲为鹏,我有话说# 鲲鹏弹性云服务器配置 Tomcat
  6. jdbc批量更新_用集算器更新数据库的技巧
  7. LeetCode每日一题:14.longest-common-prefix(最长公共前缀)
  8. [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!
  9. win7共享文件夹设置无密码
  10. 关于DSP2812的Timer0定时器配置程序的质疑
  11. Linux操作系统搭建本地源
  12. 【数据集链接已添加】注塑成型工艺的虚拟量测和调机优化_第四届工业大数据竞赛题目发布
  13. Warning: Procedure created with compilation errors.
  14. 拒绝访问硬盘拒绝访问的找回方法
  15. 什么是同城双活、异地双活、异地多活
  16. python中一个等于号和两个等于号_Python中is与双等于号“==”的区别
  17. 基于LSTM和词嵌入的tweet文本分类
  18. ToolSettings app 实现系统本地升级
  19. vb6反编译详解_[原创]VB6反编译详解(一)
  20. 基于遗传算法的微电网调度(风、光、蓄电池、微型燃气轮机)(Matlab代码实现)

热门文章

  1. 微信h5网页点击链接跳转到默认浏览器是怎么弄的?gdtool一键实现该方案
  2. B2B常见名词以及英文缩写
  3. 万能的应用商店_万能电影播放器
  4. 字节跳动大神讲座:独家!阿里云大师深入拆解Java虚拟机
  5. Android 网络优化
  6. c语言 threads.h 创建简单的通用多线程模块实例
  7. 北邮微型计算机原理及应用阶段二,北邮信通院微机原理第二章.ppt
  8. centos7用html5播放器,Centos7下yum安装mplayer和vlc播放器
  9. GitHub集成Circle CI(附 Circle CI 配置示例文件)
  10. 超低配置机器无盘网吧的安装方法(转)