分类: LINUX
2009-04-28 18:31:59
1. __get_free_pages() :
对象: Contiguous Page frame Allocate方式: Buddy System Algorithm
2. kmalloc():
对象: Contiguous Memory Area Allocate方式: Slab Allocator
3. vmalloc() :
对象: Non-Contiguous Memory Area Allocate方式: Slab Allocator
4. brk() :
对象: Memory Region(User Process Address Space)作用: Change heap size of the process
Notes1
(1) 在Linux上, Physical memory 依Size固定与否,分成两种:
Page Frame: Fixed Length (4KB)
Memory Area: Arbitrary Length
相对应这两种, 各用不同的管理方式(allocate/release)
Buddy System Algorithm --> Page Frame
Slab Allocator --> Memory Area
Notice:不管 page frame 或 memory area都是指"contiguous physical address", 只是有分固定或任意长度的差別。
Notes2
kmalloc() 与 vmalloc() 主要差別是,vmalloc()所要到的 Memory area 是非连续的。
即 “ linear address is assigned to noncontiguous memory area ”, 每个 Memory area是连续的physical address , 但个别 memory area是不相链的.
kmalloc()分配的内存在0xBFFFFFFF-0xFFFFFFFF以上的内存中,driver一般是用它来完成对DS的分配
vmalloc()则是位于物理地址非连续,虚地址连续区,起始位置由VMALLOL_START来决定,一般作为交换区、模块的分配
get_free_page从字面上理解就是分配一清空页,页的大小是1k、4k、8k、1M。