说到内存我们都知道,机器插多大的内存条就有多大的内存,这也是我们常说的物理内存。而 linux 为了更好地管理和使用内存,定义了虚拟内存的概念。
虚拟内存
Linux操作系统采用虚拟内存管理技术,使得每个进程都有各自互不干涉的进程地址空间。32位操作系统的虚拟内存是大小为4G的线性虚拟空间,也就是2^32,64位操作系统一般是2^48。用户所看到和接触到的都是虚拟地址,无法看到实际的物理内存地址。
32位操作系统4G的虚拟内存又被认为的分为了两部分:用户空间和内核空间。用户空间占3G,内核空间占1G,即3G到4G之间的1G空间。而64位操作系统则是用户空间和内核空间各占2^47=128T,下文都以32位操作系统进行讨论。
当进程需要内存时,从内核获取的地址都是虚拟地址,当需进程要实际访问内存的时候,会由内核的 “请求页机制” 产生 “缺页异常”,从而分配物理内存页。
Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数个4k大小的内存页,作为分配和回收内存的基本单位。