学习笔记

在路上

导航

Linux内存管理基本框架

Posted on 2008-08-22 14:42  An Shi  阅读(224)  评论(0编辑  收藏  举报

一、 Linux使用了三层内存映射机制。

    为了在不同的CPU上实现内存管理,Linux设计了一种通用的内存管理模型。即:页面目录(PGD),中间目录(PMD),页面表(PT)三层。PT中的表项称为PTE(Page Table Entry)。三者均为数组。相应的,在逻辑上把线性地址从高位到低位划分为4个位段,分别为:PGD中的下标,PMD中的下标,页面表中的下标,以及物理页面内的位移。示意图如下:

 

 

 

 

下面通过代码来具体说明linux的内存映射机制。下面的代码都已i386 cpu(老的两层结构)来说明。

==================== include/asm-i386/pgtable-2level.h 4 18 ====================
4 /*
5 * traditional i386 two-level paging structure:
6 */
7
8 #define PGDIR_SHIFT 22 //线性地址中PGD下标位段的起始地址,此处定义为22,即bit22(第23位)
9 #define PTRS_PER_PGD 1024
10
11 /*
12   * the i386 is two-level, so we don't really have any
13   * PMD directory physically.
14   */
15 #define PMD_SHIFT 22
16 #define PTRS_PER_PMD 1
17
18 #define PTRS_PER_PTE 1024