PintOS에 구현 되어 있는 Hash Table를 이해하고 hash_find() 탐구

발표 동기

hash 사용 이유

<aside> 💡 참조 되는 횟수가 많으면서도 찾아야 하는 데이터의 범위가 넓은 struct supplemental_page_table 를 해쉬 테이블로 관리하기로 결정

</aside>

hash_find()를 파헤쳐 보자

<aside> 💡 해쉬 테이블(h)에서 인자로 받은 해쉬 요소(e)와 va가 같은 요소(page)를 찾아서 찾은 요소(page)를 반환

</aside>

struct hash_elem *
hash_find (struct hash *h, struct hash_elem *e) {
	return find_elem (h, find_bucket (h, e), e);
}
static struct hash_elem *
find_elem (struct hash *h, struct list *bucket, struct hash_elem *e) {
	struct list_elem *i;

	for (i = list_begin (bucket); i != list_end (bucket); i = list_next (i)) {
		struct hash_elem *hi = list_elem_to_hash_elem (i);
		if (!h->less (hi, e, h->aux) && !h->less (e, hi, h->aux))
			return hi;
	}
	return NULL;
}