미소를뿌리는감자의 코딩

[Pintos_project3 (11)] vm_try_handle_fault 본문

정글 일지

[Pintos_project3 (11)] vm_try_handle_fault

미뿌감 2024. 12. 2. 21:56
728x90

1. 개요

page fault가 발생했을 때의 handler인 vm_try_handle_fault에 대해서 알아보자.

 

2. 본문

/** Project 3: Memory Management - Return true on success */
bool vm_try_handle_fault(struct intr_frame *f UNUSED, void *addr UNUSED, bool user UNUSED, bool write UNUSED, bool not_present UNUSED) {
    struct supplemental_page_table *spt UNUSED = &thread_current()->spt;
    struct page *page = spt_find_page(&thread_current()->spt, addr);

    /* TODO: Validate the fault */
    if (addr == NULL || is_kernel_vaddr(addr))
        return false;

    return vm_do_claim_page(page);  // demand page 수행
}

이번 코드는 정말 간단하다.

현재 thread의 spt를 찾아주고, spt를 바탕으로 va에 해당하는 page를 찾아준다.

이후, 찾은 page를 기반으로 vm_do_claim()함수를 이용해서 VM와 PM을 mapping 시켜준다.

 

3. 결과

56 of 141 tests failed를 확인할 수 있다.

728x90