加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

(转)Linux内存管理--基本概念及相关数据结构

(2011-03-29 16:02:07)
标签:

linux

内存管理

page

杂谈

分类: 工作*Linux

一、内存管理的基本概念

       1.存储空间

       32位嵌入式系统中,存储空间的地址范围从0x000000000xFFFFFFFF。这4GB存储范围内可以包括以下几种存储空间:

       设备空间(MT_DEVICE)、内部高速SRAM空间(MT_CACHECLEAN)、内部mini cache空间(MT_MINICLEAN)、低端中断向量空间(MT_LOW_VECTORS)、高端中断向量空间(MT_HIGH_VECTORS)、RAM内存空间(MT_MEMORY)、ROMflash)空间(MT_ROM

       2.内存空间

       系统的内存空间特指上面的RAM内存空间。

       3.内存页(page

       Linux是以页(page)为单位来管理物理内存的,一页大小一般等于4096(字节)。页容量越大,系统中可能存在的内存碎片就越多。对应内存页的重要数据结构有struct page

       4.内存区段(bank

       一个内存bank表示一块连续内存区域,一个bank一般对应处理器的一个RAM片选管脚上连接的RAM芯片内存空间。对应内存bank的数据结构有struct meminfo

       5.内存节点(node

       内存节点是指有一个或者多个内存bank组成的内存集合,如果一个内存节点由多个内存bank组成,这些内存bank之间可以地址连续,也可以不连续,即内存节点内可以存在内存孔洞。对应内存节点的重要数据结构有struct pglist_data(pg_data_t)

       6.内存页区(zone

       内存页区是定义在内存节点(node)内的概念,每个内存节点可分为3个内存页区,即DMA页区(ZONE_DMA=0)、Normal页区(ZONE_NORMAL=1)和HighMem页区(ZONE_HIGHMEM=2),三个页区的含义如下:

1)  DMA页区:可以进行DMA操作的RAM内存区域。

2)  Normal页区:不能进行DMA操作的RAM内存区域。

3)  HighMem页区:属于高端内存的区域,高端内存是指系统中的物理内存容量太大,其中高于一定域值的RAM内存页区就是高端内存页区。

对应的内存页区的重要数据结构有struct zone

7.空闲内存区域(free area

对应内存空闲区域的重要数据结构有struct free_area

8NUMANon-Uniform Memory Access)非一致内存访问

二、内存管理相关数据结构

       1Struct page内存页描述符结构

       struct page {

       page_flags_t flags;  页标志字

       atomic_t _count;    页引用计数器

       atomic_t _mapcount;     页映射计数器

       unsigned long private;    私有数据指针

       struct address_space *mapping;    该页所在地址空间描述结构指针,用于内容为文件的页帧

       pgoff_t index;               该页描述结构在地址空间radix树page_tree中的对象索引号即页号

       struct list_head lru;        最近最久未使用struct slab结构指针链表头变量

#if defined(WneANT_PAGE_VIRTUAL)

       void *virtual;                

#endif

};

 2.struct per_cpu_pageset每CPU高速缓存内存组结构
struct per_cpu_pageset {
 struct per_cpu_pages pcp[2]; 
#ifdef CONFIG_NUMA
 unsigned long numa_hit;  
 unsigned long numa_miss; 
 unsigned long numa_foreign; 
 unsigned long interleave_hit;  
 unsigned long local_node; 
 unsigned long other_node; 
#endif
} ____cacheline_aligned_in_smp;
3.struct per_cpu_pages CPU高速缓存描述结构
struct per_cpu_pages {
 int count;  
 int low;  
 int high;  
 int batch;  
 struct list_head list; 
};
4.struct pagevec 页向量描述结构
struct pagevec {
 unsigned long nr; 该页向量中的内存页数
 unsigned long cold;冷热标志 0 热区 非0 冷区
 struct page *pages[PAGEVEC_SIZE]; 该页向量中的页描述结构指针数组
};
5.struct page_address_map页地址映射描述结构
struct page_address_map {
 struct page *page; 页的描述结构
 void *virtual; 页的虚拟地址
 struct list_head list; 通过list字段连接到页表池全局链表page_address_pool中
};
6.static struct page_address_slot页地址槽描述结构
static struct page_address_slot {
 struct list_head lh;   
 spinlock_t lock;   
} ____cacheline_aligned_in_smp page_address_htable[1<<PA_HASH_ORDER];

 

 原文地址 http://blogold.chinaunix.net/u3/94019/showart_1915436.html

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有