07 2024 档案

内存管理-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 阅读(108) 评论(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 阅读(113) 评论(0) 推荐(0) 编辑

bw_mem 和 lmbench
摘要:一、bwmem 名称 bw_mem - 时间内存带宽 概要 bw_mem_cp [ -P <并行度> ] [ -W <热身次数> ] [ -N <重复次数> ] 大小 rd|wr|rdwr|cp|fwr|frd|bzero|bcopy [对齐] 描述 bw_mem 分配两倍指定内存量,将其归零,然后 阅读全文

posted @ 2024-07-16 20:22 Hello-World3 阅读(644) 评论(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 阅读(187) 评论(0) 推荐(0) 编辑

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

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

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

posted @ 2024-07-10 09:21 Hello-World3 阅读(815) 评论(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 阅读(58) 评论(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 阅读(460) 评论(0) 推荐(0) 编辑

内存管理-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 阅读(119) 评论(0) 推荐(0) 编辑

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

posted @ 2024-07-03 10:20 Hello-World3 阅读(134) 评论(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 阅读(285) 评论(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 阅读(49) 评论(0) 推荐(0) 编辑

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

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

内存管理-0-开篇
摘要:一、什么是内存管理 1. 基础内存管理可以大致分为5块 (1) 物理内存管理 node、zone、page、buddy-system、slab (2) 虚拟内存管理 虚拟内存分用户空间和内核空间,用户空间又分为很多段(代码段、数据段、栈、堆、mmap映射区、动态共享库等等); 内核空间也是分为很多区 阅读全文

posted @ 2024-07-01 16:24 Hello-World3 阅读(24) 评论(0) 推荐(0) 编辑

导航