본문 바로가기
개발일지

pintos - virtual memory(3)

by Peter.JH 2023. 12. 19.
728x90

what is pg_round_down?

/* Find VA from spt and return page. On error, return NULL. */
struct page *
spt_find_page (struct supplemental_page_table *spt UNUSED, void *va UNUSED) {
	/* TODO: Fill this function. */
	struct page *page = (struct page *)malloc(sizeof(struct page));
	struct hash_elem *e;

	page->va = pg_round_down(va);

	e = hash_find (&spt->spt_hash, &page->hash_elem);
	free(page);

	return e != NULL ? hash_entry (e, struct page, hash_elem) : NULL;
}

 

 

pg_round_down이 왜 필요할까?

/* Round down to nearest page boundary. */
#define pg_round_down(va) (void *) ((uint64_t) (va) & ~PGMASK)

 

`pg_round_down` 함수는 주어진 가상 주소를 가장 가까운 페이지 경계로 내림하는 역할을 한다. 즉, pg_round_down을 통해 page 시작주소에 맞춰주는 것이다.  이것은 메모리 관리에서 중요한 역할을 한다.

 

1. 페이지 단위 메모리 관리: 운영체제는 메모리를 페이지라는 고정 크기의 블록으로 관리하고 있다. 따라서, 주어진 주소가 속한 페이지를 찾기 위해선, 그 주소를 페이지 경계로 내림해야 한다.

2. 메모리 보호: 각 페이지는 독립적으로 보호될 수 있으므로, 주어진 주소가 속한 페이지를 정확히 파악하는 것이 중요하다. 

 

`pg_round_down` 함수는 주소를 페이지 경계로 내림하여, 해당 주소가 속한 페이지를 파악하는 데 반드시 필요하다. 이 함수를 통해 보조 페이지 테이블(supplemental_page_table)에서 해당 페이지에 대한 정보를 찾을 수 있다.

728x90

'개발일지' 카테고리의 다른 글

pintos - virtual memory(5)  (0) 2023.12.22
pintos - virtual memory(4)  (0) 2023.12.20
pintos - Virtual Memory(1)  (0) 2023.12.14
pintos (부끄러운)실수 기록  (0) 2023.12.14
Git - Divergent branches  (0) 2023.12.09