在mm_struct结构体中有两个用来技术的成员变量,mm_user和mm_count,它们代表不同的层次。
mm_user主要用来记录共用此命名空间的线程数量,在linux创建线程时,会有如下操作,代码中仅仅更新了mm_user的值,并使子进程和父进程共享mm_struct结构体(如果不是创建线程,则子进程会重新申请mm_struct结构体)
atomic_inc(&curent->mm->mm_users); tsk->mm=current->mm; |
mm_count则主要记录对此mm_struct结构体的引用情况,比如在内核线程调度进来的时候,它会借用上一个进程的地址空间(虽然它不会对该地址空间操作),此时mm_count就会增加1。从另一个层面来理解的话,可以理解为mm_count是以进程为单位的,而mm_users则是以线程为单位的。
参考: http://blog.csdn.net/green_shine/article/details/7398902