- 论坛徽章:
- 0
|
原帖由 frank_seng 于 2008-5-7 14:12 发表 ![]()
copy_mm->copy_page_range...
if (cow) {
ptep_set_wrprotect(src_pte);
pte = *src_pte;
}
可见父子pte都是均不可写!
汗,我还真没找到代码在哪儿,不好意思,内存方面实在不懂,太菜了。
我是2.6.25内核,copy_mm如下
- static int copy_mm(unsigned long clone_flags, struct task_struct * tsk)
- {
- struct mm_struct * mm, *oldmm;
- int retval;
- tsk->min_flt = tsk->maj_flt = 0;
- tsk->nvcsw = tsk->nivcsw = 0;
- tsk->mm = NULL;
- tsk->active_mm = NULL;
- /*
- * Are we cloning a kernel thread?
- *
- * We need to steal a active VM for that..
- */
- oldmm = current->mm;
- if (!oldmm)
- return 0;
- if (clone_flags & CLONE_VM) {
- atomic_inc(&oldmm->mm_users);
- mm = oldmm;
- goto good_mm;
- }
- retval = -ENOMEM;
- mm = dup_mm(tsk);
- if (!mm)
- goto fail_nomem;
- good_mm:
- /* Initializing for Swap token stuff */
- mm->token_priority = 0;
- mm->last_interval = 0;
- tsk->mm = mm;
- tsk->active_mm = mm;
- return 0;
- fail_nomem:
- return retval;
- }
复制代码
麻烦LZ把代码的路径讲一下,我好结合上下文看一下。
如果父子都不可写,父写的时候分配一个新页面给父,那老页面是不是就给子了呢?如果子先写,分配一个新页面给子,老页面是不是就给父了呢? |
|