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