内存管理(三)
Liunux内核内存管理之虚拟地址空间
虚拟内存虚拟内存就是在你电脑的物理内存不够用时把一部分硬盘空间作为内存来使用,这部分硬盘空间就叫作虚拟内存。硬盘传输的速度要比内存传输速度慢得多,所以虚拟内存比物理内存的效率要慢得多。断电后数据丢失。虚拟地址空间虚拟地址空间是一个非常抽象的概念,先根据字面意思进行解释:它可以用来加载程序数据(数据可能被加载到物理内存上,空间不够就加载到虚拟内存中)它对应着一段连续的内存地址,起始位置为 0。之所以
日期 2023-06-12 10:48:40go内存管理详解
堆内存1.golang堆内存分配采用和tcmalloc内存分配器类似的算法2.堆内存划分为一个个arena空间,arena的初始地址记录在arenaBaseOffset中,在amd64架构的linux中,其值默认为64M,每个arena中有8192个page,每个page有8KB。3.golang将内存默认分为68种大小规格,最小为8B,最大为32KB,大于32的独立分给一种类型(0),同一种规格
日期 2023-06-12 10:48:40存储类别、链接和内存管理(一)--面试中你遇到过static关键字吗?
halo大家好~今天我们来分享一下在有关C语言面试中我们最常被面试官问到的static关键字到底有什么用?相信学完本期内容你就会回答了~ 一、存储类别 首先我们来了解下存储类别。 从硬件方面看,每个变量存储的值都占用一定的物理内存空间,C语言中把这样一块内存称为对象。 从软件方面看,程序需要访问对象,可以通过声明变量来完成: int entity = 3;
日期 2023-06-12 10:48:40五万字 | 深入理解Linux内存管理
作者简介: 程磊,一线码农,在某手机公司担任系统开发工程师,日常喜欢研究内核基本原理。1.1 内存管理的意义1.2 原始内存管理1.3 分段内存管理1.4 分页内存管理1.5 内存管理的目标1.6 Linux内存管理体系2.1 物理内存节点2.2 物理内存区域2.3 物理内存页面2.4 物理内存模型2.5 三级区划关系3.1 Buddy System3.1.1 伙伴系统的内存来源3.1.2 伙伴系
日期 2023-06-12 10:48:40oracle自动共享内存管理(ASMM) .
大家好,又见面了,我是你们的朋友全栈君。一篇关于ASSM的好文章:http://blog.csdn.net/liyongjie/article/details/7443825oracle自动共享内存管理(ASMM) 从Oracle 10g开始,Oracle提供了自动SGA的管理(简称ASMM,即Automatic Shared Memory Management)新特性。所谓ASMM,就是指
日期 2023-06-12 10:48:40内存管理专栏 | 之内存管理架构
一、内存管理架构二、虚拟地址空间布局架构三、物理内存体系架构四、内存结构五、内存模型六、虚拟地址和物理地址的转换七、内存映射原理分析一、内存管理架构内存管理子系统架构可以分为:用户空间、内核空间及硬件部分3个层面,具体结构如下所示:1、用户空间:应用程序使用malloc()申请内存资源/free()释放内存资源。2、内核空间:内核总是驻留在内存中,是操作系统的一部分。内核空间为内核保留,不允许应用
日期 2023-06-12 10:48:40linux内存管理之 ION 内存管理器浅析Ⅱ(system contig heap)
大家好,又见面了,我是你们的朋友全栈君。目录1 system contig heap 与 system heap2 system contig heap创建3 system contig heap内存分配4 system contig heap内存释放1 system contig heap 与 system heap从代码中我们看到system contig heap与system heap同属
日期 2023-06-12 10:48:40AntDB内存管理之内存上下文
1.主题说明AntDB的内存管理在开发时,使用了内存上下文机制来实现内存管理。本文就从AntDB的内存上下文机制出发,解析内存上下文的实现原理。AntDB的代码中,涉及到内存的处理时,经常会看到下面这样的代码。图1:切换内存上下文示例以及图2所示的代码。图2:在内存上下文中申请内存这与平常开发C/C++程序的内存操作方式不太一样,多多少少会让人产生一些疑惑:内存操作前后的MemoryContext
日期 2023-06-12 10:48:40Linux内存管理神器:smem工具
今天给大家分享一款 Linux 系统里的内存管理神器:smem 。smem 是Linux系统上的一款可以生成多种内存耗用报告的命令行工具。与现有工具不一样的是 smem 可以报告 PSS【Proportional Set Size(按比例占用大小)】,这是一种更有意义的指标。可以衡量虚拟内存系统的库和应用程序所占用的内存数量。由于大部分的物理内存通常在多个应用程序之间共享,名为驻留集大小(RSS)
日期 2023-06-12 10:48:40Java内存管理-JVM内存模型以及JDK7和JDK8内存模型对比总结(三)
今天介绍一下JVM内部的一些区域,以及具体的区域在运行过程中会发生哪些异内存常! 其实也就对应了内存管理的第一篇中 JVM的第三个阶段,程序运行内存溢出。一、概述Java的内存管理采用[自动内存管理]机制,因为这个自动管理机制,Java程序员就不需要去写释放内存的代码,而且不容易出现内存泄漏问题(比C/C++程序员少一些烦恼)。但是由于内存的申请和释放都交给了Java虚拟机,一旦出现内存泄漏和溢出
日期 2023-06-12 10:48:40万字整理内存管理之Cache
为什么需要cache多级cache存储结构多级cache之间的配合工作直接映射缓存(Direct mapped cache)直接映射缓存的优缺点两路组相连缓存(Two-way set associative cache)两路组相连缓存优缺点全相连缓存(Full associative cache)Cache分配策略(Cache allocation policy)Cache更新策略(Cache u
日期 2023-06-12 10:48:40一文学会JVM垃圾回收器详解:串行回收,新生代内存管理内存分配
新生代内存管理新生代内存管理包含了内存的分配和回收,这与新生代内存布局密切相关。新生代被划分为3个空间:Eden、From和To空间。这3个空间的作用如下:1)Eden:仅用于应用程序对象分配;GC工作线程不会在该空间进行对象分配。2)From:用于GC工作线程在执行垃圾回收时,在前一轮垃圾回收后活跃对象的存储。在特殊情况下,From空间也可以用于应用程序对象的分配(这是JVM在实现对象分配时的一
日期 2023-06-12 10:48:40【JavaScript】垃圾回收与内存管理(内存优化)
由于JavaScript借鉴了Java的内存管理方案,因而JavaScript与Java的垃圾回收策略是一样的。1. 垃圾回收原理Java和JavaScript都是是使用垃圾回收的语言,也就是说执行环境负责在代码执行时管理内存,通过自动内存分配管理实现内存分配和闲置资源回收。基本思路很简单:确定哪个变量不再使用,然后释放它占用的内存。这个过程是周期性的,即垃圾回收程序每个一段时间(或者说在代码执行
日期 2023-06-12 10:48:40【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )
文章目录一、RCU 机制二、RCU 机制的优势与弊端三、RCU 机制的链表应用场景一、RCU 机制RCU , 英文全称是 " Read-Copy-Update “ , 对应的中文名称是 ” 读取-拷贝-更新 “ , 这是 Linux 内核中的 ” 同步机制 " ;Linux 内核中还有其它同步机制 , 如 " 原子操作 " , " 读写信号量 &q
日期 2023-06-12 10:48:40【Linux 内核 内存管理】RCU 机制 ③ ( RCU 模式下添加链表项 list_add_rcu 函数 | RCU 模式下删除链表项 list_del_rcu 函数 )
文章目录一、RCU 模式下添加链表项 list_add_rcu 函数二、RCU 模式下删除链表项 list_del_rcu 函数一、RCU 模式下添加链表项 list_add_rcu 函数在 Linux 源码 linux-5.6.18\include\linux\rculist.h 头文件中定义的就是 RCU 链表的操作 ,其中定义的static inline void list_add_rcu(
日期 2023-06-12 10:48:40【Linux 内核 内存管理】RCU 机制 ⑤ ( RCU 层次架构概念 | RCU 层次架构源码解析 | RCU 层次架构每层最多叶子数 | RCU 层次架构每个叶子 CPU 数量 )
文章目录一、RCU 层次架构概念及源码二、RCU 层次架构源码解析1、RCU 层次架构每层最多叶子数2、RCU 层次架构每个叶子 CPU 数量一、RCU 层次架构概念及源码RCU 机制 中 , 会 根据 CPU 数量 , 按照 " 树形结构 “ 组成 RCU 层次架构 , 称为 ” RCU Hierarchy " ;在 Linux 源码 linux-5.6.18\include
日期 2023-06-12 10:48:40【Linux 内核 内存管理】Linux 内核内存布局 ④ ( ARM64 架构体系内存分布 | 内核启动源码 start_kernel | 内存初始化 mm_init | mem_init )
文章目录一、ARM64 架构体系内存分布二、Linux 内核启动源码 start_kernel三、内存初始化源码 mm_init四、内存初始化源码 mem_init一、ARM64 架构体系内存分布ARM64 架构 的 " 物理地址 " 有 48 位 , 理论上最大 " 寻址空间 " 为 256 TB ;ARM64 架构 的 " 虚拟地址 "
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )
文章目录一、内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 )二、Linux 内核架构层次三、Linux 系统调用接口一、内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 )内存管理架构 由 3 部分组成 :① 用户空间 : 在 " 用户空间 " 中 , 使用 malloc 函数 申请 " 堆内存 " , 使用 free 函数
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)
文章目录一、用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc )二、内核空间内存管理1、内核内存管理系统调用 ( sys_brk | sys_mmap | sys_munmap )2、sys_brk、sys_mmap 系统调用一、用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcm
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存管理架构 ③ ( Linux 内核中的内存管理模块 | 页分配器 | 不连续页分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 页表缓存 | 高速缓存 )
文章目录一、Linux 内核中的内存管理模块二、硬件设备内存管理一、Linux 内核中的内存管理模块Linux 内核还需要处理如下内容 :① 页错误异常处理② 页表管理③ 引导内存分配器 : 页分配器 , 块分配器 , 不连续页分配器 , 连续内存分配器 , 每处理器内存分配器 ;" 页分配器 " 负责分配 内存物理页 , 使用的是 " 伙伴分配器 " ;&
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存管理架构 ⑤ ( sbrk 内存分配系统调用代码示例 | 在 /proc/pid/maps 中查看进程堆内存详情 )
文章目录一、sbrk 内存分配系统调用代码示例二、在 /proc/pid/maps 中查看进程堆内存详情本篇博客调用 sbrk 系统调用函数 , 申请并修改 堆内存 , 并在 /proc/pid/maps 中查看该进程的 堆内存 ;一、sbrk 内存分配系统调用代码示例sbrk 系统调用函数 , 作用是 修改程序 BSS 段大小 ;函数原型如下 :#include <unistd.h>
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存管理架构 ④ ( 内存分配系统调用过程 | 用户层 malloc free | 系统调用层 brk mmap | 内核层 kmalloc | 内存管理流程 )
文章目录一、内存分配系统调用过程 ( 用户层 | 系统调用 | 内核层 )二、内存管理流程一、内存分配系统调用过程 ( 用户层 | 系统调用 | 内核层 )" 堆内存 " 动态分配 的 系统调用 过程 :① 用户应用程序调用 : 开发者 在 " 用户空间 “ 的 应用程序 中调用 malloc 等函数 , 申请 动态分配 ” 堆内存 " ,② 系统调用 :
日期 2023-06-12 10:48:40【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb)
文章目录一、vm_area_struct 结构体成员分析二、vm_area_struct 结构体完整源码一、vm_area_struct 结构体成员分析vm_area_struct 结构体中相关成员解析 :unsigned long vm_start 成员 : 虚拟内存空间 起始地址 ; unsigned long vm_start; /* Our start address within vm
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存映射相关数据结构 ① ( vm_area_struct 结构体 | task_struct、mm_struct、vm_area_struct 3 个结构体之间的关系)
文章目录一、vm_area_struct 结构体二、task_struct 进程描述符、mm_struct 内存描述符、vm_area_struct 虚拟内存区间 之间的关系一、vm_area_struct 结构体在 Linux 内核中 , 使用 vm_area_struct 结构体描述 " 进程 " 的 " 用户虚拟地址空间 " 的 地址区间 ;vm_ar
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存映射相关数据结构 ⑥ ( 文件映射 虚拟内存区域 | vm_area_struct | vm_operations_struct | 匿名映射 虚拟内存区域 )
文章目录一、文件映射 虚拟内存区域1、文件映射 虚拟内存区域 的 vm_ops 成员2、文件映射 虚拟内存区域 的 vm_file 成员3、文件映射 虚拟内存区域 图示二、匿名映射 虚拟内存区域一、文件映射 虚拟内存区域" 文件映射 " 的 " 虚拟内存区域 " vm_area_struct 结构体 的 数据结构表示形式如下 ;1、文件映射 虚拟内存区域 的
日期 2023-06-12 10:48:40【Linux 内核 内存管理】mmap 系统调用源码分析 ② ( sys_mmap_pgoff 系统调用函数执行流程 | sys_mmap_pgoff 函数源码 )
文章目录一、sys_mmap_pgoff 系统调用函数执行流程二、sys_mmap_pgoff 系统调用函数源码调用 mmap 系统调用 , 先检查 " 偏移 " 是否是 " 内存页大小 " 的 " 整数倍 " , 如果偏移是内存页大小的整数倍 , 则调用 sys_mmap_pgoff 函数 , 继续向下执行 ;一、sys_mmap_pg
日期 2023-06-12 10:48:40【Linux 内核 内存管理】mmap 系统调用源码分析 ④ ( do_mmap 函数执行流程 | do_mmap 函数源码 )
文章目录一、do_mmap 函数执行流程二、do_mmap 函数源码调用 mmap 系统调用 , 先检查 " 偏移 " 是否是 " 内存页大小 " 的 " 整数倍 " , 如果偏移是内存页大小的整数倍 , 则调用 sys_mmap_pgoff 函数 , 继续向下执行 ;在 sys_mmap_pgoff 系统调用函数 中 , 最后调用了 v
日期 2023-06-12 10:48:40【Linux 内核 内存管理】munmap 系统调用源码分析 ② ( do_munmap 函数执行流程 | do_munmap 函数源码 )
文章目录一、do_munmap 函数执行流程二、do_munmap 函数源码munmap 系统调用函数 调用了 vm_munmap 函数 , 在 vm_munmap 函数 中 , 又调用了 do_munmap 函数 , do_munmap 函数 是 删除 内存映射 的 核心函数 ;一、do_munmap 函数执行流程do_munmap 函数执行流程 :根据 unsigned long start
日期 2023-06-12 10:48:40【Linux 内核 内存管理】物理内存组织结构 ④ ( 内存区域 zone 简介 | zone 结构体源码分析 | zone 结构体源码 )
文章目录一、内存区域 zone 简介二、zone 结构体源码分析1、watermark 成员2、lowmem_reserve 成员3、zone_pgdat 成员4、pageset 成员5、zone_start_pfn 成员6、managed_pages、spanned_pages、present_pages成员7、name 成员8、free_area 成员三、zone 结构体源码内存管理系统 3级
日期 2023-06-12 10:48:40【Linux 内核 内存管理】memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )
文章目录一、memblock_region 内存块区域二、memblock_region 结构体成员分析1、base 成员2、size 成员3、flags 成员4、nid 成员三、memblock 分配器标志枚举1、MEMBLOCK_NONE2、MEMBLOCK_HOTPLUG3、MEMBLOCK_MIRROR4、MEMBLOCK_NOMAP一、memblock_region 内存块区域membl
日期 2023-06-12 10:48:40【Linux 内核 内存管理】memblock 分配器 ⑤ ( Linux 内核中定义 memblock 分配器的位置 | ARM64体系架构下 Linux内核初始化 memblock 分配器流程 )
文章目录一、Linux 内核中定义 memblock 分配器的位置二、ARM64 体系架构下 Linux 内核初始化 memblock 分配器流程三、arm64_memblock_init 函数完整源码一、Linux 内核中定义 memblock 分配器的位置Linux 内核 定义 memblock 分配器 位置 :Linux 内核源码 linux-4.12\mm\memblock.c#34 位置
日期 2023-06-12 10:48:40