内存管理器(十一)kernel内存管理---页的获取与释放

前言

上一篇说了内存管理的数据结构,现在来说说内存管理的一些接口函数,页的分配与释放。

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]

2015-11-05 09:58:06 的屏幕截图

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,返回指向其逻辑地址的指针

void __free_pages(struct page *page,unsigned int order)

void free_pages(unsigned long addr,unsigned int order)

void free_page(unsigned long addr)

以上全部都是页的释放

查看原文:http://zmr.lezifang.cn/2015/11/05/%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e5%99%a8%ef%bc%88%e5%8d%81%e4%b8%80%ef%bc%89kernel%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86-%e9%a1%b5%e7%9a%84%e8%8e%b7%e5%8f%96%e4%b8%8e%e9%87%8a%e6%94%be/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值