技术特征:
1.一种在Linux系统用户空间分配连续物理内存的方法,包括初始化步骤和分配连续物理内存步骤,其特征是所述的初始化步骤中至少包括2次用户空间与物理内存的映射分配步骤。
2.根据权利要求1所述的一种在Linux系统用户空间分配连续物理内存的方法,其特征是:
所述初始化步骤包括:
步骤1、在用户空间以页为单位申请内存,将用户空间与物理内存进行映射分配;
步骤2、对上述映射分配的页面空间进行标注,并将所述已标注映射分配页的物理内存地址加入到伙伴算法中;
步骤3、重复步骤1和2,直到分配的总物理内存地址满足需求;
步骤4、从上述的伙伴算法中找出物理内存连续的内存块地址,用户空间与所找出物理内存连续的内存块地址再次映射分配,生成新的映射分配并替换原映射分配后放入伙伴系统,然后计算出物理内存和新的映射分配的偏移值保存在伙伴系统中。
所述的分配连续物理内存步骤包括:
步骤1、从上述初始化步骤完成的伙伴系统中得到需要的连续物理内存的首地址;
步骤2、将上述物理内存的首地址加上所述偏移值得到虚拟地址的首地址,即完成了在用户空间分配连续物理内存。
3.根据权利要求1所述的一种在Linux系统用户空间分配连续物理内存的方法,其特征是所述的初始化步骤为:
步骤1、调用mmap从/dev/mem分配出一个4k的映射分配页;对所述映射分配页进行写入操作;
步骤2、根据/proc/self/memmap映射分配得到所述映射分配页的物理内存,并把该物理内存加入到伙伴算法中;
步骤3、判断映射分配页是否已满足总物理内存的需求,如不满足则重复步骤1-2,直到映射分配的总物理内存满足需求;
步骤4、如映射分配的总物理内存已满足需求,则从步骤3所述的伙伴算法中找出物理内存连续的内存块,进而对所述物理内存连续的内存块通过mmap再次映射分配到新的虚拟地址,所述新的虚拟地址替换上述映射分配页后再次传递给伙伴系统,然后计算出物理内存和新虚拟地址的偏移值保存在伙伴系统中。
4.根据权利要求3所述的一种在Linux系统用户空间分配连续物理内存的方法,其特征是根据/proc/self/memmap映射分配得到所述映射分配页的物理内存,并把该物理内存加入到伙伴算法中时,调用加密锁对该页进行加锁保护。