内存管理API之nr_free_buffer_pages
2018-02-03 08:12
471 查看
unsigned long nr_free_buffer_pages(void)函数用于计算在ZONE_DMA和ZONE_NORMAL 可以申请 到的空闲page,也就是除去高端内存外可以申请到空闲page 其源码分析如下: unsigned long nr_free_buffer_pages(void) { #这里的GFP_USER 表示可以给用户使用的页,包含空闲和可以回收的页 return nr_free_zone_pages(gfp_zone(GFP_USER)); } static unsigned long nr_free_zone_pages(int offset) { struct zoneref *z; struct zone *zone; /* Just pick one node, since fallback list is circular */ unsigned long sum = 0; #根据当前cpu的numa id 得到系统中整个zonelist struct zonelist *zonelist = node_zonelist(numa_node_id(), GFP_KERNEL); #遍历zonelist for_each_zone_zonelist(zone, z, zonelist, offset) { #这个zone 所有可以申请到的页 unsigned long size = zone->managed_pages; #这里表示预留给系统最多的页 unsigned long high = high_wmark_pages(zone); #可以申请到的页减去系统预留的页,就表示用户可以申请到的总共的页 if (size > high) sum += size - high; } return sum; }
相关文章推荐
- 内存管理API之free_pages
- 内存管理API之mempool_alloc_pages和mempool_free_pages
- 内存管理API之free_pages_exact
- 内存管理API之__free_pages
- 内存管理API之__get_free_pages
- 内存管理API之get_user_pages
- 内存管理API之get_user_pages_fast
- 内存管理之bootmem管理之__free_pages_boot_core
- 内存管理API之mempool_free
- 内存管理API之alloc_pages
- 内存管理API之kmem_cache_free
- 内存管理API之vma_pages
- 内存管理API之mempool_alloc_slab和mempool_free_slab
- 内存管理API之alloc_pages_exact
- 内存管理API之free_vm_area
- 黑马程序员---易错、易望、基础、重要知识点 ——API常用类1——StringBuffer/StringBuilder
- Linux_free(buffer与cache区别)
- Linux内存管理之kmalloc 与 __get_free_page()
- freechart的api
- c++ 内存管理:9、malloc/free的使用要点 new/delete的使用要点