内存管理:一文读懂linux内存组织结构及页面布局

author author     2023-04-16     665

关键词:

参考技术A

1、内存是什么?

1) 内存又称主存,是 CPU 能直接寻址的存储空间,由半导体器件制成;

2) 内存的特点是存取速率快,断电一般不保存数据,非持久化设备;

2、内存的作用

1) 暂时存放 cpu 的运算数据

2) 硬盘等外部存储器交换的数据

3) 保障 cpu 计算机的稳定性和高性能

1、linux 内存地址空间 Linux 内存管理全貌

2、内存地址——用户态&内核态

3、内存地址——MMU 地址转换

4、内存地址——分段机制

1) 段选择符

更多Linux内核视频教程文档资料免费领取后台私信【 内核 】自行获取。

内核学习网站:

Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂

2) 分段实现

5、内存地址——分页机制(32 位)

6、用户态地址空间

7、内核态地址空间

8、进程内存空间

内存管理算法 ——对讨厌自己管理内存的人来说是天赐的礼物

1、内存碎片

1) 基本原理

2) 如何避免内存碎片

2、伙伴系统算法——组织结构

1) 概念

2) 外部碎片

3、伙伴系统算法——申请和回收

1) 申请算法

2) 回收算法

3) 条件

4、如何分配 4M 以上内存?

1) 为何限制大块内存分配

2) 内核中获取 4M 以上大内存的方法

5、伙伴系统——反碎片机制

1) 不可移动页

2) 可回收页

6、slab 算法——基本原理

1) 基本概念

2) 内部碎片

7、slab 分配器的结构

详细参考:

经典|图解Linux内存性能优化核心思想

8、slab 高速缓存

1) 普通高速缓存

2) 专用高速缓存

9、内核态内存池

1) 基本原理

2) 内核 API

10、用户态内存池

1) C++ 实例

11、DMA 内存

1) 什么是 DMA

2) DMA 信号

out of memory 的时代过去了吗?no,内存再充足也不可任性使用。

1、内存的使用场景

2、用户态内存分配函数

a) 如果当前连续内存块足够 realloc 的话,只是将 p 所指向的空间扩大,并返回 p 的指针地址。这个时候 q 和 p 指向的地址是一样的

b) 如果当前连续内存块不够长度,再找一个足够长的地方,分配一块新的内存,q,并将 p 指向的内容 copy 到 q,返回 q。并将 p 所指向的内存空间删除

3、内核态内存分配函数

4、malloc 申请内存

5、缺页异常

6、用户进程访问内存分析

7、共享内存

1) 原理

2) shm 接口

1、C 内存泄露

2、C 野指针

3、C 资源访问冲突

4、STL 迭代器失效

错误示例:删除当前迭代器,迭代器会失效

正确示例:迭代器 erase 时,需保存下一个迭代器

5、C++ 11 智能指针

(1)原理分析:

(2)数据结构:

(3)使用方法:

6、C++ 11 更小更快更安全

六、 如何查看内存

可以通过 cat /proc/slabinfo 命令查看

可以通过 /proc/sys/vm/drop_caches来释放

一文读懂c++虚继承的内存模型(代码片段)

一文读懂C++虚继承的内存模型1、前言2、多继承存在的问题3、虚继承简介4、虚继承在标准库中的使用5、虚继承下派生类的内存布局解析6、总结1、前言C++虚继承的内存模型是一个经典的问题,其具体实现依赖于... 查看详情

linux内存相关问题汇总

...;有助于提升机器的性能和稳定性。本文主要介绍linux内存组织结构和页面布局,内存碎片产生原因和优化算法,linux内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。从内存的原理和结构,到内存... 查看详情

一文读懂|linux进程管理之cfs负载均衡

前面的调度学习都是默认在单个CPU上的调度策略。我们知道为了CPU之间减少“干扰”,每个CPU上都有一个任务队列。运行的过程种可能会出现有的CPU“忙的一笔”,有的CPU“闲的蛋疼”,于是便需要负载均衡。将task从负载较重... 查看详情

linux内核内存管理虚拟地址空间布局架构②(用户虚拟地址空间组成|内存描述符mm_struct结构体源码)(代码片段)

文章目录一、用户虚拟地址空间组成二、内存描述符mm_struct结构体源码一、用户虚拟地址空间组成"用户虚拟地址空间"包括以下区域:①代码段②数据段③未初始化数据段④动态库代码段,数据段,未初始化数据段;⑤堆内存:通... 查看详情

超硬核:linux系统内存知识

