本文共 1001 字,大约阅读时间需要 3 分钟。
__arch_copy_to_user
从高端内存区highmem分配内存,虚拟内存地址是连续的,但是物理地址不是连续的
void *vmalloc(unsigned long size)for (i = 0; i < area->nr_pages; i++) { struct page *page; if (node == NUMA_NO_NODE) page = **alloc_page**(alloc_mask|highmem_mask); else page = alloc_pages_node(node, alloc_mask|highmem_mask, 0); if (unlikely(!page)) { /* Successfully allocated i pages, free them in __vunmap() */ area->nr_pages = i; goto fail; } area->pages[i] = page; if (gfpflags_allow_blocking(gfp_mask|highmem_mask)) cond_resched(); } if (**map_vm_area**(area, prot, pages)) goto fail; return area->addr;
如何分配内存:
__vmalloc_area_node -> alloc_page -> map_vm_area会从高端内存区进行alloc_page操作
转载地址:http://oiloi.baihongyu.com/