说到内存我们都知道,机器插多大的内存条就有多大的内存,这也是我们常说的物理内存。而 linux 为了更好地管理和使用内存,定义了虚拟内存的概念。
虚拟内存
Linux操作系统采用虚拟内存管理技术,使得每个进程都有各自互不干涉的进程地址空间。32位操作系统的虚拟内存是大小为4G的线性虚拟空间,也就是2^32,64位操作系统一般是2^48。用户所看到和接触到的都是虚拟地址,无法看到实际的物理内存地址。
32位操作系统4G的虚拟内存又被认为的分为了两部分:用户空间和内核空间。用户空间占3G,内核空间占1G,即3G到4G之间的1G空间。而64位操作系统则是用户空间和内核空间各占2^47=128T,下文都以32位操作系统进行讨论。

当进程需要内存时,从内核获取的地址都是虚拟地址,当需进程要实际访问内存的时候,会由内核的 “请求页机制” 产生 “缺页异常”,从而分配物理内存页。
Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数个4k大小的内存页,作为分配和回收内存的基本单位。

地址转换和页表
从上面知道,逻辑地址到物理地址需要进行地址转换,其实逻辑地址需要先转换成线性地址,再由线性地址转换成物理地址,只不过Linu

本文介绍了Linux操作系统中的虚拟内存管理,包括虚拟内存的概念、地址转换过程、页表机制、进程如何使用内存、内存分配算法如伙伴系统和slab,以及内存映射和回收策略。通过理解这些核心概念,读者能更好地掌握Linux内存管理的基础知识。
最低0.47元/天 解锁文章
1万+

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



