linux pte的定义,Linux内存管理--基本概念

转自:http://blog.csdn.net/myarrow/article/details/8624687

1. Linux物理内存三级架构

style=

对于内存管理,Linux采用了与具体体系架构不相关的设计模型,实现了良好的可伸缩性。它主要由内存节点node、内存区域zone和物理页框page三级架构组成。

? 内存节点node

内存节点node是计算机系统中对物理内存的一种描述方法,一个总线主设备访问位于同一个节点中的任意内存单元所花的代价相同,而访问任意两个不同节点中的内存单元所花的代价不同。在一致存储结构(Uniform Memory Architecture,简称UMA)计算机系统中只有一个节点,而在非一致性存储结构(NUMA)计算机系统中有多个节点。Linux内核中使用数据结构pg_data_t来表示内存节点node。如常用的ARM架构为UMA架构。

?  内存区域zone

内存区域位于同一个内存节点之内,由于各种原因它们的用途和使用方法并不一样。如基于IA32体系结构的个人计算机系统中,由于历史原因使得ISA设备只能使用最低16MB来进行DMA传输。又如,由于Linux内核采用

?  物理页框page

2. Linux虚拟内存三级页表

Linux虚拟内存三级管理由以下三级组成:

? PGD: Page Global Directory (页目录)

? PMD: Page Middle Directory (页目录)

? PTE:  Page Table Entry  (页表项)

每一级有以下三个关键描述宏:

? SHIFT

? SIZE

? MASK

如页的对应描述为:

/* PAGE_SHIFT determines the page size  asm/page.h */

#define PAGE_SHIFT      12

#define PAGE_SIZE       (_AC(1,UL) <

#define PAGE_MASK       (~(PAGE_SIZE-1))

数据结构定义如下:

/* asm/page.h */

typedefunsignedlongpteval_t;

typedefpteval_t pte_t;

typedefunsignedlongpmd_t;

typedefunsignedlongpgd_t[2];

typedefunsignedlongpgprot_t;

#define pte_val(x)      (x)

#define pmd_val(x)      (x)

#define pgd_val(x)  ((x)[0])

#define pgprot_val(x)   (x)

#define __pte(x)        (x)

#define __pmd(x)        (x)

#define __pgprot(x)     (x)

2.1 Page Directory (PGD and PMD)

每个进程有它自己的PGD( Page Global Directory),它是一个物理页,并包含一个pgd_t数组。其定义见。 进程的pgd_t数据见 task_struct -> mm_struct -> pgd_t * pgd;

ARM架构的PGD和PMD的定义如下:

#define PTRS_PER_PTE  512// PTE中可包含的指针数 (21-12=9bit)

#define PTRS_PER_PMD  1

#define PTRS_PER_PGD  2048   // PGD中可包含的指针数 (32-21=11bit)

#define PTE_HWTABLE_PTRS (PTRS_PER_PTE)

#define PTE_HWTABLE_O

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值