内核memblock的知识

来源:互联网 发布:key查看器软件 编辑:程序博客网 时间:2024/06/06 21:40

\init\main.c

\arch\arm\kernel\setup.c

\arch\arm\mm\init.c

 

对于memblock的基本操作有以下几个函数:
  1. //将给定的物理地址所指定的memory region加入到指定的memblock(memblock.reserved或者是memblock.memory)中。新加入的memory region需要经过检查,如果与原先的memory region有重叠,则需要合并在原先的memory region中,否则的话就新建一个memory region.
  2. static long __init_memblock memblock_add_region(struct memblock_type *type, phys_addr_t base,phys_addr_t size);

  3. //从指定的memblock中移除指定物理地址所指定的memory region.如果所指定的区域是存在区域的一部分,则涉及到调整region大小,或者将一个region拆分成为两个region.
  4. static long __init_memblock __memblock_remove(struct memblock_type *type, phys_addr_t base, phys_addr_t size);

memblock_reserve,memblock_remove此函数调用后,去除的物理内存就不会被系统进程使用,/proc/meminfo中的memtotal数值也不包含此块物理内存。


  1. //使用该函数可以向kernel申请一块可用的物理内存。实际的操作是在memblock.memory中找到合适的内存,将其从memblock.memory去除,加入到memblock.reserved中以标记其已经被使用。
  2. phys_addr_t __init memblock_alloc(phys_addr_t size, phys_addr_t align);
  1. //使用该函数来释放由memblock_alloc申请到的物理内存,释放的内存会从memblock.reserved中移除,并加入memblock.memory中
  2. long __init_memblock memblock_free(phys_addr_t base, phys_addr_t size);

 

0 0