初始化完内存页和内存区,接下来就实现分配和释放内存页面;
内存页的分配:
内存分配页面接口函数:mm_division_pages,进而调用mm_divpages_fmwk 内存分配页面框架函数,此函数先返回对应的内存区结构的指针,然后调用内存分配核心函数 mm_divpages_core ,返回msadsc_t 结构体指针,包含返回 实际分配的页面数;
其中内存分配核心函数 mm_divpages_core ,会先进行内存区加锁,然后执行分配内存函数mm_reldivpages_onmarea,然后再解锁 ;
内存分配算法逻辑:如果能在 dm_mdmlielst 数组中找到对应请求页面数的 msadsc_t 结构就直接返回,如果没有就寻找下一个 dm_mdmlielst 数组中元素,依次迭代直到最大的 dm_mdmlielst 数组元素,然后依次对半分割,直到分割到请求的页面数为止;
内存页的释放:
就是分配的逆过程;
内存释放算法逻辑:会查找相邻且物理地址连续的 msadsc_t 结构,进行合并,合并工作也是迭代过程,直到合并到最大的连续 msadsc_t 结构或者后面不能合并为止,最后把这个合并到最大的连续 msadsc_t 结构,挂载到对应的 dm_mdmlielst 数组中;
标签:释放,dm,mm,08,内存,msadsc,分配,页面 From: https://www.cnblogs.com/xuan01/p/17353953.html