内核函数get_free_pages, kmalloc, vmalloc比较(转载)
来源:互联网 发布:艾森娜家具淘宝店铺 编辑:程序博客网 时间:2024/05/16 04:50
(1) 請比較與說明幾個 memory management 相關 kernel functions: --get_free_pages(), kmalloc(), vmalloc(), brk(), 其管理機制、使用時機、特性比較。
[Ans]
_ _ get_free_pages
Page frame management
Kernel
Physical
kmalloc
Memory area management
Kernel
Physical
vmalloc
Non-contiguous memory area management
Kernel
Physical/ virtual
brk
Process address space management
User process
viirtual
a. __get_free_pages() :
對象: Contiguous Page frame
Allocate方式: Buddy System Algorithm
b. kmalloc():
對象: Contiguous Memory Area
Allocate方式: Slab Allocator
c. vmalloc() :
對象: Non-Contiguous Memory Area
Allocate方式: Slab Allocator
d. brk() :
對象: Memory Region (User Process Address Space)
作用: Change heap size of the process
[Notes]
(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",
只是有分固定或任意長度的差別.
(2) __get_free_page: “ Used to request 2 order contiguous page frame “
kmalloc(): “ Used to allocate contiguous general objects .(memory area) “
[Notice]
-因用Buddy System Algorithm,故是2order Size.
-在Slab Allocator把每個memory area視為 Object. 雖然 Memory area 可任意長度,但在Linux Implement 作法是把Object的Size 定為geometrically distributed size (ranging from 32 ~1331072).
(3) kmalloc() 與 vmalloc() 主要差別是, vmalloc()所要到的 Memory area 是非連續的.
即 “ linear address is assigned to noncontiguous memory area ”, 每個 Memory area是連續的
physical address , 但個別 memory area是不相連的.
(4) Memory Region 是指 “ interval of user process address space “, 通常起始位址與長度是4096的倍數, 故 process 的 address space 就由 a set of memory region list來代表在Linear address space上的位置. brk() 這個System Call即是在User Level 向Kernel要求調整Process 的heap Size.
原文地址:http://blog.chinaunix.net/u1/35281/showart_279244.html
- 内核函数get_free_pages, kmalloc, vmalloc比较(转载)
- 比较kmalloc/vmalloc/get_free_pages
- 比较kmalloc/vmalloc/get_free_pages
- 转一篇文章,比较kmalloc/vmalloc/get_free_pages
- 内核中的内存申请:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages
- kmalloc函数及相关的malloc、vmalloc、get_free_pages
- 内核中的内存申请:kmalloc、vmalloc、kzalloc、get_free_pages 之间的区别
- [linux 内核]kmalloc/kfree,vmalloc/vfree函数用法和区别
- LINUX内核内存管理kmalloc,vmalloc
- linux内核kmalloc与vmalloc的区别.
- kmalloc vmalloc
- kmalloc vmalloc
- [经典]Linux内核中get_free_page、kmalloc和vmalloc函数的区别(示例Module)
- Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别
- Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别
- 在内核空间分配内存(kmalloc/vmalloc/ioremap/get free page)
- vmalloc内核函数分析。
- kmalloc内核函数
- 2009 年度最佳 jQuery 插件
- POJ 3463 Sightseeing
- Skype占用80端口导致VS调试web应用失败
- eclipse3.5 安装svn
- 企业短信平台
- 内核函数get_free_pages, kmalloc, vmalloc比较(转载)
- Linux Bash Shell学习(十一):流程控制——case
- 如何产生互素的2个大数
- 位图文件(BMP)格式分析以及程序实现
- 公因数、素数、数域与数论
- OPhone J2ME开发入门环境建立
- ACIS,HOOPS和AGM介绍
- LR(0)分析器的构造算法
- 网页布局DIV+CSS,在IE中能显示居中的,在火狐上不能显示居中,偏左怎么解决