编辑
2023-11-08
linux
00
请注意,本文编写于 549 天前,最后修改于 549 天前,其中某些信息可能已经过时。

Linux的内存管理是指对系统内存资源进行分配、释放、映射、管理、交换和压缩等一系列操作的管理机制。在Linux中,内存被划分为多个区域,每个区域有不同的作用,包括内核空间、用户空间、缓存和交换分区等。Linux的内存管理旨在最大限度地利用可用内存,同时保证系统的稳定性和可靠性。

下面将详细讲解Linux的内存管理。

1. 虚拟地址空间 Linux采用虚拟内存管理技术,为每个进程提供独立的4GB虚拟地址空间,使得每个进程都有互不干扰的地址空间。进程在初始化和操作时使用的都是基于虚拟地址,只有在需要实际访问内存资源时,才会建立虚拟地址和物理地址的映射,将物理内存页调入内存。

2. 物理地址 Linux将物理内存分为三个管理区域:

  • ZONE_DMA:包含0MB~16MB之间的内存页框,可由老式基于ISA的设备通过DMA使用,直接映射到内核的地址空间。
  • ZONE_NORMAL:包含16MB~896MB之间的内存页框,是常规页框,直接映射到内核的地址空间。
  • ZONE_HIGHMEM:包含896MB以上的内存页框,不进行直接映射,可以通过永久映射和临时映射进行访问。

3. 用户空间 用户进程只能访问用户空间的虚拟地址,每个进程都有自己独立的用户空间。用户空间的虚拟地址范围从0x00000000到0xBFFFFFFF,总容量为3GB。用户进程通常只能访问用户空间的虚拟地址,只有在执行内陷操作或系统调用时才能访问内核空间。

4. 进程与内存 进程占用的用户空间根据访问属性的一致性原则,划分为五个不同的内存区域:

  • 代码段:存放可执行文件的操作指令,是可执行程序在内存中的镜像,只允许读取操作,不可写入。
  • 数据段:存放可执行文件中已初始化的全局变量和静态分配的变量。
  • BSS段:存放程序中未初始化的全局变量,在内存中全部置零。
  • 堆(heap):用于存放进程运行中动态分配的内存段,大小可动态扩张或缩减。
  • 栈(stack):存放程序临时创建的局部变量和函数调用的参数,具有先进后出的特点。

Sources:

  1. linux内存管理(详解) - 知乎
  2. 万字长文详解linux内存管理,值得收藏 - 知乎

Learn more:

  1. linux内存管理(详解) - 知乎
  2. 万字长文详解linux内存管理,值得收藏 - 知乎
  3. Linux 内存管理详解 - 死磕 Java

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!