vm.c 파일

static struct frame *vm_get_frame (void);

palloc_get_page 함수를 호출해서 유저메모리풀에서 새로운 물리 메모리 페이지를 가져온 후, 페이지를 성공적으로 가져오면 프레임을 할당하고, 프레임 구조체의 멤버들을 초기화한 후 해당 프레임을 반환 → 모든 유저 공간페이지들은 이 함수를 통해 할당해야 한다!

“지금으로서는 페이지 할당이 실패했을 경우의 swap out을 할 필요가 없습니다. 일단 지금은 PANIC ("todo")으로 해당 케이스들을 표시해 두십시오”

bool vm_do_claim_page (struct page *page);

claim_page 라는 의미는 인자로 주어진 page에 프레임을 할당한다는 것 !

우선 vm_get_frame 으로 프레임을 얻은 후 가상주소-물리 주소 간 매핑을 페이지테이블에 추가(= page에 프레임을 할당)함으로서 MMU를 셋팅해야 한다. 이 연산이 성공적으로 수행되었을 경우 true를, 그렇지 않은 경우 false를 반환한다.

bool vm_claim_page (void *va);

인자로 주어진 va에 페이지를 할당하고, 해당 페이지에 프레임을 할당하는 함수. 페이지를 하나 얻은 후 해당 페이지를 인자로 vm_do_claim_page를 호출해서 프레임을 할당한다.