Linux虚拟内存管理笔记1.doc_第1页
Linux虚拟内存管理笔记1.doc_第2页
Linux虚拟内存管理笔记1.doc_第3页
Linux虚拟内存管理笔记1.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux虚拟内存管理笔记1Linux将内存管理分为三个层次:存储节点(node),管理区(zone),和页面(page)。1.存储节点Linux把cpu访问时间相同的存储空间叫做:存储节点。其数据结构为:typedef struct pglist_data zone_t node_zonesMAX_NR_ZONES; zonelist_t node_zonelistsGFP_ZONEMASK+1; int nr_zones;/*表示该节点中管理区的个数,1-3*/ struct page *node_mem_map; unsigned long *valid_addr_bitmap; struct bootmem_data *bdata; unsigned long node_start_paddr;/*节点的起始地址对应的页号*/ unsigned long node_start_mapnr; unsigned long node_size;/*节点中页面总数*/ int node_id; struct pglist_data *node_next; pg_data_t;l 若干存储节点的pglist_data数据结构可以通过node_next形成一个单链表队列。l 每个结构中的node_mem_map指向具体节点的page结构数组,该数组包含了存储节点中的所有物理页框。数组的下标就是页号。l 数组node_zone就是该节点的最多三个页面管理区。l 在pglist_data结构里设置了一个node_zonelists数组,其类型定义也在同一文件中:typedef struct zonelist_struct zone_t *zoneMAX_NR_ZONE+1; /NULL delimitedInt gfp_mast; zonelist_t; 每一个zonelist_t代表一种页面分配策略。2.管理区Linux将一个节点中的存储区域划分为三个管理区,分别是ZONE_DMA区(小于16MB),ZONE_NORMAL(16MB896MB),ZONE_HIGHMEM区(大于896MB)。其数据结构为:typedef struct zone_struct spinlock_t lock; unsigned long free_pages; unsigned long pages_min, pages_low, pages_high; int need_balance; free_area_t free_areaMAX_ORDER; struct pglist_data *zone_pgdat; struct page *zone_mem_map; unsigned long zone_start_paddr; unsigned long zone_start_mapnr; char *name; unsigned long size; zone_t;#define ZONE_DMA 0#define ZONE_NORMAL 1#define ZONE_HIGHMEM 2#define MAX_NR_ZONES 3l lock :用来保证对该结构中其它域的串行访问l free_pages :在这个区中现有空闲页的个数l pages_min、pages_low及 pages_high是对这个区最少、次少及最多页面个数的描述l need_balance:与kswapd合在一起使用l free_area:在伙伴分配系统中的位图数组和页面链表l zone_pgdat:本管理区所在的存储节点l zone_mem_map:该管理区的内存映射表l zone_start_paddr:该管理区的起始物理地址l zone_start_mapnr:在mem_map中的索引(或下标)l name:该管理区的名字l size:该管理区物理内存总的大小其中,free_area_t定义为:#difine MAX_ORDER 10 type struct free_area_struct struct list_head free_list unsigned int *map free_area_t 因此,zone_struct结构中的free_areaMAX_ORDER是一组“空闲区间”链表。为什么要定义一组而不是一个空闲队列呢?这是因为常常需要成块地在物理空间分配连续的多个页面,所以要按块的大小分别加以管理。因此,在管理区数据结构中既要有一个队列来保持一些离散(连续长度为1)的物理页面,还要有一个队列来保持一些连续长度为2的页面块以及连续长度为4、8、16、直至2 MAX_ORDER(即4M字节)的队列。3.页面typedef struct page struct list_head list; struct address_space *mapping; unsigned long index; struct page *next_hash; atomic_t count; unsigned long flags; struct list_head lru; wait_queue_head_t wait; struct page *pprev_hash; struct buffer_head * buffers; void *virtual; struct zone_struct *zone; mem_map_t;l list :指向链表中的下一页l mapping :用来指定我们正在映射的索引节点(inode)l index:在映射表中的偏移l next_hash:指向页高速缓存哈希表中下一个共享的页l count:引用这个页的个数l fla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论