Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9086866
  • 博文数量: 1732
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19830
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1732)

文章存档

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: LINUX

2010-11-24 14:33:07

  1. #include   
    void *kmalloc(size_t size, int flags);
    kmalloc 这个函数快(除非它阻塞)并且不清零它获得的内存; 分配的区仍然持有它原来的内容.分配的区也是在物理内存中连续
    kmalloc 能够分配的内存块的大小有一个上限. 这个限制随着体系和内核配置选项而变化.一般情况下为128KB.
  2. 标志 flags 
    GFP_KERNEL, 意思是这个内存分配是为 “代表运行在内核空间的进程“ 而进行的.GFP_KENREL 意味着 kmalloc 能够使当前进程在少内存的情况下睡眠来等待一页。他能使当前的代码进入休眠。如果要使的代码不进入休眠的情况(在中断处理, tasklet, 和内核定时器中),在最好GFP_ATOMIC
    标志来代替,这样内核会寻找合适的空闲页,如果没有返回错误而不会等待进入休眠状态。
  3. 其他flags 标识
    GFP_ATOMIC

    用来从中断处理和进程上下文之外的其他代码中分配内存. 从不睡眠.

    GFP_KERNEL

    内核内存的正常分配. 可能睡眠.

    GFP_USER

    用来为用户空间页来分配内存; 它可能睡眠.

    GFP_HIGHUSER

    如同 GFP_USER, 但是从高端内存分配.

    GFP_NOIO

    GFP_NOFS

    这个标志功能如同 GFP_KERNEL, 但是它们增加限制到内核能做的来满足请求. 一个 GFP_NOFS 分配不允许进行任何文件系统调用, 而 GFP_NOIO 根本不允许任何 I/O 初始化. 它们主要地用在文件系统和虚拟内存代码, 那里允许一个分配睡眠, 但是递归的文件系统调用会是一个坏注意.



阅读(2741) | 评论(0) | 转发(0) |
0

上一篇:太经典了

下一篇:第 9 章 与硬件通讯

给主人留下些什么吧!~~