Linux内核中内存的使用:
分配内存:
unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order);
mask :
order : 决定分配到内存的大小范围是0~10,分配到内存的范围为4K * 2的order次方 4K ~ 4M
返回值为分配到内存的虚拟地址
注意:这个函数分配到的内存来自于低端内存,所以虚拟地址空间对于的物理地址空间是一段连续的地址空间
void free_pages(unsined long addr, unsigned int order);
addr: 要释放的内存的首地址(虚拟地址),就是__get_free_pages的返回值
order:同上
void *kmalloc(ssize_t size, gfp_t flags); //void *kzalloc(ssize_t size, gfp_t flags);
使用:如果不考虑参数flags,使用方法与应用层的malloc完全相同
size: 分配内存的大小,范围32B ~ 128KB
注意:这个函数分配到的内存来自于低端内存,所以虚拟地址空间对于的物理地址空间是一段连续的地址空间
linux用户空间申请
PA=VA -c0000000+40000000
pa物理地址
va虚拟地址