![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
内存管理
文章平均质量分 79
oqqYuJi12345678
这个作者很懒,什么都没留下…
展开
-
Linux内存管理之vmap与vmalloc
1. 概述在之前的系列文章中,分析到了Buddy System的页框分配,Slub分配器的小块内存对象分配,这些分配的地址都是物理内存连续的。当内存碎片后,连续物理内存的分配就会变得困难,可以使用vmap机制,将不连续的物理内存页框映射到连续的虚拟地址空间中。vmalloc的分配就是基于这个机制来实现的。还记得下边这张图吗?vmap/vmalloc的区域就是在VMALLOC_START ~ VMALLOC_END之间。开启探索之旅吧。2. 数据结构2.1 vmap_area.转载 2022-02-05 14:13:33 · 454 阅读 · 0 评论 -
struct vmap_area和struct vm_area_struct
在Linux中,struct vm_area_struct表示的虚拟地址是给进程使用的,而struct vmap_area表示的虚拟地址是给内核使用的,它们对应的物理页面都可以是不连续的。在32位系统中,struct vm_area_struct表示的地址空间范围是0~3G,而struct vmap_area表示的地址空间范围是(3G + 896M + 8M) ~ 4G。struct vm_struct表示的地址空间范围为什么不是3G~4G呢?原来,3G ~ (3G + 896M)范围的地址是用来映射连续的原创 2022-02-05 13:54:29 · 1228 阅读 · 0 评论 -
linux内存管理笔记(十一)---CMA
在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,对于内核如果申请一块连续的内存空间该怎么处理呢?首先向到的是利用内核提供的kmalloc申请,尽管kmalloc可以申请连续的内存空间,但是在长时间的测试中,会出现内存空间可能申请失败的情况,无法保证能成功分配。使用memblock分配器中提供的方法,称为预留内存,但这么预留的内存只能被特定的Device驱动所使用,System不能分配这部分内容,会导致内存浪费因此,内核设计者设..转载 2021-12-23 22:54:44 · 1200 阅读 · 0 评论 -
kmemleak的介绍
内核泄露检测(kmemleak)1 介绍:Kmemleak 提供了一种可选的内核泄漏检测,其方法类似于跟踪内存收集器。(http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29#Tracing_garbage_collectors)当独立的对象没有被释放时,其报告记录在 /sys/kernel/debug/kmemleak中。2 用法:CONFIG_DEBUG_KMEMLEAK 在Kernel hacking中被使能转载 2021-10-10 21:40:59 · 602 阅读 · 0 评论 -
linux3.10 内存管理(二)伙伴系统内存管理详解
一:伙伴系统的初始化函数系统初始化的时候,会进行如下的调用关系来初始化伙伴管理系统:start_kernel ---------->mm_init ----------->mem_init在mem_init函数中,会把之前使用的bootmem 里面管理的空闲内存释放到伙伴系统中,初始化完伙伴系统以后,内存管理就由伙伴系统来接管。voi...原创 2019-07-28 23:03:25 · 793 阅读 · 0 评论 -
linux3.10 内存管理(四)slab机制详解1 初始化上
在讲初始化之前,先看一下slab机制中用到的主要结构体:struct kmem_cache {/* 1) Cache tunables. Protected by cache_chain_mutex */ unsigned int batchcount; 从slab放入cpu array的object个数 unsigned int limit; unsigned int sha...原创 2019-07-30 23:18:24 · 698 阅读 · 0 评论 -
linux3.10 vmalloc的工作机制
介绍一下vmalloc的整个分配过程:vmalloc -------->__vmalloc_node_flags --------->__vmalloc_node ------------>__vmalloc_node_range先看一下__vmalloc_node:static void *__vma...原创 2019-08-01 22:57:25 · 501 阅读 · 0 评论 -
linux的copy_from_user与copy_to_user详细分析
这两个函数在内核使用的非常频繁,负责将数据从用户空间拷贝到内核空间以及将数据从内核空间拷贝到用户空间。arm架构下,copy_from_user相关的文件主要有arch/arm/include/asm/uaccess.h arch/arm/lib/copy_from_user.S arch/arm/lib/copy_template.S下面先来看copy_from_user,它的...转载 2019-12-16 19:29:59 · 977 阅读 · 0 评论 -
linux3.10 paging_init页表初始化详解
arm架构的32位linux系统上面,使用到了两种形式的页表映射,段映射和分页映射。系统早期的页表映射都采用静态映射的方式,即对于要映射的某块物理内存,指定其映射的虚拟地址。在uboot 刚跳转到linux时候,先采用了段映射的方式,在arch/arm/kernel/head.S中可以看到源码://页表目录的物理地址起始地址放在代码段向下偏移页目录大小PG_DIR_SIZE的位置.ma...原创 2019-07-20 00:00:03 · 928 阅读 · 0 评论