1、Linux内存是怎么工作的
1. 内存映射
大多数计算机用的主存都是动态随机访问内存(DRAM),只有内核才可以直接访问物理内存。Linux内核给每个进程提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样进程就可以很方便的访问内存(虚拟内存)。
虚拟地址空间的内部分为内核空间和用户空间两部分,不同字长的处理器地址空间的范围不同。32位系统内核空间占用1G,用户空间占3G。64位系统内核空间和用户空间都是128T,分别占内存空间的最高和最低处,中间部分为未定义。
并不是所有的虚拟内存都会分配物理内存,只有实际使用的才会。分配后的物理内存通过内存映射管理。为了完成内存映射,内核为每个进程都维护了一个页表,记录虚拟地址和物理地址的映射关系。页表实际存储在CPU的内存管理单元MMU中,处理器可以直接通过硬件找出要访问的内存。
当进程访问的虚拟地址在页表中查不到时,系统会产生一个缺页异常,进入内核空间分配物理内存,更新进程页表,再返回用户空间恢复进程的运行。
MMU以页为单位管理内存,页大小4KB。为了解决页表项过多问题Linux提供了多级页表和HugePage的机制。
虚拟内存空间分布
用户空间内存从低到高是五种不同的内存段:
-
只读段 代码和常量等
-
数据段 全局变量等
-
堆 动态分配的内存,从低地址开始向上增长
-
文件映射 动态库、共享内存等,从高地址开始向下增长

本文深入探讨了Linux内存管理机制,包括内存映射、分配与回收、系统缓存优化、内存泄漏处理、Swap机制及其影响。通过监控工具如free、top、vmstat和pidstat,分析内存性能瓶颈并提出优化策略。
订阅专栏 解锁全文

3502

被折叠的 条评论
为什么被折叠?



