首页
登录 | 注册

第 8 章 分配内存

  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 初始化. 它们主要地用在文件系统和虚拟内存代码, 那里允许一个分配睡眠, 但是递归的文件系统调用会是一个坏注意.



本文网址:http://www.bnee.net/article/22628.html

相关文章

  • 一.kmalloc分配内存         GFP_ATOMIC:用于在中断处理例程或其他运行于进程上下文之外的代码中分配内存,不会休眠.         GFP_KERNEL:内核内存的通常分配方法,可能引起休眠.         kma ...
  • 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap系统调用
    如何查看进程发生缺页中断的次数?          用ps -o majflt,minflt -C program命令查看.           majflt代表major fault,中文名叫大错误,minflt代表minor fault ...
  • 内核为设备驱动提供了一个统一的内存管理接口,所以模块无需涉及分段和分页等问题. 我已经在第一个scull模块中使用了 kmalloc 和 kfree 来分配和释放内存空间. kmalloc 函数内幕 kmalloc 是一个功能强大且高速(除 ...
  • linux设备驱动归纳总结(五):1.在内核空间分配内存
    linux设备驱动归纳总结(五):1.在内核空间分配内存 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 一般的, ...
  • 近期发现分析部门同事告知,hive处理原始数据的时候总是不能执行完成,报错如下,这个问题是avro的文件不完整: Diagnostic Messages for this Task: Error: java.io.IOException: ...
  • 2.1 概述 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又是执行最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任. 对于Java程序员来说,不需要在为每 ...
  • 1.C程序结构 下面列出C语言可执行程序的基本情况(Linux 2.6环境/GCC4.0). [[email protected] Ctest]# ls test -l     //test为一个可执行程序 -rwxr-xr-x  1 root ...

2020 bnee小站 webmaster#bnee.net
12 q. 0.064 s.
湘ICP备19013596号-2