虚拟地址--物理地址的映射关系.docVIP

  • 78
  • 0
  • 约1.3万字
  • 约 18页
  • 2017-05-11 发布于河南
  • 举报
虚拟地址--物理地址的映射关系

虚拟地址--物理地址的映射关系 虚拟地址--物理地址的映射关系 这里只分析分配连续物理地址的函数。对于 vmalloc() 这种分配非连续物理地址的函数不在本记录范围之内。 1、kmalloc() 分配连续的物理地址,用于小内存分配。 2、__get_free_page() 分配连续的物理地址,用于整页分配。 至于为什么说以上函数分配的是连续的物理地址和返回的到底是物理地址还是虚拟地址,下面的记录会做出解释。 kmalloc() 函数本身是基于 slab 实现的。slab 是为分配小内存提供的一种高效机制。但 slab 这种分配机制又不是独立的,它本身也是在页分配器的基础上来划分更细粒度的内存供调用者使用。也就是说系统先用页分配器分配以页为最小单位的连续物理地址,然后 kmalloc() 再在这上面根据调用者的需要进行切分。 关于以上论述,我们可以查看 kmalloc() 的实现,kmalloc()函数的实现是在 __do_kmalloc() 中,可以看到在 __do_kmalloc()代码里终极调用了 __cache_alloc() 来分配一个 slab,实在 kmem_cache_alloc() 等函数的实现也是调用了这个函数来分配新的 slab。我们按照 __cache_alloc()函数的调用路径一直跟踪下往会发现在 cache_gro

文档评论(0)

1亿VIP精品文档

相关文档