08 内存(下)实现内存页的分配和释放

初始化完内存页和内存区,接下来就实现分配和释放内存页面;

内存页的分配:

 内存分配页面接口函数: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 数组中;

 

posted @ 2023-04-25 21:55  QianFa01  阅读(43)  评论(0)    收藏  举报