Linux中代碼段和數據段的加載
請注意:
entry = mk_pte(new_page, vma->vm_page_prot); /*這里是PAGE_COPY,_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED */
當我們對這樣的頁進行寫操作的時候,mmu當然會觸發(fā)page_fault.
if (write_access) {
if (!pte_write(entry))
return do_wp_page(mm, vma, address, pte, entry);
entry = pte_mkdirty(entry);
}
當一個vma是可寫的,而vma中對應的pte又是不可寫的,這就觸發(fā)了copy_on_write機制:do_wp_page會進行相應的copy_on_write處理過程。
所以,不存在是否第一份不能被換出的情況。如果對數據段都是只讀的操作,那么你可以把數據段的頁想象成一個軟鏈接。一旦有了寫操作,那么數據段就變成了一份本地的page。
評論