Skip to content

Latest commit

 

History

History
28 lines (17 loc) · 2.44 KB

2014-10-15 Linux 内存管理简单理解.md

File metadata and controls

28 lines (17 loc) · 2.44 KB
  • tags: linux
  • date: 2014-10-15

Linux 内存管理简单理解

管理 Linux 内存管理方面介绍的书籍与博客很多,推荐《深入理解 Linux 内核》、http://blog.csdn.net/bullbat/article/category/1055017。这里简单描述一下我的个人理解。

首先,在 80x86 系统架构中,平台提供的硬件上的分段与分页机制。在 Linux 内核中来说,分段与分页的功能有点重复,它们都可以划分进程的物理空间:分段可以给每一个进程分配不同的线性地址空间,而分页可以把同一线性地址空间映射到不同的物理空间, Linux 更喜欢使用分页的方式。原因是:

  • 当所有进程使用同意段寄存器器是、内存管理变得简单
  • RISC 架构平台对分段的支持有限、2.6版的 Linux 只有在80x86平台才需要使用分段

实际上,在 Linux 中运行在用户态的所有进程都使用同意代码段和数据段、也就是用户代码段和用户数据段;类似的,运行在内核态的所有进程都使用同一内核代码段、内核数据段。

分页

首先,在32位平台,系统为用户提供了 4GB 的线性虚拟空间,用户在编写程序时只考虑使用这 4GB 线性空间怎样使用就行了,至于这 4GB 的线性空间是否在物理内存中以及如何分配到物理内存中和在物理内存中是否连续是由操作系统完成的。

  • 页框:分页单元把所有的 RAM 分成固定长度的页框(有时叫做物理页),页框是主存的一部分,是一个存储区
  • :指一组线性地址,是一个数据块(通常为4K),可以存放在任何页框或磁盘中
  • 页表:把现行地址映射到物理地址的数据结构,页表存放在主存中
  • 页目录表

在32位系统中通常采用两级分页。32位的线性地址被分为3个域:Directory(目录)、Table(页表)、Offset(偏移量)。

现行地址的转换分两部完成,第一步基于页目录表,第二部基于页表。使用二级模式可以减少所需 RAM 的数量,如果使用一级页表,对4G空间将需要2^20个表项(每项需要4字节时,需要使用 4MB RAM)

在 64位 系统中,由于可寻址空间非常大所以并2级寻址并不适用,通常会使用3级寻址,如 alpha、ia64、ppc64、sh64等体系结构。而在 x86_64 体系结构中使用了4级寻址。