驱动开发系列07 - 驱动程序如何分配内存

一:概述

        Linux 内核提供了丰富的内存分配函数、在本文中,我们将介绍在设备驱动程序中分配和使用内存的方法,以及如何优化系统的内存资源。由于内核为驱动程序提供了统一的内存管理接口。所以我们不会去讨论不同架构是如何管理内存的,文本不涉及分段、分页等问题,此外在本文中,我们也不会描述Linux内存管理的内部细节,这在驱动开发系列06 - 内存映射和DMA已经介绍过了,感兴趣的读者可以前往了解。

二:kmalloc 介绍

        kmalloc 是一个功能强大的内存分配函数,由于它与 malloc 相似,因此很容易学习。该函数执行速度很快(除非被阻塞),而且不会清除获取的内存; 分配的区域仍保留其先前的内容。分配的区域在物理内存中也是连续的。在接下来的几节中,我们将详细介绍 kmalloc,这样你就可以将它与后面讨论的内存分配技术进行比较。

        kmalloc 的函数原型是:

#include <linux/slab.h>
void *kmalloc(size_t size, int flags);
        1.参数介绍 

        kmalloc 的第一个参数是待分配内存的大小,以字节为单位。第二个参数(分配标志)更有意思,因为它可以通过多种方式控制 kmalloc 的行为。

        最常用的标志是 GFP_KERNEL,用于在内核空间分配内

相关推荐

  1. 驱动开发系列07 - 驱动程序如何分配

    2024-07-23 07:28:01       17 阅读
  2. 驱动开发系列04-中断处理

    2024-07-23 07:28:01       19 阅读
  3. 驱动开发系列-如何与硬件通信

    2024-07-23 07:28:01       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 07:28:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 07:28:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 07:28:01       45 阅读
  4. Python语言-面向对象

    2024-07-23 07:28:01       55 阅读

热门阅读

  1. C++链表

    C++链表

    2024-07-23 07:28:01      14 阅读
  2. “微软蓝屏”事件暴露的网络安全问题

    2024-07-23 07:28:01       18 阅读
  3. 【SpringBoot】第3章 系统配置之日志配置

    2024-07-23 07:28:01       15 阅读
  4. Hopfield 网络简介

    2024-07-23 07:28:01       21 阅读
  5. 为什么要学习网安技术?

    2024-07-23 07:28:01       12 阅读
  6. R语言读取txt和csv只有1列时

    2024-07-23 07:28:01       17 阅读
  7. 2024 7.15~7.21 周报

    2024-07-23 07:28:01       15 阅读
  8. 力扣 102题 二叉树的层次遍历 记录

    2024-07-23 07:28:01       15 阅读
  9. 【通俗理解】对数边缘似然:公式与应用

    2024-07-23 07:28:01       15 阅读
  10. mariadb安装centos再次踩坑

    2024-07-23 07:28:01       15 阅读
  11. PostgreSQL 8.4 ROW_NUMBER()函数

    2024-07-23 07:28:01       14 阅读
  12. 通过队列名寻找某队列-linux

    2024-07-23 07:28:01       9 阅读
  13. springboot业务逻辑写在controller层吗

    2024-07-23 07:28:01       14 阅读