内存屏障
1、概述
参考:对优化说不 - Linux 中的 Barrier
1.1-load/store
在介绍内存屏障前,要先了解cpu中的load和store概念。正常来说,操作系统中的数据结构是存放在内存上的,而内存又分l1-l3 cache和主存,那么当CPU对数据结构进行读写操作的时候,就需要先将内存中的数据load到cache上,最后再load到cpu的寄存器内。
内存管理1_物理内存分配
0、前言
主要分析内存的分配机制
https://blog.csdn.net/m0_65931372/article/details/126234314
1、内存结构
引自Linux 物理内存管理涉及的三大结构体之struct page
1.1 页
内存管理6_缺页异常
1、介绍
什么是缺页异常?
当进程尝试访问当前不在其工作集内存中的页面时,就会发生缺页异常。这种事件触发缺页异常中断,导致内核采取特定行动来处理这种情况。
缺页异常的类型
* 次要缺页异常(Minor Page Faults): 当页面不在进程的当前工作集中,但仍然驻留在内存的某个地方时发生。
* 主要缺页异常(Major Page Faults): 当需要从磁盘(如交换区或内存映射文件)
内存管理4-页面回收
1、概述
内核中的内存页面回收算法叫做PFRA(page frame reclaiming algorithm)。
其那边我们分析了物理页内存的管理和申请流程,但是如果内存一直不进行回收,那么系统中可用的物理内存很快就会耗尽,因此PFRA的作用就是在合适的时机找到合适的page进行回收,从而保证其他进程在新申请内存时有内存可用。
所以PFRA就有如下几个核心点需要实现:
1.
什么样的页可以回收
2.
什么时候回收
3.
怎么安全的回收页
2、
内存管理3_slab_slub
1、SLAB 内存分配器
SLAB 内存分配器是 Linux 内核中用于管理内核对象的一种机制,它通过预分配和重用对象来优化性能。
The Slab Allocator: An Object-Caching Kernel Memory Allocator
1.1-基本原理
操作系统中内存碎片是一个常见的需要解决严重问题,我们上一片文章已经分析了Linux内核中的一种解法:
内存管理2_伙伴系统
1、背景分析
Linux内核需要有效地管理内存,以支持各种类型的应用和服务。传统的内存分配方法(如连续内存分配)存在一些不足,例如内存碎片和分配效率低下。频繁的申请和释放不同大小的连续页框必然会导致已分配的页框块分散了许多小块的空闲页框,可能会产生的问题就是:即使内存页框是充足的,但要申请一个大的页框可能也会因为没有足够的连续页框而失败。
为了避免内存碎片化而引发上述问题,通常可以有两种方法:
1. 使用分页单元把不连续的页框映射到连续的线性空间。
2. 使用一种适当的技术用以记录当前连续页框的情况,避免分配小组连续页框的时候对大的页框进行切割。
为了解决上述问题,