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 数组中;

 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号