페이지 테이블 엔트리가 이미 존재하더라도 의도적으로 페이지 폴트를 발생시키고 싶습니다.페이지 폴트를 올리는 방법
그래서 _PAGE_PRESENT
비트를 지워 페이지 오류를 생성했습니다.
pte = get_locked_pte(mm, addr, &ptl);
entry = *pte;
entry = pte_clear_flags(entry, _PAGE_PRESENT);
set_pte_at(mm, addr, pte, entry);
pte_unmap_unlock(pte, ptl);
flush_tlb_range(vma, vma->vm_start, vma->vm_end);
그러나,이 코드가 작동하지 않습니다
여기에 내가 쓴 커널 코드입니다. 의도 한 페이지 오류가 발생하지 않습니다. 정확히 어떻게 페이지 오류를 일으킬 수 있는지 알고 싶습니다.
감사합니다.
커널 코드 또는 사용자 영역 코드를 작성 하시겠습니까? –
사용자 코드로 페이지 오류를 트립 할 커널 코드를 작성하고 있습니까? – jxh
위의 코드는 커널 코드입니다. 위의 코드에서 "addr"은 사용자 공간의 주소입니다. –