前言
上一篇说了内存管理的数据结构,现在来说说内存管理的一些接口函数,页的分配与释放。
alloc_pages && __free_pages
include<linux/module.h>
include<linux/sched.h>
include<linux/mm_types.h>
include<linux/gfp.h>
include<linux/mm.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("zmrlinux");
MODULE_DESCRIPTION("something about page");
static int __init page_size(void){
struct page * pos;
char *temp;
pos = alloc_pages(GFP_KERNEL,2);
if(NULL == pos){
printk("alloc failed\n");
return -1;
}else{
printk("First page is %p\n",pos);
printk("The temp is %p\n",temp);
temp = (char *)page_address(pos);
printk("the page address is %p\n",temp);
}
return 0;
}
static void __exit page_size_out(void)
{
printk("GOODBYE \n");
}
module_init(page_size);
module_exit(page_size_out);
Makefile
[c]
obj-m := page_about.o
CURRENT_PATH := ${shell pwd}
CURRENT_KERNEL_PATH := ${shell uname -r}
LINUX_KERNEL_PATH := /usr/src/kernels/$(CURRENT_KERNEL_PATH)
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
rm *.o
[/c]
allco_page(gfp_mask)
只分配一个页,返回指向页的结构指针
alloc_pages(gfp_mask,order)
分配2 的order 幂次的页,返回指向第一个页页结构的指针
__get_free_page(gfp_mask)
只分配一个页,返回指向其逻辑地址的指针
__get_free_pages(gfp_mask,order)
分配2 的order 幂次的页,返回指向其逻辑地址的指针
get_zeroed_page(gfp_mask)
只分配一页,让其内容填充0,返回指向其逻辑地址的指针