文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Linux系统的内存管理地址映射机制

Linux系统的内存管理地址映射机制

时间:2007-04-17  来源:Echo CHEN

地址的映射机制,主要完成主存.辅存和虚存之间的关联 。包括磁盘文件到虚存的映射和虚存与内存的映射关系。为了虚拟存储和进程调度相一致。linux 采用可一系列的数据结构,和一个硬件缓存(tlb)来实现地址映射机制。

mm_strut 用来描述进程的缓存。

struct mm_struct { struct vm_area_struct * mmap; /* list of vmas */ struct vm_area_struct * mmap_avl; /* tree of vmas */ struct vm_area_struct * mmap_cache; /* last find_vma result */ pgd_t * pgd; atomic_t count; int map_count; /* number of vmas */ struct semaphore mmap_sem; spinlock_t page_table_lock; unsigned long context; unsigned long start_code, end_code, start_data, end_data; unsigned long start_brk, brk, start_stack; unsigned long arg_start, arg_end, env_start, env_end; unsigned long rss, total_vm, locked_vm; unsigned long def_flags; unsigned long cpu_vm_mask; unsigned long swap_cnt; /* number of pages to swap on next pass */ unsigned long swap_address; /* * this is an architecture-specific pointer: the portable * part of linux does not know about any segments. */ void * segments; };

他描述了一个进程的页目录,有关进程的上下文信息.以及数据.代码.堆栈的启示结束地址。还有虚拟存储取得数目。以及调度存储用的链表指针,他的参差比较高。较高层次的vm_area-struct 是描述进程的虚拟地址区域,他形成一个双相链表。按虚地址下降排列,这样当内核需要在一个给定进程页上执行给定操作时。客从双向列表中找到该项。在世想有关页的处理。如页错误.页换出等等。 他的具体结构如下:

struct vm_area_struct { struct mm_struct * vm_mm; /* vm area parameters */ unsigned long vm_start; unsigned long vm_end;   /* linked list of vm areas per task, sorted by address */ struct vm_area_struct *vm_next;   pgprot_t vm_page_prot; unsigned short vm_flags;   /* avl tree of vm areas per task, sorted by address */ short vm_avl_height; struct vm_area_struct * vm_avl_left; struct vm_area_struct * vm_avl_right;   /* for areas with inode, the list inode->i_mmap, for shm areas, * the list of attaches, otherwise unused. */ struct vm_area_struct *vm_next_share; struct vm_area_struct **vm_pprev_share;   struct vm_operations_struct * vm_ops; unsigned long vm_offset; struct file * vm_file; unsigned long vm_pte; /* shared mem */ };

而page 结构 则是对物理页进行描述的一个数据结构,他不是一个真正的物理页。而只不过是描述了一个物理页的内容和框架,作了逻辑页的一个标志。他的标志域定义了这个页在进行的操作,链域则定义了一个双项链表时的页框,可以很容易的查找到为实际物理内存的使用直到方便。 他的具体结构如下:

typedef struct page { /* these must be first (free area handling) */ struct page *next; struct page *prev; struct inode *inode; unsigned long offset;

 

相关阅读 更多 +
排行榜 更多 +
准时宝

准时宝

游戏工具 下载
伐木大亨

伐木大亨

模拟经营 下载
超可爱的卡皮巴拉闯关

超可爱的卡皮巴拉闯关

动作格斗 下载