<aside> 💡 즉, SWAP OUT/IN을 위한 프레임 교체 정책을 수행할 수 있다.

</aside>

struct frame 수정

struct frame {
	void *kva;	//커널 가상 주소를 가르키는 포인터
	struct page *page;	//프레임과 맵핑되는 프로세스 유저의 가상주소 페이지
	struct list_elem frame_elem; //추가
};

주요 함수 구현

vm_get_frame(void)

static struct frame *
vm_get_frame (void) {
	struct frame *frame = (struct frame*)malloc (sizeof(struct frame));
	/* USER POOL에서 커널 가상 주소 공간으로 1page 할당 */
	frame -> kva = palloc_get_page(PAL_USER);
	
	if (frame -> kva == NULL){
		frame -> page = NULL;
		return frame;
	}

	frame -> page = NULL;

	ASSERT (frame != NULL);
	ASSERT (frame->page == NULL);
	return frame;
}