随笔分类 -  内存管理

内存管理-33-GFP内存分配标志
摘要:基于msm-5.4 一、GFP分配标志 注: 这些标志为1表示功能是启用的。 1. 最初的纯整数 GFP 位掩码(不要直接使用) //include/linux/gfp.h #define ___GFP_DMA 0x01u #define ___GFP_HIGHMEM 0x02u #define _ 阅读全文

posted @ 2024-09-02 18:31 Hello-World3 阅读(697) 评论(0) 推荐(0)

内存管理-31-系统内存统计-4-/proc/vmstat
摘要:基于msm-5.4 一、打印内容 1. 打印格式 # cat /proc/vmstat /* 1. 打印全局数组 vm_zone_stat[] 的值,enum zone_stat_item 描述各条目 */ nr_free_pages 617775 nr_zone_inactive_anon 165 阅读全文

posted @ 2024-08-31 11:43 Hello-World3 阅读(440) 评论(0) 推荐(0)

内存管理-31-系统内存统计-3-/proc/zoneinfo
摘要:基于msm-5.4 一、概述 /proc/zoneinfo 节点包含当前系统所有内存管理区的信息。 1. 打印内容 # cat /proc/zoneinfo Node 0, zone Normal //Normal内存区, 打印函数 zoneinfo_show_print() /* 第(1)部分,打 阅读全文

posted @ 2024-08-27 21:32 Hello-World3 阅读(541) 评论(0) 推荐(0)

内存管理-31-系统内存统计-2-/proc/buddyinfo 和 /proc/pagetypeinfo
摘要:基于 msm-5.4 一、概述 1. 简介 /proc/buddyinfo 节点包含当前伙伴系统的简要信息,而 /proc/pagetypeinfo 则包含了当前伙伴系统详细信息,包括每个迁移类型和每个链表的成员数量等。 迁移类型最小的单位是页块,在Arm64架构中,页块的默认大小是4M. 但需注意 阅读全文

posted @ 2024-08-27 21:29 Hello-World3 阅读(684) 评论(0) 推荐(0)

内存管理-31-内存统计-1-初探
摘要:基于msm-5.4 一、概述 Linux内核为了帮助大家从宏观上把握系统内存的使用情况,在几大核心数据结构上都有相应的统计计数,如物理页面使用情况、伙伴系统分配情况、内存管理区的物理页面使用情况等。 1. vm_stat 计数值 内存管理模块定义了三个全局的 vm_stat 计数值 //includ 阅读全文

posted @ 2024-08-27 21:15 Hello-World3 阅读(141) 评论(0) 推荐(0)

内存管理-31-每进程内存统计-3-/proc/pid/maps‌
摘要:基于msm-5.4 一、初探 此文件描述了进程使用的每个内存段的信息,但是并不是所有的段,也不是一个段的所有部分都加载到内存中了,除非使用了对应的页面。 1. 打印格式 # cat /proc/593/maps 5e0cb16000-5e0cc1a000 r--p 00000000 fc:03 10 阅读全文

posted @ 2024-08-26 21:55 Hello-World3 阅读(64) 评论(0) 推荐(0)

内存管理-31-每进程内存统计-2-/proc/pid/statm
摘要:基于msm-5.4 一、初探 1. 打印格式 # cat /proc/593/statm //非内核线程 2826695 22403 17848 1420 0 12717 0 //以 PAGE_SIZE 为单位 # cat /proc/187/statm //内核线程 0 0 0 0 0 0 0 打 阅读全文

posted @ 2024-08-26 21:53 Hello-World3 阅读(182) 评论(0) 推荐(0)

