集群系统MOSIX分析(5)
2008-12-01 11:04:43 来源:WEB开发网MOSIX中进程的mm_struct结构中提取内存状态,并被封装成struct mm_stats_h结构,和MIG_MM_STATS 消息一起发送到目的进程去(参见mig_send_mm_stats())
struct mm_stats_h
{
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 task_size;
};
进程虚地址空间:
为了能以自然的"方式"管理进程虚空间,Linux定义了虚存段VMA(vitual memory area),一个VMA是进程的一段连续的虚存空间,在这段虚存里的所有单元拥有相同的特征,如相同的访问权限、属于同一进程等。VMA由struct vm_area_struct描述,域vm_start 和vm_end是两个虚拟地址,它们描述了一个虚拟内存区域在进程虚拟地址空间中的位置;域vm_file记录了该区域所映射的文件,而vm_offset 表示该区域在映射文件中的开始位置。如果这两个域存在,它们和vm_start 和vm_end一起,描述了文件vm_file和虚拟内存之间的映射关系。域vm_next是个指针,用来将同一进程的所有虚拟内存区域连接成一个链表,表头位于mm_struct结构的mmap成员。因此,能够从mmap表头出发,依次获得所有的虚拟内存区域的状态。下面列出了struct vm_area_struc的一些主要成员。
struct vm_area_struct {
struct mm_struct * vm_mm; /* 所属的地址空间,回指mm_struct结构. */
unsigned long vm_start; /* 开始地址. */
unsigned long vm_end; /* 结束地址*/
struct vm_area_struct *vm_next; /*指向本进程下一个VMA ,按地址排序 */
pgprot_t vm_page_prot; /*该VMA的访问属性. */
unsigned long vm_flags; /* 标志位 */
struct vm_operations_struct * vm_ops; /*该VMA的操作集*/
struct file * vm_file; /* 指向映射文件 (可以为 NULL). */
/* AVL树,按地址排序*/
short vm_avl_height;
struct vm_area_struct * vm_avl_left;
struct vm_area_struct * vm_avl_right;
/*共享VMA*/
struct vm_area_struct *vm_next_share;
struct vm_area_struct **vm_pprev_share;
}
更多精彩
赞助商链接