操作系统教程ch4-4.7Linux虚存.ppt
4.7Linux虚拟存储管理
4.7.1物理内存管理4.7.2进程虚拟地址空间管理4.7.3页表机制4.7.4缺页异常处理4.7.1物理内存管理
1.物理内存数据结构为了管理非均质存储结构,物理内存分三个层次管理:(1)页框(2)管理区(3)存储节点
存储节点、管理区、页框的关系
存储节点存储区页框…页框存储区页框…页框……(1)页框管理?物理内存划分成页框,其长度与页面相等,所有页框都由mem_map表描述,初始化时通过free_area_init()函数创建。?mem_map本身是由mem_map_t组成的数组,每个mem_map_t描述一个页框,数组就代表系统中的全部页框,数组下标就是物理页框的序号。?内核用此结构体来管理页框,了解页框的使用情况,例如,是否空闲?是否被占用?谁拥有页框内的页面(如用户进程、内核数据或页缓冲)。mem_map_ttypedefstructpage{/*page数据结构*/structlist_headlist;/*list_head是通用双向链队列结构,链接page*/structpage*next_hash;/*pagecache的hash表中的后继指针*/atomic_tcount;/*访问此页框的进程个数*/unsignedlongflags;/*标志位*/unsigneddirty;/*修改标志*/structlist_headlru;/*页面换出链表或活跃链表*/unsignedlongage;/*页面的年龄,越小越先换出*/unsignedlongmap_nr;/*页框在mem_map表中的下标*/structpage**pprev_hash;/*pagecache的hash表中的前向指针*/structbuffer_head*buffers;/*若该页框用做缓冲区,指示缓冲区地址*/structinode*inode;/*页框内存放代码或数据所属文件的inode*/unsignedlongoffset;/*页框内存放代码或数据所属文件的位移*/structzone_structzone;/*页框所在管理区*/}mem_map_t;(2)管理区管理
内存被划分成三个区:ZONE_DMA区,专供DMA使用;ZONE_NORMAL区,被常规使用;ZONE_HIGHMEM区,内核不能直接映射区。设置ZONE_DMA是保证磁盘I/O所需的连续物理页框,ZONE_NORMAL里的页框用作通常的内存分配。zone_struct描述:
typedefstructzone_struct{spinlock_tlock;/*自旋锁,保证对zone的互斥访问*/unsignedlongoffset;/*offset表示该分区在mem_map中的起始页框号*/unsignedlongfree_pages;/*该区空闲页框数*/unsignedlongpages_min,pages_low,pages_high;/*该区最少、次少和最多页框数描述*/free_area_tfree_area[MAX_ORDER];/*伙伴系统中的空闲页框链表数组*/structpglist_data*zone_pgdat;/*该区所在存储节点pglist_data*/structpage*zone_mem_map;/*该区内存映射表*/unsignedlongzone_start_paddr;/*该区起始物理地址*/unsignedlongzone_start_mapnr;/*在mem_map中的下标*/unsignedlongsize;/*管理区物理内存大小*/char*name;/*管理区的名字*/}zone_t;(3)存储节点管理typedefstructpglist_data{/*存储节点的结构*/