본문 바로가기
SW사관학교 정글 4기/pintos

install_page

by g0n1 2022. 6. 11.
728x90

코드

static bool
install_page (void *upage, void *kpage, bool writable) {
	struct thread *t = thread_current ();

	/* Verify that there's not already a page at that virtual
	 * address, then map our page there. */
	return (pml4_get_page (t->pml4, upage) == NULL
			&& pml4_set_page (t->pml4, upage, kpage, writable));
}

목적

  • 페이지 테이블에 upage(user virtual address) -> kpage(kernel virtual address) 매핑을 추가함.
  • unmapped 상태인지 먼저 확인하고, mapping함, 이미 mapped라면 return false
  • kpage는 반드시 user pool에서 할당받아야 한다. 실패시 false
  • 인자인 writable이 true인 경우엔 사용자 프로세스가 해당 페이지를 수정할 것이고 아니면 read-only.

호출되는 곳

userprog/process.c의 setup_stack함수, load_segment함수

728x90

댓글