内存管理-30-系统内存占用
摘要:基于msm-5.4 一、前言 1. 相关名词介绍 RSS(Resident Set Size)‌:这是进程当前在物理内存中占用的空间,包括进程本身和所有链接库。RSS是评估进程内存占用的一个重要指标,它直接反映了进程当前实际使用的物理内存量‌。但由于包含了共享库,用处不大。 ‌PSS(Proport 阅读全文

posted @ 2024-08-26 21:45 Hello-World3 阅读(107) 评论(0) 推荐(0)

内存管理-22-KASLR
摘要:基于msm-5.4 一、简介 1. 什么是KASLR KASLR是 kernel address space layout randomization 的缩写,直译过来就是内核地址空间布局随机化。KASLR技术允许将kernel image映射到 vmalloc 区域的任何位置(待确认哦)。 2. 阅读全文

posted @ 2024-07-24 14:41 Hello-World3 阅读(509) 评论(0) 推荐(0)

内存管理-21-Arm64架构内存管理-1-初探
摘要:基于ARMv8/ARMv9 一、内存管理单元 1. TLBI 指令使tlb无效 TLBI <type> <level>{IS} {, <Xt>} TLBI WAE1, X0 使与寄存器X0中指定的地址关联的条目无效 2. 每个异常级别,即EL3、EL2 或 EL1, 都有自己的虚拟地址空间。 3. 阅读全文

posted @ 2024-07-23 13:59 Hello-World3 阅读(383) 评论(0) 推荐(0)

内存管理-19-vmlinux.lds.S分析
摘要:基于msm-5.4 一、简介 链接器主要任务是将符号引用解析到符号定义上,将多个目标文件(.o)和库文件合并成为一个可执行文件或者动态链接库,生成符号表,并对程序代码做最后的检查和优化。这个链接脚本在Linux内核里就是 vmlinux.lds.S 文件。 vmlinux.lds.S 编译后会在 o 阅读全文

posted @ 2024-07-15 20:45 Hello-World3 阅读(532) 评论(0) 推荐(0)

内存管理-18-sparsemem内存模型-初探
摘要:一、简介 Linux中的物理内存被按页框划分,每个页框都会对应一个 struct page 结构体存放元数据,也就是说每块页框大小的内存都要花费 sizeof(struct page) 个字节进行管理。 因此系统会有大量的 struct page,在linux的历史上出现过三种内存模型去管理它们。依 阅读全文

posted @ 2024-07-12 22:47 Hello-World3 阅读(758) 评论(0) 推荐(0)

内存管理-17-Arm64汇编
摘要:一、指令 1. lsr LSR是ARM架构的位移动指令,用于逻辑右移操作。它将第一个操作数的位向右移动指定位数,并根据需要将符号位(在有符号数操作中)扩展到空出来的位。 语法: LSR{条件}{S} 移位量,寄存器 条件是可选的,指定为如 EQ、NE 等,用来指明只有在特定条件下才能执行指令。S 是 阅读全文

posted @ 2024-07-10 09:21 Hello-World3 阅读(2725) 评论(0) 推荐(0)

内存管理-16-kmalloc机制实现-初探
摘要:一、概述 slab的接口比较麻烦,kmalloc接口使用简便,其底层是基于slab缓存机制实现的,主要也是从slab缓存中拿内存对象。 //include/linux/slab.h static __always_inline void *kmalloc(size_t size, gfp_t fla 阅读全文

posted @ 2024-07-06 10:26 Hello-World3 阅读(142) 评论(0) 推荐(0)

内存管理-15-slab、slob和slub分配器-初探
摘要:一、slab简介 1. 简介 首先,“slab”已成为一个通用名称,指的是使用对象缓存的内存分配策略,可实现内核对象的高效分配和释放。它最初由 Sun 工程师 Jeff Bonwick 记录下来,并在 Solaris 2.4 内核中实现。 Linux 目前为其“slab”分配器提供了三种选择: Sl 阅读全文

posted @ 2024-07-06 10:20 Hello-World3 阅读(1501) 评论(0) 推荐(1)

内存管理-14-内核文档翻译-1-reserved-memory.txt
摘要:本文翻译自:msm-5.4/arch/arm64/boot/dts/vendor/bindings/reserved-memory/reserved-memory.txt *** Reserved内存区域 *** 保留内存被指定为 /reserved-memory 节点下的一个节点。操作系统应将保留 阅读全文

posted @ 2024-07-04 18:22 Hello-World3 阅读(369) 评论(0) 推荐(0)

内存管理-7-memblock子系统-1-初探
摘要:基于msm-5.4 一、memblock简介 现实的物理内存是被截的一段一段的了,并不是一马平川的。伙伴系统要进行初始化,就需要知道哪些区域是可用的,哪些区域已经被占用了、被保留了,剩余的才可以用于伙伴系统的初始化。因此需要一个早期的内存管理机制,即 memblock 机制. 全局变量: struc 阅读全文

posted @ 2024-07-03 10:20 Hello-World3 阅读(413) 评论(0) 推荐(0)

内存管理-13-CMA内存-1-初探
摘要:基于msm-5.4 关键词 cma_alloc/cma_release MIGRATE_ISOLATE MIGRATE_CMA 一、概述 1. CMA简介 CMA(Contiguous Memory Alloctor)主要用于分配大块连续的物理内存。伙伴系统能分配的最大连续物理内存块是2^10,即一 阅读全文

posted @ 2024-07-02 21:00 Hello-World3 阅读(944) 评论(0) 推荐(0)

内存管理-11-buddy伙伴子系统-2-Per-CPU页帧缓存
摘要:基于msm-5.4 一、概述 1. 实现背景 buddy子系统管理的物理页面,绝大多数都是放在 zone::free_area[] 中的链表中,少部分放在 zone::lowmem_reserve[] 中。还有少量页面放在zone::__percpu pageset 这个每CPU变量中,每种迁移类型 阅读全文

posted @ 2024-07-02 14:43 Hello-World3 阅读(122) 评论(0) 推荐(0)

内存管理-11-buddy伙伴子系统-1-初探
摘要:基于msm-5.4 一、伙伴系统概述 1. 简介 伙伴系统是物理内存的三大管理机制之一,另外两个是slab缓存和per-cpu页帧缓存。##### 管理物理内存实际上就是管理 page 结构,将page添加到不同链表上进行管理。当用户申请内存的时候,从链表上拿一个page返还给用户,然后用户根据pa 阅读全文

posted @ 2024-07-02 14:40 Hello-World3 阅读(210) 评论(0) 推荐(0)

导航