Chinaunix首页 | 论坛 | 博客
  • 博客访问: 486964
  • 博文数量: 115
  • 博客积分: 5016
  • 博客等级: 大校
  • 技术积分: 1401
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-21 16:03
文章分类

全部博文(115)

文章存档

2013年(1)

2010年(17)

2009年(76)

2008年(21)

我的朋友

分类: 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。
阅读(2061) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~