![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux内存管理
文章平均质量分 88
linux内存管理学习
楓潇潇
这个作者很懒,什么都没留下…
展开
-
linux内存管理之CMA
CMA,Contiguous Memory Allocator,是内存管理子系统中的一个模块,负责物理地址连续的内存分配,一般我们把这块区域定义为reserved-memory。一般系统会在启动过程中,从整个memory中配置一段连续内存用于CMA,然后内核其他的模块可以通过CMA的接口API进行连续内存的分配。1、解析DTS或者命令行中的参数,确定CMA内存的区域,这样的区域我们定义为CMA area2、提供cma_alloc和cma_release两个接口函数用于分配和释放CMA pages。原创 2024-03-14 17:54:18 · 1718 阅读 · 0 评论 -
linux内存管理——内存初始化4---mm_init函数分析
而这些页都有一个具体的页帧号与之对应。页帧号一般用pfn来表示,那么由于每个页都有一个页帧号,那最小的页帧号和最大的页帧号为多少呢?需要特别注意的是,页帧号也是与mem_map数组的index相对应。我们一般认为pfn_min为0,而最大pfn_max为mem_map数组下标的最大值,这个最大值也就是max_pfn,这个值跟内核的max_mapnr相对应。mem_map作用,其是描述所有的物理内存采用的struct page结构的数组的基指针。比如说,对于4GB的内存来说,如果一个页定义为4KB,即2。原创 2024-02-06 10:28:31 · 564 阅读 · 1 评论 -
linux内存管理——内存初始化3---paging_init
从Linux内存管理之物理内存初始化中,可知在paging_init调用之前,存放Kernel Image和DTB的两段物理内存区域可以访问了(相应的页表已经建立好)。尽管物理内存已经通过memblock_add添加进系统,但是这部分的物理内存到虚拟内存的映射还没有建立,可以通过memblock_alloc分配一段物理内存,但是还不能访问,一切还需要等待paging_init的执行。最终页表建立好后,可以通过虚拟地址去访问最终的物理地址了。原创 2024-02-06 10:27:25 · 964 阅读 · 0 评论 -
linux内存管理——内存初始化2---分页机制
pgd_ctor(mm, pgd) //将swapper_pg_dir全局页目录(部分后256项–即内核最后1G的虚拟地址,这里指的是内核的页表)拷到pgd里,则可以看出,linux下所有进程的内核页全局目录是一样的,都是swapper_pg_dir里最后的1/4的内容,而每个进程的用户态的页表确是不同的,所以在dup_mmap会去将父进程的页表一项一项的爬出来设置为当前进程的页表。相反页表级数越多,需要的存储的页表数据就会越少,而且能支持到比较大的地址空间,但是虚拟地址到物理地址的映射就会越慢。原创 2024-02-06 09:53:22 · 932 阅读 · 0 评论 -
linux内存管理——内存初始化1---物理内存初始化
备注:1. Kernel版本:5.4.952. 使用工具:Source Insight 4.0。原创 2024-02-06 09:51:15 · 1115 阅读 · 0 评论