Linux 内核之内存管理
文章平均质量分 97
Linux 内核之内存管理
Projectsauron
昨夜西风凋碧树,独上高楼,望尽天涯路。
展开
-
Linux 内存管理(八)之 slab 分配器
在 Linux 内存管理(七)之伙伴系统算法一节中,我们学习了 Linux 内核如何使用伙伴系统算法以页为单位管理内存,进行内存分配。这一节,将要提到的 slab 算法也是一种内存分配算法。原创 2024-07-29 21:15:34 · 53550 阅读 · 0 评论 -
Linux 内存管理(七)之伙伴系统算法
伙伴系统算法是一种用来管理分配和释放内存的算法,它在 Linux 内核中被广泛使用。其设计目标是高效地管理内存碎片,并且具有快速的分配和释放速度。接下来将详细探讨一下 Linux 中的伙伴系统算法。原创 2024-07-24 21:01:04 · 55424 阅读 · 0 评论 -
Linux 内存管理(六)之内存管理区
为了支持 NUMA 模型,也即 CPU 对不同内存单元的访问时间可能不同,此时系统的物理内存被划分为几个节点,一个节点对应一个内存簇 bank,即每个内存簇被认为是一个节点。接着各个节点又被划分为内存管理区域,接下来将对内存管理区域进行讨论。原创 2024-07-23 21:52:36 · 55442 阅读 · 0 评论 -
Linux 内存管理(五)之转换后援缓存器(TLB)
在传统的地址转换方式中,每次访问内存时,CPU 都需要通过页表来查找虚拟地址到物理地址的映射关系。这个过程需要多次内存访问,从而导致较大的延迟。为了减少这种延迟,引入了一种叫做 TLB 的缓存机制,将最近使用过的映射关系存储在高速缓存中。TLB 本质上就是一块高速缓存。TLB 缓存虚拟地址和其映射的物理地址。硬件存在 TLB 后,虚拟地址到物理地址的转换过程发生了变化。虚拟地址首先发往 TLB 确认是否命中 cache,如果 TLB hit 直接可以得到物理地址。否则,一级一级查找页表获取物理地址。原创 2024-07-22 21:38:02 · 56557 阅读 · 0 评论 -
Linux 内存管理(四)之物理地址扩展(PAE)
在 32 位操作系统中,使用 32 位的寻址空间,最多只能表示2322^{32}232个不同的地址,即 4GB 的地址空间。这意味着无论实际物理内存有多大,操作系统最多只能寻址 4GB 的物理内存。然而,在实际应用中,特别是在服务器和高性能计算领域,需要处理大型数据集和运行大规模应用程序的情况下,4GB 的内存往往不够用。因此,引入 PAE 机制可以扩展物理地址空间,使操作系统能够支持更大的物理内存。原创 2024-07-21 22:38:53 · 57037 阅读 · 0 评论 -
Linux 内存管理(三)之分页机制
在早期的操作系统中,分段机制被广泛采用,但随着技术的发展,分页机制逐渐成为主流选择。接下来,我们将深入探讨分页机制的原理、工作方式以及与其他内存管理机制的比较。原创 2024-07-21 09:36:26 · 57906 阅读 · 0 评论 -
Linux 内存管理(二)之GDT与LDT
在 Linux 系统中,GDT()和 LDT()是用来管理和定义内存段(segment)的数据结构。它们是在 x86 架构下操作系统使用的关键概念,用于实现内存保护和虚拟内存管理。全局描述符表(GDT在单处理器系统中只有一个 GDT,而在多处理器系统中每个 CPU 对应一个 GDT。GDT 可以放置在内存的任何位置。当程序员通过段寄存器引用一个段描述符时,CPU 必须知道 GDT 的入口地址,即基地址放在何处。为此,Intel 的设计者提供了一个 GDTR 寄存器,用于存放GDT的基地址。原创 2024-07-20 08:18:41 · 58413 阅读 · 0 评论 -
Linux 内存管理(一)之分段机制
Linux 操作系统采用了分段机制来实现进程的内存管理。分段允许进程以逻辑上连续的方式访问内存,而无需将整个进程存储在连续的物理内存地址上。本文将介绍 Linux 的分段机制,包括分段的基本概念、分段表的组织方式和进程访问内存的原理。我们还将讨论 Linux 中的段选择子和段描述符,以及如何使用它们来管理进程的内存空间。现在大致了解了分段的基本原理,系统运行时,地址空间中不同段被重定位到物理内存中,与之前的整个物理地址空间中只有一个基地址+偏移量的方式相比,大量的节省了物理内存。原创 2024-07-19 14:58:02 · 58535 阅读 · 0 评论