Linux系统内存管理
特此说明: 刘超的趣谈linux操作系统是比较重要的参考资料,本文大部分内容和所有图片来源于这个专栏。
1 物理内存
物理内存根据 NUMA 架构分节点。每个节点里面再分区域。每个区域里面再分页。
物理内存页通过伙伴系统进行分配。进程通过虚拟地址访问。kwapd可以根据物理页面的使用情况对页面换入换出。
2 虚拟内存
虚拟内存,每个进程都有自己独有的内存空间(进程空间),从进程的角度可划分进程空间为用户空间和内核空间。
1、进程用户态虚拟地址空间布局:有存放二进制可执行代码的Text段、存放静态常量的Data段、存放未初始化静态变量的BSS段。
2、进程在内核态布局空间是独一份:存放内核活动需要的代码和数据。
3 空间映射
分段机制: 基于虚拟内存中将内存空间分成多个段空间,同样也把物理内存分成多个段空间,通过
段基地址+段内偏移量
+段表
实现虚拟内存和物理内存的映射关系。
分页机制: 将物理空间和虚拟空间分别划分成一个个页空间,虚拟地址通过页号和页内偏移
+页表
实现映射。另外,内存紧张时可以将暂时不用的页换出到硬盘空间,需要时再换入到内存空间。
4 缺页异常
产生缺页异常的本质原因是物理页没有分配到内存或者没有在页表中建立有效映射关系。通常三种情况:一种是匿名页,一种是文件映射,一种是物理页被换出
待补充
9 References
- https://time.geekbang.org/column/article/94926