- 論壇徽章:
- 0
|
原帖由 frank_seng 于 2008-5-7 14:12 發(fā)表 ![]()
copy_mm->copy_page_range...
if (cow) {
ptep_set_wrprotect(src_pte);
pte = *src_pte;
}
可見(jiàn)父子pte都是均不可寫(xiě)!
汗,我還真沒(méi)找到代碼在哪兒,不好意思,內(nèi)存方面實(shí)在不懂,太菜了。
我是2.6.25內(nèi)核,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;
- }
復(fù)制代碼
麻煩LZ把代碼的路徑講一下,我好結(jié)合上下文看一下。
如果父子都不可寫(xiě),父寫(xiě)的時(shí)候分配一個(gè)新頁(yè)面給父,那老頁(yè)面是不是就給子了呢?如果子先寫(xiě),分配一個(gè)新頁(yè)面給子,老頁(yè)面是不是就給父了呢? |
|