...;有助于提升机器的性能和稳定性。本文主要介绍Linux内存组织结构和页面布局,内存碎片产生原因和优化算法,Linux内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。从内存 查看详情

linux内核内存管理虚拟地址空间布局架构⑤(linux内核中对“虚拟地址空间“的描述|task_struct结构体源码)(代码片段)

文章目录一、Linux内核中对"虚拟地址空间"的描述二、task_struct结构体源码一、Linux内核中对"虚拟地址空间"的描述进程的"虚拟地址空间"由mm_struct和vm_area_struct两个数据结构描述;mm_struct是“最高层次"上描述”... 查看详情

java基本功一文读懂final关键字的用法

...修饰类,该类不能被继承。并且这个类的对象在堆中分配内存后地址不可变。修饰方法,方法不能被子类重写。修饰引用,引用无法改变,对于基本类型,无法修改值,对于引用,虽然不能修改地址值,但是可以对指向对象的内... 查看详情

一文读懂c++虚继承的内存模型(代码片段)

一文读懂C++虚继承的内存模型1、前言2、多继承存在的问题3、虚继承简介4、虚继承在标准库中的使用5、虚继承下派生类的内存布局解析6、总结1、前言C++虚继承的内存模型是一个经典的问题,其具体实现依赖于... 查看详情

linux内存相关问题汇总

...;有助于提升机器的性能和稳定性。本文主要介绍linux内存组织结构和页面布局,内存碎片产生原因和优化算法,linux内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。从内存的原理和结构,到内存... 查看详情

一文读懂javagc原理和调优(代码片段)

...主要如下:GC基础原理,涉及调优目标,GC事件分类、JVM内存分配策略、GC日志分析等CMS原理及调优G1原理及调优GC问题排查和解决思路GC基础原理1GC调优目标大多数情况下对Java程序进行GC调优,主要关注两个目标:响应速度、吞 查看详情

linux内核内存管理物理内存组织结构③(内存管理系统三级结构|内存节点描述|内存节点pglist_data结构体|pglist_data结构体源码)(代码片段)

文章目录一、内存节点描述二、内存节点pglist_data结构体三、pglist_data结构体源码内存管理系统333级结构:①节点Node,②区域Zone,③页Page,Linux内核中,使用上述333级结构描述和管理"物理内存";一、内存节点描述Linux内核中,内存... 查看详情

java虚拟机内存结构及编码实战

了解JVM内存结构的目的在Java的开发过程中,因为有JVM自动内存管理机制,不再需要像在C、C++开发那样手动释放对象的内存空间,不容易出现内存泄漏和内存溢出的问题。但是,正是由于把内存管理的权利交给了JVM,一旦出现内... 查看详情

内存管理

13.?内存管理 13.1.?引言 Linux对物理内存的描述机制有两种:UMA和NUMA。Linux把物理内存划分为三个层次来管理:存储节点(Node)、管理区(Zone)和页面 (Page)。UMA对应一致存储结构,它只需要一个Node就可以描述当前系统中... 查看详情

linux内核内存管理虚拟地址空间布局架构③(内存描述符mm_struct结构体成员分析|mmap|mm_rb|task_size|pgd|mm_users)(代码片段)

文章目录一、mm_struct结构体成员分析1、mmap成员2、mm_rb成员3、get_unmapped_area函数指针4、task_size成员5、pgd成员6、mm_users成员7、mm_count成员一、mm_struct结构体成员分析mm_struct结构体在Linux源码linux-4.12\\include\\linux\\mm_types.h#359位置;参... 查看详情

linux内核内存管理linux内核堆内存管理③(cpu计数器瓶颈|per-cpu计数器|linux内核percpu_counter结构体源码)(代码片段)

文章目录一、CPU计数器瓶颈二、per-CPU计数器及percpu_counter结构体源码一、CPU计数器瓶颈如果操作系统中有多个CPU,假设只有一个CPU计数器工作,如果某个CPU正在访问计数器,其它CPU需要等待计数器释放,才能访问CPU计数器,这里CPU计数... 查看详情

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结构体源码内存管理... 查看详情

深入理解linux内存子系统(代码片段)

...;有助于提升机器的性能和稳定性。本文主要介绍linux内存组织结构和页面布局,内存碎片产生原因和优化算法,linux内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。从内存的原理和结构,到内存... 查看详情

深入理解linux内存子系统(代码片段)

...;有助于提升机器的性能和稳定性。本文主要介绍linux内存组织结构和页面布局,内存碎片产生原因和优化算法,linux内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。从内存的原理和结构,到内存... 查看详情