内存管理
文章平均质量分 91
Hacker_Albert
If I am not for myself, who will be for me?
If I am only for myself, what am I?
If not now, when?
展开
-
linux 内存管理(17) - 理解堆栈
理解堆栈1.概念 一个由C/C++编译的程序占用的内存分为以下几个部分栈区:由编译器自动分配释放,存放函数的参数值,局部变量的值等。堆区:由程序员分配和释放,若程序员不释放,程序结束时可能由OS回收。全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量、未初始化的静态变量在相邻的另一块区域。文字常量区...原创 2020-03-30 22:20:43 · 2653 阅读 · 0 评论 -
linux内存管理(16) - volatility
1.Linux Memory Extractor A Loadable Kernel Module (LKM) which allows for volatile memory acquisition from Linux and Linux-based devices, such as Android. This makes LiME unique as it is the first...原创 2020-03-15 20:05:18 · 709 阅读 · 0 评论 -
linux 内存管理(15) - mmap
了解mmap机制。1.概述 mmap 即地址的映射, 是一种内存映射文件的方法,将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。 Linu...原创 2020-03-11 17:47:10 · 651 阅读 · 0 评论 -
linux 内存管理(14) - paging_init
了解paging_init1.paging_init Linux物理内存初始化中,可知在paging_init调用之前,存放Kernel Image和DTB的两段物理内存区域可以访问了(相应的页表已经建立好)。尽管物理内存已经通过memblock_add添加进系统,但是这部分的物理内存到虚拟内存的映射还没有建立,可以通过memblock_alloc分配一段物理内存,但是还不能访问,一切还...原创 2020-03-05 22:28:43 · 442 阅读 · 0 评论 -
linux 内存管理 -- 调试方法
了解内存调试方法。1.free free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。默认情况下,即在没有选项的情况下,"free"命令显示内存的使用信息。默认按照k(b)的计数单位统计。total:表示 总计物理内存的大小。used:表示 已使用多少。free:表示 可用内存多少。Shared:表示多个进程共享的内存总额。Buffers...原创 2020-03-03 15:52:49 · 553 阅读 · 0 评论 -
linux 内存管理(13) - memblock
了解memblock机制。1.概述 在引导内核的过程中,需要使用内存, 而这个时候内核的内存管理并没有被创建, 因此也就需要一种精简的内存管理系统先接受这个工作, 而在初始化完成后, 再将旧的接口废弃, 转而使用强大的buddy系统来进行内存管理. 早期的Linux内核在引导阶段都是通过bootmem来完成初期的内存管理的, 但是后来的版本开始把bootmem弃用了,使用memblo...原创 2020-03-02 22:09:26 · 1449 阅读 · 1 评论 -
linux 内存管理(12) - 物理内存初始化
-了解linux物理内存初始化1.系统是怎么知道物理内存的? memory节点,以arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi为例: memory@80000000 { device_type = "memory"; reg = <0x00000000 0x80000000 0 0x80000000...原创 2020-03-01 19:58:19 · 1063 阅读 · 0 评论 -
linux 内存管理(11) - TLB flush
了解 TLB flush1.TLB flush API1.1.void flush_tlb_all(void); 这个接口用来invalidate TLB cache中的所有的条目,执行完毕了该接口之后,由于TLB cache中没有缓存任何的VA到PA的转换信息,因此,调用该接口API之前的所有的对page table的修改都可以被CPU感知到。注:该接口是大杀器,不要随便使用。 ...原创 2020-02-27 21:51:44 · 1416 阅读 · 0 评论 -
linux 内存管理(10)- phys_to_virt/virt_to_phys
了解phys_to_virt/virt_to_phys1.概述 对于提供了MMU的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。进程的4GB内存空间被人为的分为两个部分:用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间。 内核空间中,从3G到vmalloc_...原创 2020-02-26 20:48:20 · 10592 阅读 · 0 评论 -
linux 内存管理(9) -页表实现
了解linux 页表实现1.ARM32处理器查询页表 32bit的Linux采用三级映射:PGD–>PMD–>PTE,64bit的Linux采用四级映射:PGD–>PUD–>PMD–>PTE,多了个PUD。缩写:PGD:Page Global Directory、PUD:Page Upper Directory、PMD:Page Middle Dire...原创 2020-02-23 20:08:57 · 1649 阅读 · 1 评论 -
linux 内存管理(8) —内存描述符(mm_struct)
了解进程内存描述符mm_struct1.概述 每个进程都只有一个mm_struct结构,该结构是对整个用户空间的描述。一个进程的虚拟地址空间主要由两个数据结来描述。最高层次的:mm_struct,描述一个进程的整个虚拟地址空间。较高层次的:vm_area_structs,描述虚拟地址空间的一个区间(简称虚拟区)。内存管理大致结构:2.mm_struct 结构体 task...原创 2020-02-23 11:05:17 · 4265 阅读 · 1 评论 -
Linux内存管理(7) - page fault
了解linux page fault.1.概述 A page fault (sometimes called #PF, PF or hard fault)[a] is a type of exception raised by computer hardware when a running program accesses a memory page that is not curre...原创 2020-02-16 18:38:10 · 1655 阅读 · 0 评论 -
linux 内存管理(6) - 页面迁移
了解页面迁移1.概述 A longtime aspect of the kernel’s memory-management subsystem is that it tends to fragment memory over time. After a system has been running for a while, finding groups of physically c...原创 2020-02-16 18:38:59 · 523 阅读 · 0 评论 -
Linux内存管理(1) -- UMA和NUMA
了解UMA和NUMA 两种架构模型目录1.模型起源2.UMA模型,NUMA模型2.1.UMA模型2.2.NUMA模型1.模型起源 若干年前,x86计算机内存控制器还没有整合进CPU,所有内存的访问都需要通过北桥芯片来完成。此时的内存访问如下图所示,被称为UMA(uniform memory access, 一致性内存访问 )。这样的访问对于软件层面来说非常容易实现:总线模型保证了所有的...原创 2019-09-01 18:42:29 · 2349 阅读 · 0 评论 -
Linux 内存管理(5) - Kmalloc
了解kmalloc 实现机制1.Memory allocation Memory allocation in Linux kernel is different from the user space counterpart. The following facts are noteworthy,Kernel memory is not pageable.Kernel memory...原创 2019-12-15 17:43:05 · 867 阅读 · 0 评论 -
Linux 内存管理(4) - Slab system
了解slab system.1.Slab 基本原理 Linux内核中基于伙伴算法实现的分配器适合大块内存的请求,它所分配的内存区是以页框为基本单位的。对于内核中小块连续内存的请求,比如说几个字节或者几百个字节,如果依然分配一个页框来来满足该请求,那么这很明显就是一种浪费,即产生内部碎片(internal fragmentation)。 为了解决小块内存的分配,Linux内核基于Sol...原创 2019-12-15 21:56:16 · 322 阅读 · 0 评论 -
Linux 内存管理(3) - Buddy system
了解linux buddy system1.描述 在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担。Linux内核使用伙伴算法来管理和分配物理内存页面,该算法由Knowlton设计,后来Knuth又进行了更深刻的描述。 伙伴系统是一个结合2的方幂个分配器和空闲缓冲区合并技术的内存分配方案, 内存被分成含有很多页面的大块, 每一块都是2个页面大小的方幂. 如果找不到想要的块,...原创 2019-09-07 21:38:32 · 572 阅读 · 0 评论 -
linux 内存管理(2) - Node/Zone/Page
1.Linux描述物理内存 Linux把物理内存划分三个层次:NodeTo extend support for NUMA machines, kernel views each non uniform memory partition(local memory) as a node.CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个...原创 2019-09-07 18:00:56 · 1447 阅读 · 1 评论